今回は、前回投稿した、サンプルコードの解説の第二弾です!
まだ、投稿を見ていない方は下記のURLからご覧ください!
【コピペで使える】VBAでCSVファイルの内容をExcelに転記する方法
【コピペで使える】CSVファイルに保存されているデータをExcelに取り込むことで、データの編集や集計が簡単になります。今回は、VBAを使ってCSVのデータをExcelのシートに自動で転記する方法をご紹介します。
【コピペで使える】VBAでCSVファイルの内容をExcelに転記する方法②
前回投稿したサンプルコードを解説いたしました。ぜひ業務の効率化に役立ててください!CSV(Comma-Separated Values)ファイルは、データを「,」で区切ったテキストファイルです。Excelや他のアプリケーションでデータを簡単にやり取りするのに便利です。
サンプルコード
Sub ImportCSV()
Dim ws As Worksheet
Dim wb As Workbook
Dim csvPath As String
Dim csvLine As String
Dim rowNumber As Long
' データを貼り付けるシートを指定
Set ws = ThisWorkbook.Sheets(1)
' CSVファイルのパスを指定
csvPath = "/sample.csv" ' パスを正確に指定
' CSVファイルをワークブックとして開く
Set wb = Workbooks.Open(csvPath)
rowNumber = 1 ' 最初の行から貼り付けを開始
' 開いたワークブックの最初のシートの各行を読み込み、Excelに貼り付ける
Dim csvRow As Range
For Each csvRow In wb.Sheets(1).UsedRange.Rows
ws.Cells(rowNumber, 1).Value = csvRow.Cells(1, 1).Value ' 最初の列の値を貼り付け
rowNumber = rowNumber + 1
Next csvRow
' 開いたCSVファイルを閉じる
wb.Close SaveChanges:=False
MsgBox "CSVファイルのインポートが完了しました!"
End Sub
解説
貼り付け行を指定
rowNumber = 1
・Dim rowNumber As Long
によって、rowNumber
という変数がLong
型(整数)として宣言されていて、 1
を代入することで、貼り付けを開始する行を1行目に指定。
・ループ処理の中で rowNumber = rowNumber + 1
のように1行ずつ下に進んでデータを貼り付け、rowNumber
を更新することで行番号を制御。
For文
For Each csvRow In wb.Sheets(1).UsedRange.Rows
・For Each
ループは、配列やコレクション内の各要素を順に取り出して処理するための構文
・Rows
は、UsedRange
内の各行をコレクションとして取得。行ごとに順にアクセス可能。csvRow
は、For Each
ループの中で定義される各行を表す変数。各行のセル値を読み取ったり書き換えたりすることが可能。
転記処理
ws.Cells(rowNumber, 1).Value = csvRow.Cells(1, 1).Value
Next csvRow
・開いたCSVデータの特定のセルの値をExcelの別のシートに転記。
・Next csvRow
は、For Each
ループの終了を表す。
開いたCSVファイルを閉じる
wb.Close SaveChanges:=False
・閉じる前に保存せずに閉じるよう指定。CSVファイルに変更が加えられていても、保存せずにそのまま閉じられる。
メッセージを表示
MsgBox "CSVファイルのインポートが完了しました!"
・メッセージボックスを表示するための命令。ポップアップウィンドウが表示され、”CSVファイルのインポートが完了しました!” というメッセージがユーザーに通知される。
・ユーザーが確認ボタンを押すことで、このマクロが完全に終了。
サブルーチン終了
End Sub
・サブルーチン(マクロ)の終了を示す。
最後に
3回に渡り、サンプルコードの提示から解説まで行ってきました。
基本的な書き方がたくさん入ったコードなので、一つ一つ理解していけるといいですね!