1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1189814602/
201 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 11:56:55 ] Excelが無くても動くアプリが作れる
202 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 14:20:22 ] VBAは高級言語だぞ。 実行がExcelに縛り付けられていることは、言語自体の話とは別。
203 名前:デフォルトの名無しさん [2007/12/30(日) 15:23:09 ] 折れの場合、vs2005express で、やってみようとしたけど結局、VBAにしか、関心が集まらなかった。イメージがわきやすいからだと思う。 Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?
204 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:14:47 ] エクセルのVBAでゲーム作って来いって課題が出たんだが、インベーダーみたいのを作るとして 玉の発射とかの解説してるサイトって無いですか? というか、シューティングゲーム作成の解説のサイトで良いのですが なかなか見付からない・・・
205 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:27:53 ] ったく、専学はパーの製造装置でしかないな
206 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:30:28 ] >>204 学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w 素直に、マインスイーパみたいなヤツでいいと思うよ。 正直、オススメしないぞ。後で行き詰って困ることになる気がする。 ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。
207 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:42:39 ] >>206 いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw 敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと
208 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:58:57 ] excel2000のVBAで、材料一覧を印刷用にまとめる、材料表を作ったのですが 利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。 そこで、いろいろと原因を探っているんですが、質問です。 シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか? ご教授願います。よろしくお願いします。
209 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:07:39 ] >>207 よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。 オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。
210 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:41:33 ] >>209 dクス 挑戦してみる^
211 名前:デフォルトの名無しさん [2007/12/31(月) 10:27:56 ] 今日も今日とて仕事でVBA
212 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:41:25 ] 大晦日も仕事か お疲れ様です
213 名前:デフォルトの名無しさん [2007/12/31(月) 13:33:39 ] いい句だなぁ。
214 名前:デフォルトの名無しさん [2007/12/31(月) 15:45:45 ] かなり微妙な手当てが出たお
215 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:20:24 ] myPath = "C:\TEST\*.xls" If Dir(myPath) <> "" then Kill myPath End If だとDir(myPath)がオープンしっぱなしになるそうです。 どう書けば閉じるのでしょうか?
216 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 02:36:50 ] >>215 オープンもしてないモノを、どうしろと? 意味が分かってないなら、せめて本人に書き込ませろ。 ところで、あけおめ。
217 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 03:14:41 ] >>215 解釈1 if FileExists("hoge") then Kill "hoge" 解釈2 myPath = "C:\TEST\*.xls" TargetPath=Dir(myPath) Do Until TargetPath= "" Kill TargetPath TargetPath=Dir() Loop オープンは関係ないけどこのどちらかがやりたいのではないかと予想
218 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:14:44 ] 開いていないファイルに書き込みパスワードが掛かっているか どうすれば判定できますか? ファイルをパスワードで開いてからだったら、 If ActiveWorkbook.WriteReserved Then とかで判定できると思うのですが、パスワードは 不明でその有無だけ判定したいのです。
219 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:52:29 ] >>216 知らないのか? myPath = "C:\TEST\" Dir(myPath) RmDir myPath してみろ。オープンされてるから
220 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:16:33 ] あけましておめでとうございます。 >>208 についてお願いしたいのですが・・・
221 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:29:49 ] >>219 ・・・・ RmDir myPath そのまま実行してみろ ヘルプ読んで出直せ
222 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:32:05 ] ポカーン
223 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:24:31 ] >>220 ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。 保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。 これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。
224 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:45:14 ] 1 2 3 1 10 20 30 2 ------------ 問題Y=1 問題X=1 回答Y=2 回答X=1 For i = 1 To 10 Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) + Cells(問題Y, 問題X + 1), "問(i)") 回答X = 回答X + 1 問題X = 問題X + 1 Next ------------- InputBoxにセル内の任意の数字(この場合"10+20")と表示させたいのですが、 上記のコードの場合、30と表示されてしまいます セル内の数字を個別に表示させることは出来ますか?(真ん中に+などの記号を表示) また、問1、問2と表示させていくためにはどうすれば良いのでしょうか? この場合、問(i)で表示されてしまいます
225 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:53:20 ] +じゃなくて、&で結合すべし。 "問(i)"は、"問("&i&")"にする
226 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:05:59 ] >>225 Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")") にしたら出来ました^ 即レスありがとうございました!
227 名前:226 mailto:sage [2008/01/01(火) 21:09:15 ] あ、問題X+2は問題X+1でした、失礼しました
228 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:28:11 ] >>223 そうですよね。VBAのテストをもっと増やしてみます。 ありがとうございます。
229 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 22:57:49 ] Excel 2003でXPです。 このプログラムを実行すると Dim commission As Integer Sub test8() commission = 90 If commission = 100 Then MsgBox ("手数料は100円です") End If End Sub コンパイルエラー End ifに対応するブロックがありませんというメッセージが出ます。 どこが悪いのでしょうか?
230 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 22:58:28 ] thenでかいぎょうすべし
231 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:03:22 ] >>230 神様ありがとう!!!
232 名前:129 mailto:sage [2008/01/02(水) 02:53:03 ] >セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。 すみません何をどうやったらいいのか全くわかりませんorz とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします
233 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 04:29:21 ] そもそもVBAの経験があるのかと・・・ VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに homepage1.nifty.com/h-fuji/excel_sample.htm
234 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:20:38 ] VBA初心者が使う本でこういうときはどうすればいいのっ??ってやつで お勧めは逆引きのやつとかですか? 他にいいのあります??
235 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:10:25 ] ググれば山ほどサンプルが出てくる
236 名前:デフォルトの名無しさん [2008/01/02(水) 21:18:58 ] かんたんプログラミング Excel 2003 これが一番良かった
237 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:27:35 ] >>236 まじっすか!? とりあえず見てみるわ。 >>235 図書館にも死ぬほどあったw
238 名前:かな [2008/01/03(木) 11:25:29 ] Excelであみだくじつくりたいんやけど、どっかにサンプルないかな? セルつかうんじゃなくてちゃんと線を引いてやりたいんや?
239 名前:デフォルトの名無しさん [2008/01/03(木) 12:43:46 ] しね
240 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 13:59:10 ] こんにちは。突然ですが いろいろ試してみたんですけど VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?
241 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:03:50 ] 全然不可能じゃないとおもうけど・・・
242 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:17:15 ] >>240 にはってこと?
243 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:30:45 ] 乱数って少数の端数が出てしまうじゃないですか。
244 名前:かな [2008/01/03(木) 15:32:36 ] 誰かおしえて?
245 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:56:29 ] ループさせたいだけなら一回目に発生させた乱数を変数に入れたら終わりな話だと思う
246 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:04:37 ] 少数の端数てことはないだろ。
247 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:05:53 ] つCint
248 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:06:37 ] 0になるだろ
249 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:10:19 ] CIntだろ
250 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:21:41 ] すごい釣りだなw
251 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:28:39 ] つMid(Rnd,3)
252 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:39:24 ] Replace(Rnd,".","")
253 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:02:32 ] Count = CInt(Rnd * N) + 1 hoge: 'ここで何かする Count = Count - 1 If Count >= 0 Then Goto hoge End If
254 名前:デフォルトの名無しさん [2008/01/03(木) 18:34:00 ] ループ中に乱数の値ってどんどん変わっていくんじゃない?
255 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 18:35:55 ] ・・・。 >>254 って本気で言ってるのか?
256 名前:デフォルトの名無しさん [2008/01/03(木) 20:18:11 ] 質問です。 実際に開発する環境はXP excel 2003で 学習環境はvista excel 2007なんですが、 何か学習書を購入するとき、2007に対応したものじゃないと 理解は難しいのでしょうか? 2007に対応したVBA書はまだ少ないように感じるもので・・・
257 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:17:50 ] 確かに2007で変わった部分はある。でも基本部分(構文とかそういうの)は変わってない。 2007用の書籍があればそりゃいいだろうけど、変わった部分を調べておけば別に古いのでも問題はないかと。
258 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:25:11 ] 構文規則(VB部分)は変わってないけど オブジェクトメンバ(VBA部分)は結構変わったよ 一応古いメンバにもアクセス出来るようにはなってるが 新しいメンバより動作が遅かったりというデメリットもある 2007用だと新しい体系に関しての説明が主になるだろうから 実際の開発が2003なら、2003用か2002/2003/2007兼用版とかがいいかと
259 名前:デフォルトの名無しさん [2008/01/04(金) 06:26:50 ] EXCEL2002でVBAを書いています。 マクロでセルにEXCEL関数を入力する際に、『シートの選択』ダイアログ[OK、キャンセル]が表示されます。 ダイアログを表示さない、もしくはダイアログのキャンセルを自動で押す方法はありますか? セルに入力しようとしている文字列 ='D:\[計算書.xls]20.1月'!$J$3 計算書.xlsの20.1月は存在しません。 下記、3つは記述済みです。 On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False
260 名前:256 [2008/01/04(金) 07:26:44 ] >>257-258 ありがとうございます。 詳しい解説があったほうがいいのでよく考えて選びます。
261 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 08:19:47 ] >>259 うちは出ない (2000, 2003)
262 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 08:31:34 ] >>259 どんなマクロを書いているんだ?
263 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 09:52:52 ] >>259 再現した。 ワークシートの存在を確認するしかないかな? Dim s As Worksheet For Each s In Me.Worksheets If UCase(s.Name) = UCase("20.1月") Then s.Range("A1").Value = "='D:\[計算書.xls]20.1月'!$J$3" Exit For End If Next あるいは、可能であればワークシート別のイベントで処理させるとか。
264 名前:かな [2008/01/04(金) 09:57:33 ] だれか教えてん♪
265 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 10:43:44 ] >>238 >>244 >>264 www.google.co.jp/search?q=excel+%E3%81%82%E3%81%BF%E3%81%A0%E3%81%8F%E3%81%98&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a まぁ釣りだとは思うんだけど…
266 名前:まな mailto:sage [2008/01/04(金) 10:52:16 ] >>264 手とり足とり、組んずほぐれつ?
267 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:41:29 ] すいません、XPでEXCEL2003です。 複数のセルに数式が入れてあるのですが、 その数式から導かれた値が、ある一定の値を超えた場合そのセル番号を表示させるプログラムを作ろうと考えています。 このようなことは可能でしょうか? もし可能ならどのようなプロパティやメソッドを使えばいいのか教えてください。 後は本も買ってきたのでできるだけ自分でやりたいと思いますので、ヒントだけでもありがたいです。
268 名前:デフォルトの名無しさん [2008/01/04(金) 17:44:47 ] >261 EXCELの設定で表示しないようにできるんですかね・・・。 >262 NW.Cells(tate, yoko).Formula = Replace(str_cell, this_Date, Nxt_Date) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ↑ ='D:\[計算書.xls]20.1月'!$J$3 が入る ~~~~~~ ↑このシートは存在しない。 『シートの選択』ダイアログが表示される・・・。 >263 やっぱりダイアログが表示しますよね。ない場合シート作成させるしかないですかね・・・?
269 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:53:43 ] >>215 つOn Error
270 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 22:16:05 ] >>268 NW ?
271 名前:263 mailto:sage [2008/01/05(土) 11:58:51 ] >>268 シート作る必要があるの? どうせエラー("#REF")になる式なんか入れないで、263の例みたいに空白のままじゃダメ? >>270 どうせローカル変数名でしょ、New Worksheet の頭文字。てか、そこ突っ込まなくても・・・
272 名前:デフォルトの名無しさん [2008/01/07(月) 17:08:47 ] XP、Excel2003で、改ページの枠を固定することはできるでしょうか。 この固定とは、保護等で管理者以外は触れないようにするということです。 ウィンドウの固定ではなく、改ページ範囲の固定です。 ご存知の方がいましたら、ご教授願います。
273 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 17:20:25 ] >>272 追記です。 結合したセルがあります。 そのセルに対する設定変更(書式、結合解除、フォント)は不可とし、 入力のみ可能とすることはできますか? ご存知の方がいましたら、ご教授願います。
274 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:01:11 ] 対象とするアクションが起こった場合にパスワード等を求めるとかじゃだめかな?
275 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:30:12 ] テキストボックスの余白自動設定解除に手間取った。 なんか簡単な方法ってないの?
276 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 08:29:16 ] 「手間取ってる」ではなく「手間取った」ってことは 一応目的は達成されてるわけだよね ではそれを提示してください コード貼ってもブックをうpしても構いません そしたらそれより簡単な方法があれば教えましょう それが嫌ならさようなら
277 名前:デフォルトの名無しさん [2008/01/08(火) 12:52:16 ] 散々既出ぽい話題ですが、エクセルで、 先頭の0を消さずにcsvで書き出ししたいのですが、 以下の式では当然不可能で・・・ Option Explicit Sub eight() Dim eight As String Dim bigeight As String Range("a1").Value = 8 bigeight = Range("a1").Value + 100000000 MsgBox bigeight eight = right(bigeight, 8) MsgBox eight Range("A2").Value = eight MsgBox eight End Sub 関数で同じことをやると出来るのですがゴミデータが出て、 コンマの数が変わってしまいます。
278 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:17:17 ] 変数の型について勉強しましょう 文字列数値と数値の違いを理解しましょう プロシージャ名と変数名を同じにするセンスを何とかしましょう
279 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:48:25 ] >>277 セルの書式設定(F) → 表示形式:ユーザー定義 → 種類(T):00000000 (8桁固定)
280 名前:デフォルトの名無しさん [2008/01/08(火) 14:13:45 ] >>279 おお。 これをVBAで指定するには?
281 名前:デフォルトの名無しさん [2008/01/08(火) 14:18:49 ] てか、そもそもセルに転記しなければ良いのか(・∀・;)
282 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 14:53:59 ] >>281 転記するにしても、セル(範囲)ごと持っていけば済むよ。 Range("A1").Copy Range("A2")
283 名前:デフォルトの名無しさん [2008/01/08(火) 15:06:19 ] あ、表示形式ってマクロ記録できるんだ。 これで、解決・・・かな
284 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 15:24:41 ] 礼も言えないゆとりであった
285 名前:デフォルトの名無しさん [2008/01/08(火) 23:22:13 ] 質問なのですが、ユーザーフォームの中に80コのテキストボックスを作りたい。 プログラムでループ文を使いテキストボックスを横に4×縦に20で一気に作る方法はありますでしょうか?
286 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:45:08 ] あります LeftとTopを調整しましょう コード教えては厳禁
287 名前:デフォルトの名無しさん [2008/01/08(火) 23:50:48 ] 調整とはユーザーフォームの設定ということですか? プログラムだけで可能なのですよね? もう少しだけヒントをお願いできないでしょうか?
288 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:55:08 ] 別にそこまで厳しくせんでも。 Excel2003ではできる。 Set ctrl = Me.Controls.Add("Forms.TextBox.1") って感じに追加して、ctrlのプロパティを調整する。 MSFormsに追加するのに、これでいいのか?という気もするが。
289 名前:デフォルトの名無しさん [2008/01/09(水) 00:14:18 ] できました!あとは80コスペースを空けて作る方法を考えてみます。 288さん有難う御座いました。
290 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:16:15 ] 丸投げを助長する 寄生虫が増殖する らしいです
291 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:33:43 ] 丸投げと、できるだけズバリなヒントを欲しているのとは確実に違うと思うわけだが。
292 名前:デフォルトの名無しさん [2008/01/09(水) 14:20:42 ] 278=284=290
293 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:30:40 ] しかし>>284 には同意せざるを得ない
294 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:36:58 ] 礼なんぞいらん。邪魔。
295 名前:sage [2008/01/09(水) 14:47:15 ] IDが無いと誰が誰かワカラン
296 名前:デフォルトの名無しさん [2008/01/09(水) 18:11:06 ] 質問です。 Dim c1 as Collection Dim c2 as Collection Set c1 = New Collection c1.Add "a" c1.Add "b" Set c2 = c1 この次に、 c1.Remove(1) 'c1の最初のアイテムを削除 とやるとc2のアイテムも"b"だけになりますよね。 これはたぶんc2が、c1と同じCollectionオブジェクトを 指しているためなんだな、と理解しています。 理解できないのは、c1.Remove(1)ではなく、 Set c1 = Nothing とした場合です。 c2もNothingになるのかと思いこんでいましたが、 実際c2には、"a"も"b"も、ちゃんと残っていました。 これはなぜでしょうか?
297 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 18:25:52 ] a=1 b=a a=0 にしてもb=0にならないのと同じ
298 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 18:27:51 ] 「変数そのもの」と「変数が指す先」の区別を理解しませう。 set c1=nothingは、変数そのものへの操作で、変数が指す先にたいしては、 ほとんど影響しない。(唯一、リファレンスカウントにだけ影響するんだっけか。)
299 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 18:29:59 ] それはNothingキーワードが実体を解放するものではないため
300 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:41:42 ] 数値の代入式の場合は、値そのものをコピーする。 オブジェクトの代入式の場合は、値を保存してある場所(参照)をコピーする。 なので、c1の要素を消すと、c2の要素も消えるが、 Set c1 = Nothing とした場合は、c1と値そのものとの関連が削除されるが、値そのものは残ってる。 全ての参照が削除された時点で、値そのものも削除される状態になる。