プロが教えるわが家の防犯対策術!

EXCEL VBAについての質問です
同じ処理を名前の違う複数のファイルで行いたいと思っています
そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。
良い方法を教えてください。


Workbooks("200809.csv").Activate
Sheets("200809").Select
Range("C3:C33").Copy
Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい
Sheets("報告書").Select
Range("G5:G35").Select
ActiveSheet.Paste
Windows("200809.csv").Activate
Range("K3:K33").Copy
Windows("○○.xls").Activate’←ここ
Sheets("報告書").Select
Range("I5:I35").Select
ActiveSheet.Paste
Workbooks("200809.csv").Close SaveChanges:=False

よろしくお願いします。

A 回答 (4件)

A2に○○と入っているのは、このマクロがあるBookのシート上ですね?


でしたら以下のようにすることで可能かと。
#Sheet1のA2に○○と入っていると仮定

Windows("○○.xls").Activate'

Windows(ThisWorkbook.Sheets(1).Range("A2") & ".xls").Activate

動作の確認はしていません。あしからず。
    • good
    • 0
この回答へのお礼

mt2008さんありがとうございます。
試してみたところ今やろうとしていることはうまくいくようです。
すばやい回答ありがとうございました

もうひとつお聞きしたいことがあります。
おなじマクロで、今はファイル名が違う場合にも対応できるようになりました。
もし、ファイル名とシート名も違う場合にセルから取得する何か方法があるでしょうか。
マクロはこのファイル名がいろいろあるファイル内のシートにあります。
シートはひとつだけです。

できますでしょうか?

お礼日時:2008/09/24 22:02

hiro_eleさんのオリジナルコードに付け加えるなら


Workbooks("200809.csv")のSheets("200809")のセルA1にファイル名があるとして
Windows(Range("A1").Value & ".xls").Activate
とすればよいです。

今回の例なら、Select、Activeteしなくても、"200809.csv"から"○○.xls"へ、コピペ可能です。
両ファイルとも開かれていることが前提になります。
例えば
With Workbooks("200809.csv").Sheets("200809")
  .Range("C3:C33").Copy Workbooks(.Range("A1").Value & ".xls").Sheets("報告書").Range("G5:G35")
End With
といった感じです。
    • good
    • 0
この回答へのお礼

回答してくださりありがとうございます。

説明不足だったと思いますが、
Workbooks("200809.csv")のSheets("200809")のセルA1にファイル名があるのではなく、
Workbooks("○○.xls")のSheets("報告書")のセルA2に自分のファイル名「○○」があります。
そしてこのマクロも○○.xlsに記述しています。
よろしくお願いします

お礼日時:2008/09/24 21:37

No.1です。


追加質問の件ですが、もともとのソースの
Sheets("報告書").Select
の"報告書"を、セルから取得したいという様な意味でしょうか?
それならまったく同様に↓と、なります(Sheet1のA3にある場合)
Sheets(ThisWorkbook.Sheets(1).Range("A3")).Select

ThisWorkbook.Sheets(1).Range("A3") これが、
ThisWorkbook:このマクロがあるブックの、
Sheets(1):1枚目のシートの、
Range("A3"):A3セルの値
を、指しています。
    • good
    • 0

実行しているマクロがあるブックはThisWorkbookで表せます。


ThisWorkbookを使えばファイル名をセルデータから取得する必要がなくなります。

With Workbooks("200809.csv").Sheets("200809")
  .Range("C3:C33").Copy ThisWorkbook.Sheets("報告書").Range("G5:G35")
End With
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています