• ベストアンサー

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」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

仮に 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)
回答No.4

こんばんは。 参考意見ですが・・・ 2つのブック間であればVBAを動かしたいファイル名はすでに既知であるでしょうし、他のブックはファイル名がわかっていなくても たとえばシート1を指定したい場合 worksheets(1)という記述をWindowに使えば、window(1)という記述が使えるので単純な場合楽に使えます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 何を、どのようにしているのか良く分かりませんが、予め開いておいたブックを、ループをして処理したいという意味なのでしょうかしらね。 例えば、このようにしたらどうでしょうか? 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)
回答No.1

変数を使用すればよいです。 あらかじめ、変数FlNameに拡張子を除いたファイル名を格納し、 Windows(FlName & ".xls").Activate のように、& でつなげればOK。 また、ファイル名を指定せずに、オブジェクト変数を定義し、開いているブックを参照する方法も考えられます。

fcb7arg9
質問者

補足

ごめんなさい。。 「変数FlNameに拡張子を除いたファイル名を格納し」 ってところが分かりませんでした。

関連するQ&A