こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBA セルからファイル名を読み込む

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

よろしくお願いします。

投稿日時 - 2008-09-24 13:01:53

QNo.4352906

困ってます

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

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セルの値
を、指しています。

投稿日時 - 2008-09-24 23:38:00

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

実行しているマクロがあるブックはThisWorkbookで表せます。
ThisWorkbookを使えばファイル名をセルデータから取得する必要がなくなります。

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

投稿日時 - 2008-09-25 12:49:59

ANo.2

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
といった感じです。

投稿日時 - 2008-09-24 13:44:32

お礼

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

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

投稿日時 - 2008-09-24 21:37:40

ANo.1

A2に○○と入っているのは、このマクロがあるBookのシート上ですね?
でしたら以下のようにすることで可能かと。
#Sheet1のA2に○○と入っていると仮定

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

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

動作の確認はしていません。あしからず。

投稿日時 - 2008-09-24 13:44:04

お礼

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

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

できますでしょうか?

投稿日時 - 2008-09-24 22:02:56

あなたにオススメの質問