- ベストアンサー
EXCEL VBAでセルからファイル名を読み込む方法
- EXCEL VBAで複数のファイルで同じ処理を行いたい場合、セルにファイル名の一部を書き込む方法があります。
- 具体的には、セルに『○○.xls』という形式でファイル名の一部を入力し、マクロでそれぞれのファイルからファイル名を読み込んで実行することができます。
- この方法を使用すると、複数のファイルで同じ処理を行う際に便利であり、効率的に作業を進めることができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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セルの値 を、指しています。
その他の回答 (3)
- xls88
- ベストアンサー率56% (669/1189)
実行しているマクロがあるブックはThisWorkbookで表せます。 ThisWorkbookを使えばファイル名をセルデータから取得する必要がなくなります。 With Workbooks("200809.csv").Sheets("200809") .Range("C3:C33").Copy ThisWorkbook.Sheets("報告書").Range("G5:G35") End With
- xls88
- ベストアンサー率56% (669/1189)
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 といった感じです。
- mt2008
- ベストアンサー率52% (885/1701)
A2に○○と入っているのは、このマクロがあるBookのシート上ですね? でしたら以下のようにすることで可能かと。 #Sheet1のA2に○○と入っていると仮定 Windows("○○.xls").Activate' ↓ Windows(ThisWorkbook.Sheets(1).Range("A2") & ".xls").Activate 動作の確認はしていません。あしからず。
お礼
mt2008さんありがとうございます。 試してみたところ今やろうとしていることはうまくいくようです。 すばやい回答ありがとうございました もうひとつお聞きしたいことがあります。 おなじマクロで、今はファイル名が違う場合にも対応できるようになりました。 もし、ファイル名とシート名も違う場合にセルから取得する何か方法があるでしょうか。 マクロはこのファイル名がいろいろあるファイル内のシートにあります。 シートはひとつだけです。 できますでしょうか?
お礼
回答してくださりありがとうございます。 説明不足だったと思いますが、 Workbooks("200809.csv")のSheets("200809")のセルA1にファイル名があるのではなく、 Workbooks("○○.xls")のSheets("報告書")のセルA2に自分のファイル名「○○」があります。 そしてこのマクロも○○.xlsに記述しています。 よろしくお願いします