- 1 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 19:07:54 ]
- ExcelのVBAに関する質問スレです
前スレ pc12.2ch.net/test/read.cgi/tech/1241885130/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
- 480 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 12:02:35 ]
- >>471
application.commandbars.コントロール じゃいかんかね
- 481 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:23:05 ]
- >>480
それをヒントに頑張ったらでけた CommandBarButton.State にボタンのON−OFFがあった ありがとう
- 482 名前:デフォルトの名無しさん [2009/08/15(土) 12:43:39 ]
- すいません教えてください
FileCopy D:\aaa.txt, "C:\aaa.txt" これでD直下にあるaaa.txtファイルをC直下にコピーするという事ですが これだとどうしてもaaa.txtというファイル名を指定しなければなりません これを FileCopy D:\aaa.txt, "C:\" みたいにaaa.txtをC直下にそのままの名前でコピーさせたい場合ってどうすればいいのでしょうか?
- 483 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:38:13 ]
- >>482
どんなシチュエーションかわからんけど 第一引数でファイル名を指定する必要がある以上ファイル名は既に分かっているはず 例えば filename="aaa.txt" FileCopy "D:\"&filename,"C:\"&filename みたいなんだとダメなん? あとはFileCopyじゃなくてFileSystemObject使うとか
- 484 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 14:48:42 ]
- >482
用途が分からんけど Source = "D:\aaa.txt" Destination = "C:\" 'Sourceからファイル名のみを取出す処理をここに記述 FileCopy Source, Destination & FileName とすればいいんじゃない? ファイル名のみを取出すのは、文字列関数なんかを使えば できると思うけど...... んで 自分ならこうするってのを参考程度に 作ってみた(Dir関数を使用) Dim Source, Destination, FileName Source = "D:\aaa.txt" Destination = "C:\" FileName = Dir(Source) If FileName <> "" Then FileCopy Source, Destination & FileName Else MsgBox (Source & "が見つかりません") End If
- 485 名前:デフォルトの名無しさん [2009/08/15(土) 14:53:36 ]
- EXCEL2003,XPsp2です。
次のコードが実行時エラー1004になります(2行目)。 c=5 Columns("3:" & c).Select 列選択の範囲を可変(実行時決定)にしたいのですが、 どうすればよいのでしょうか。 よろしくお願いします。
- 486 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:33:50 ]
- >485
なんかColumnsの使い方間違っているような あんまし詳しくないんでなんとも言えないけど Range使っちゃだめなケースなの?
- 487 名前:485 [2009/08/15(土) 16:10:43 ]
- >>486
レスありがとうございます。 3列からc列まで選択できれば、何でも結構です。 ちなみにRangeだと、どうすれば良いのでしょうか?
- 488 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 16:13:43 ]
- >>487
つマクロの記録
- 489 名前:486 mailto:sage [2009/08/15(土) 16:41:19 ]
- >487
このケースは、VBAを使う上での基本中の基本だとおもうので 調べてくださいとしかいえません。 >1 の★5 と★6 を熟読の事
- 490 名前:487 [2009/08/15(土) 17:07:16 ]
- >>488,489
レスありかどうございます。 マクロの記録には、 Columns("3:5").Selectと出てきます。 c=5 Columns(〜c〜)とは出て来ません(変数を使ったコードは出てこない)。 どうすれば良いのでしょうか?
- 491 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:24:58 ]
- >>490
>>(変数を使ったコードは出てこない)。 出てくるわけネーダロw
- 492 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:47:37 ]
- >>490
dim c as string c = "5" でどうでしょう?
- 493 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:49:02 ]
- >>487
ヒント range ( , ) columns(3) columns(c) .select
- 494 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:06:48 ]
- >>493
492ですができました。 勉強になりました。 ありがとうございます。
- 495 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:16:48 ]
- マクロの記録をすると
Columns("C:E").Select ってでてくるよ >>492 "3:" & c &は文字の結合だから
- 496 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:19:09 ]
- Columns("3:5").Selectって記録マクロでできるか?
Range("3:5").SelectとかRange("3:5").Selectならわかるが、Columns("3:5")は動かんなぁ。 記録マクロが動かんマクロになるわけないと思うが。
- 497 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:20:03 ]
- 493で答え出とるがな
- 498 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:20:14 ]
- すまん、Range("3:5").SelectとかRows("3:5").Selectの間違い。
- 499 名前:492 mailto:sage [2009/08/15(土) 18:22:07 ]
- すいません。
僕のは間違えです。
- 500 名前:486 mailto:sage [2009/08/15(土) 19:17:25 ]
- >>495 へのレス
>>490 >>495 は同一人物だと仮定してレスします 別人だったらすみません。 >>490 >マクロの記録には、 >Columns("3:5").Selectと出てきます。 >>495 >マクロの記録をすると >Columns("C:E").Select >ってでてくるよ なんかレス番によってマクロの記録結果が違っているのですが.... Columns("3:5").Select って本当に記録された?
- 501 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 20:07:43 ]
- ヒント 列と行を広辞苑で調べてみようっ!
- 502 名前:デフォルトの名無しさん [2009/08/15(土) 21:34:46 ]
- オブジェクトやプロパティやメソッドの検索の基本的なやり方を教えて頂きたいです。
オブジェクトブラウザ インテリジェンス ウォッチ ヘルプ、MSDN、Google 等々ありますが、これらの強み弱み、表示できない事、表示できる事を、 上手くまとめて頂けないでしょうか。 ウォッチでは実行時のプロパティーは表示されるけど、 何故か一部のプロパティーが表示されないし、 メソッドは当然の如く表示できません。 オブジェクトブラウザやインテリジェンスは、 実行時系プロパティーが当然取れません。 隠しオブジェクトについては、表示する様にすれば表示できますが。 ヘルプは実行時系も隠しもメソッドも全てあると思いますが、 検索性に難ありで、網羅性や信頼性に疑いを持ってしまう所アリ。 間違いがあったり、足りない所があれば教えて頂きたいです。 アーリーバインディングやレイトバインディングとか、 その辺りとの関わりも良く分かって無いです、 教えていただけると助かります。
- 503 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:32:48 ]
- 宿題は自分で頑張ってね。
- 504 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:34:06 ]
- >>502
ググレカス
- 505 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:30:05 ]
- 質問です
一つ目 選択範囲のセルをオブジェクト変数に代入するにはどうすればよいでしょうか? Dim aaa aaa = Selection としてもaaaにはvalueしか入らず、文字列の配列になってしまいます。 二つ目 選択範囲の全てのセルに対し、 長さが5じゃなければそのセルに文字列""を代入するというコードを書いてみましたが aaa = "" の行で「実行時エラー'10' この配列は固定されているか、または一時的にロックされています」 というエラーが出ます。どういう風に書けばよいのでしょうか? また、aaaの文字列の配列に直接値を入れたとしてもselectionに反映されません。これもどうすればよいのでしょうか? 勉強中に作ってみたものなので、特にこのコードを使って何かを処理するわけではありません。 コレクションをうまく使ってみたいと思っています。 よろしくお願いします。 Sub a() Dim aaa Dim m aaa = Selection For Each m In aaa If Len(m) <> 5 Then aaa = "" End If Next End Sub
- 506 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:51:17 ]
- >>555
Sub test() Dim rng Set rng = Selection For Each cell In rng If (Len(cell) <> 5) Then cell.Value = "" End If Next End Sub
- 507 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:55:21 ]
- >>506
おお、すごい!ありがとうございました
- 508 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:34:34 ]
- >>505 はオブジェクト指向の考え方を一度学んだ方が良いと思う
今後も、できねー、なんで?を連発の予感
- 509 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:37:25 ]
- dimで宣言するなら型までだな
- 510 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:39:51 ]
- >>509
同意 更に option explicit を入れないと何となく動くけど、変なエラーが・・・になる
- 511 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:46:42 ]
- C使ってるとこの表現忘れがちになるな
俺だけかな
- 512 名前:415 mailto:sage [2009/08/16(日) 08:44:11 ]
-
既に目を通してくれた方には煩わしいかもしれませんが 未解決のまま流れているので再投させていただきます。 オートシェイプに背景画像を挿入する場合についての質問です。 手動でやる場合、 ・オートシェイプの書式設定 ・塗りつぶし ・色 ・塗りつぶし効果 ・図 ・図の選択 で、画像を挿入した際に、同ページに □図の縦横比を固定する □図形に合わせて塗りつぶしを回転する というオプションがありますが、このオプションをVBAで変更する方法を教えてください。 マクロの記録をしても、変更が記録されずに困っています。 WindowsXP/Office2003
- 513 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/08/16(日) 09:01:18 ]
- drawingobjectでどうだ
|

|