- ベストアンサー
Excel マクロでファイル名を変数に・・・
初心者です。検索してもわからなかったので質問です。 下記のようなマクロの処理で「AAA」というファイル名のExcelに「2.xls」からデータをコピーし貼り付けています。 ・ ・ Windows("AAA.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("AAA.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy ・ ・ 今回は「2.xls」ではなく「3.xls」、「4.xls」、・・・といったように違うファイル名で同じ処理を行ないたいので「2」と指定するのではなく「(ファイル名).xls」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
仮に AAA.xls の Sheet1!A1 にファイル名(2や3等)が入力されているとします。それをファイル名とするマクロは以下のようになります。 なおWorksheetは明示するようにしましょう。そうしないとたまたまマクロ実行時に開いていたシートに対して処理をしてしまいます。また余分なSelectは省いた方が動作が速くなります。 ●サンプル● Windows("AAA.xls").Activate fName = Worksheets("Sheet1").Range("A1").Value & ".xls" 'A1の値を変数fNameに格納 Worksheets("Sheet1").Rows("4:4").Insert Shift:=xlDown Windows(fName).Activate '変数fNameを使ってActivateする Worksheets("SheetA").Range("C6").Copy 'SheetAはコピー元のシート名 Windows("AAA.xls").Activate Range("A4").Select Activesheet.Paste なおCopy時に貼り付け先を指定する方法もあります。 Windows("AAA.xls").Activate Worksheets("Sheet1").Range("A1").Copy _ Destination:=Workbooks("Book2.xls").Worksheets("Sheet3").Range("A1") また、値だけコピーすれば良いなら代入を用いる方法もあります。 Windows("AAA.xls").Activate Workbooks("Book2.xls").Worksheets("Sheet3").Range("A2").Value _ = Worksheets("Sheet2").Range("A1")
その他の回答 (3)
- WWolf
- ベストアンサー率26% (51/192)
こんばんは。 参考意見ですが・・・ 2つのブック間であればVBAを動かしたいファイル名はすでに既知であるでしょうし、他のブックはファイル名がわかっていなくても たとえばシート1を指定したい場合 worksheets(1)という記述をWindowに使えば、window(1)という記述が使えるので単純な場合楽に使えます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 何を、どのようにしているのか良く分かりませんが、予め開いておいたブックを、ループをして処理したいという意味なのでしょうかしらね。 例えば、このようにしたらどうでしょうか? Dim wbName As Variant Dim WorkbookNames As Variant WorkbookNames = Array("1.xls", "2.xls", "3.xls","4.xls") For Each wbName In WorkbookNames With Workbooks(wbName) .Activate '処理 End With Next wbName
- survey
- ベストアンサー率26% (17/65)
変数を使用すればよいです。 あらかじめ、変数FlNameに拡張子を除いたファイル名を格納し、 Windows(FlName & ".xls").Activate のように、& でつなげればOK。 また、ファイル名を指定せずに、オブジェクト変数を定義し、開いているブックを参照する方法も考えられます。
補足
ごめんなさい。。 「変数FlNameに拡張子を除いたファイル名を格納し」 ってところが分かりませんでした。