1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1189814602/
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と値そのものとの関連が削除されるが、値そのものは残ってる。 全ての参照が削除された時点で、値そのものも削除される状態になる。
301 名前:296 mailto:sage [2008/01/09(水) 20:12:40 ] >>298 >>299 >>300 レスありがとうございました。 よくわかった、つもりです。 次のような理解でよろしいでしょうか... Set c1 = Nothing によって、変数c1に格納された参照は削除される。 しかし参照先の実体を、まだ変数c2が参照している。 そのため、実体はメモリ上に存続する。 このあとで更に、Set c2 = Nothing とすると、 実体を指す参照がすべて無くなる。 すると、その実体が自動的に解放される。
302 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:28:25 ] 質問なんですが、 セルの値(自動で変化する)が変わった瞬間に所定のコードを実行する(JavaScriptでいうところのonchange見たいな)、 と言うのは如何すればいいんでしょうか?
303 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:40:07 ] changeイベントを使えばいいよ
304 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:57:14 ] >>303 dクスです なるほど、ワークシート単位ではチェンジイベントがあるんですね。 早速やってみます。
305 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:29:04 ] 1から10000までの数字を全部掛けたときに 末尾に並ぶ0の個数を求めるのをVBAでおながいします
306 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:47:41 ] Excelどころか言語すら関係ないアルゴリズムの話か >>305 →>>2 ★4
307 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:51:31 ] >>305 というか桁数が膨大になるので計算機を使っても無理かと。 代数的な解法があるんじゃないですか?数学板の質問スレに質問しては?
308 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:02:10 ] じゃあ100まででもいいです
309 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:07:59 ] >>307 アルゴリズム次第では桁数は膨大にならないよ だって総桁数を調べるのではなく、0の数を数えるだけだから なんにしろスレ違いだけど
310 名前:デフォルトの名無しさん [2008/01/10(木) 15:05:43 ] セルのコピー、ペーストをvbaで行った後に、コピー元のセルを囲っている 網のようなラインが消えないのですが、これをvba内で 解除するにはどうすればいいでしょうか。
311 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 15:26:51 ] >>310 Application.CutCopyMode = False これはちゃんとExcel VBAの質問だな
312 名前:sage [2008/01/10(木) 15:31:47 ] >>311 お、早速 ありがとうございます
313 名前:デフォルトの名無しさん [2008/01/10(木) 16:28:25 ] オートフィルタを使ってデータベースの集計をしているのですが 1列目 2列目 3列目 A B タイトル という風になっています。1列目と2列目は評価項目でA,B,C,D,E,Fのいずれかが記入されています 現在これをカウントしているVBAが、 3行目をオートフィルタで集計したいタイトルで搾り出す 1行目をAで抽出後、SubtotalでAの数をカウント 2行目をBで抽出後、Subtotalで… となっています。昔はこれで十分だったのですが、次第にタイトルが増えてきて 全部やるとなると膨大な時間がかかるようになってきてしまいました。 1つのタイトルに付き単純に12回抽出→数えるとやっているので… いちいちAで抽出→数える、Bで抽出→数える…と繰り返さずに、 タイトルで絞った後にCoutIFのようにAはいくつ、Bはいくつみたいな具合でやる方法はないでしょうか? CountIFだと非表示のセルのA〜Fまで集計してしまって困っています
314 名前:デフォルトの名無しさん [2008/01/10(木) 16:39:34 ] よーわからんけど.. Sub hogera_vs_mogera() For i = 1 To 8 hoge = Range("A" & i).Value If hoge = "A" Then hoge_counter = hoge_counter + 1 Next i MsgBox hoge_counter End Sub
315 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 18:11:37 ] >>313 ピボットテーブルレポート使ってみて。
316 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 19:41:52 ] セルに名前が "hoge" とついてる場合 range("hoge").value = "ほげほげ" と操作できますが この名前 "hoge" の行 列の値を得る方法を 教えて下さい hogeが(1,5)なら int row = 1 int col = 5 のように得たいです。
317 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 19:56:30 ] Range("hoge").Row Range("hoge").Column
318 名前:デフォルトの名無しさん [2008/01/10(木) 23:06:12 ] 質問なのですが、 Public Type SyainData Id As Long Name As String End Type Dim Kyo(5) as SyainData と宣言しループ処理で関数の引数として2番目のNameを渡したいのですがどうすればいいですか?
319 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:19:01 ] Kyo(2).Name
320 名前:デフォルトの名無しさん [2008/01/10(木) 23:23:03 ] 319さん、ByRefコンパイルエラーと表示されます。
321 名前:デフォルトの名無しさん [2008/01/10(木) 23:26:15 ] 319さん ちなみにAユーザーフォームからNameに入力して 標準モジュールに定義してある構造体にそれぞれ格納した値をBユーザーフォームに出力したいのです。
322 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:19:38 ] 関数の呼び出し方と、関数の定義くらい書いたら? (先頭の、Sub/Function〜の行) 判断する情報が少なすぎる。
323 名前:316 mailto:sage [2008/01/11(金) 09:24:37 ] >>317 ありがとうございました(^▽^)
324 名前:デフォルトの名無しさん [2008/01/11(金) 10:14:12 ] VBAで実行中に「vbcritical」と共に、「400」って 数字が表示されるエラーはなんですか?
325 名前:デフォルトの名無しさん [2008/01/11(金) 14:21:13 ] msgboxやinputboxの外観をもっと可愛くしたい!
326 名前:デフォルトの名無しさん [2008/01/11(金) 14:33:31 ] スマン連投・・・ >>325 はどうでもいいです VBAを含むxlsを「共有」した途端に、そのvbaの挙動が微妙に変わってしまいました。 vbaの内容は、セル範囲をrangeで指定して、最下行にペーストするだけなんですが・・・。 なんか、ちょっとずれる感じなんです。ウィンドウの固定が原因かも。 共有と同時にVBAがロックされるので、原因の確かめようが無い状態(T-T
327 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:27:54 ] 質問の仕方すら何かズレてるみたいだし、しょうがないね。 そういう星の下に生まれたんだよ。
328 名前:326 [2008/01/11(金) 16:19:52 ] 共有の関係で、ペースト先の結合がバラバラになった模様・・・orz こればっかりはどうしようもないですかね 保護されたセルに書き込むというのはvbaで何とかなりましたが・・・
329 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:48:30 ] >>325 つAssistant
330 名前:デフォルトの名無しさん [2008/01/11(金) 18:07:53 ] >>329 なるほど、カイル君が使えるんですね・・・ ありがとうございます
331 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 19:37:54 ] >>328 このスレはオマイの進捗報告書かと