
ユーザーが自由にCSVファイルを選べるようにしたい
CSVの内容をワークシートにコピーしたい
処理後、CSVファイルは自動的に閉じたい
結論:GetOpenFilename+Workbooks.Open+Paste+Close で全て自動化可能!



CSVの取り込み処理は実務で頻繁に登場しますが、下記コードを使えば「選択→読み込み→コピー→閉じる」までをスマートに実現できます。
目次
実行イメージ
- 実行するとファイル選択ダイアログが開く
- 選んだCSVファイルの内容が、現在アクティブなシートにコピーされる
- CSVファイルは自動的に閉じられる
ステップ別で解説
① ファイル選択ダイアログでCSVを選ばせる
Dim csvPath As String csvPath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", , "CSVファイルを選択してください") If csvPath = "False" Then Exit Sub ' キャンセル時は終了
② CSVをブックとして開く
Dim csvBook As Workbook Set csvBook = Workbooks.Open(Filename:=csvPath)
③ CSVの内容をコピーして、アクティブシートに貼り付け
csvBook.Sheets(1).UsedRange.Copy Destination:=ThisWorkbook.ActiveSheet.Range("A1")
④ CSVファイルを保存せずに閉じる
csvBook.Close SaveChanges:=False
全体のコード(そのまま使えます)
Sub ImportCSVtoSheet() Dim csvPath As String Dim csvBook As Workbook ' CSVファイルを選択 csvPath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", , "CSVファイルを選択してください") If csvPath = "False" Then Exit Sub ' CSVを開く Set csvBook = Workbooks.Open(Filename:=csvPath) ' 内容をアクティブシートへコピー csvBook.Sheets(1).UsedRange.Copy Destination:=ThisWorkbook.ActiveSheet.Range("A1") ' CSVを保存せず閉じる csvBook.Close SaveChanges:=False End Sub
補足|よくあるカスタマイズ
カスタマイズ内容 | 方法 |
---|---|
特定のシートに貼り付けたい | Worksheets("Sheet1").Range("A1") など指定 |
貼り付け前にシートをクリア | Cells.ClearContents を追加 |
別ファイルとして保存したい | ThisWorkbook.SaveAs を追加する |
注意点
このコードでは CSVの最初のシートを対象としています(通常CSVには1シートのみ)
ファイル選択でキャンセルすると、マクロは自動終了します
上書き保存の操作は行っていないため、取り込んだ側のブックは手動保存が必要です
まとめ
処理内容 | 使用するVBA構文 |
---|---|
CSVファイルを選ぶ | Application.GetOpenFilename |
CSVファイルを開く | Workbooks.Open |
データを貼り付ける | UsedRange.Copy Destination:=~ |
CSVを閉じる(保存しない) | Workbook.Close SaveChanges:=False |
コメント