【コピペで使える】VBAでCSVファイルの内容をExcelに転記する方法③

【初心者向け】Excelで「開発」タブを表示させる方法 サムネ画像

今回は、前回投稿した、サンプルコードの解説の第二弾です!
まだ、投稿を見ていない方は下記のURLからご覧ください!

目次

サンプルコード

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回に渡り、サンプルコードの提示から解説まで行ってきました。
基本的な書き方がたくさん入ったコードなので、一つ一つ理解していけるといいですね!

シェアしてもらえると嬉しいです
  • URLをコピーしました!
目次