CSVファイルの特定の箇所をExcelに読込む
CSVファイルをExcelに読み込む際、CSVファイルの特定の箇所だけを読み込みたいケースがあると思います。
そんな時に利用していただけるVBAを作成しましたのでご紹介します。
今回紹介するサンプルアプリは「CSVファイル取り込み」ボタンをクリックしてCSVファイルを選択するだけで内容を取り込むことができます。取り込む箇所はVBAの中で指定しています。
サンプルアプリ実行結果
以下の手順でCSVファイルを取り込みます。
「CSVファイル取り込み」ボタンをクリックして、下記CSVデータ(CSVSample.csv)を選択します。
—— CSVSample.csv ———————-
社員番号,氏名,所在地,郵便番号,連絡先
10001,山田太郎,東京都,150-0001,03-1234-5678
10002,小林花子,大阪府,540-0002,06-1234-5678
10003,佐藤一郎,北海道,060-0003,011-1234-5678
10004,田中五郎,福岡県,812-0004,092-1234-5678
10005,林浩司,愛知県,460-0005,052-1234-5678
——————————————–
CSVデータの中から「氏名」と「連絡先」だけが取り込まれます。
取り込んだ結果は以下のようになります。
サンプルコードの処理内容
ファイルへの入出力 (I/O) を有効にするOpenステートメントとInputモードの構文を使ってCSVファイルを取り込みます。
「Open varFileName For Input As #1」
varFileName :フルパスのファイル名を指定します。
# :1 ~ 511 の範囲で任意のファイル番号を指定します。
文字列を読込むには Line Input # ステートメントを使います。
Line Inputステートメントは、1行分のデータを読み込むと、読み取りポイントを次の行に移します。
つまり、Line Inputステートメントを繰り返すことで、テキストファイルの中を、1行ずつ、すべて読み込むことができるわけです。
読み取りがファイルの終端に達するまで、Line Inputステートメントを繰り返します。
「Line Input #1, buf」
# : 任意の有効なファイル番号
buf : 有効な 変数または 文字列 の変数名
読み取りポイントがファイルの終端に達したかどうかは、EOF関数で判定できます。
EOF関数は、読み取りポイントがファイルの終端に達するとTrueを返します。
Do Until EOF(1)
・
・
Loop
ファイルを閉じるにはCloseステートメントを使います。
「Close #1」
#:(省略可)Openステートメントで指定したファイル番号を指定します。
サンプルコード アプリの作成手順はこちら
「ChDir UrlToLocal(ThisWorkbook.Path)」のUrlToLocal関数の説明については以下リンク先を参照ください。正常に動作しない場合の対処方法についても説明しています。
https://scodebank.com/?p=696
Option Explicit '変数の宣言を強制する
Sub CSVファイル取込み()
'変数を定義する
Dim buf As String, tmp As Variant, i As Long
'既存のデータを削除
Range(Cells(5, 2), Cells(10, 3)).ClearContents
'CSVSample.csv ファイルの場所を指定
'ファイルがあるカレントドライブを指定
ChDir UrlToLocal(ThisWorkbook.Path)
'カレントドライブのフォルダを開く
Dim varFileName As Variant
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択")
'キャンセルボタンを選択した場合
If varFileName = False Then
Exit Sub
End If
'エクセルシートの5行目からCSVデータをセットする
i = 5
'CSVファイル読み込み
Open varFileName For Input As #1
'CSVデータがなくなるまでループ
Do Until EOF(1)
'CSVデータの1行目を読込む
Line Input #1, buf
'カンマでデータを分解して配列変数「tmp」にデータをセットする
tmp = Split(buf, ",")
Cells(i, 2) = tmp(1) '氏名をエクセルのセルにセット
Cells(i, 3) = tmp(4) '電話番号をエクセルのセルにセット
'次の行を指定
i = i + 1
Loop
'CSVファイルを閉じる
Close #1
'A1のセルを選択して終了
Range("A1").Select
End Sub
Public Function UrlToLocal(ByRef Url As String) As String
'OneDrive環境変数を格納する変数の定義
Dim OneDrive As String
'OneDrive環境変数の取得
OneDrive = Environ("OneDrive")
'「https://・・・・・・・/Documents」までの文字数を格納する変数の定義
Dim CharPosi As String
' URLからローカルパスを作成する
If Url Like "https://*" Then 'OneDriveのパスかどうかの判定
'「https://・・・・・・・/Documents」までの文字数を取得
CharPosi = InStr(1, Url, "/Documents") + 10
'ローカルパス作成
Url = OneDrive & Replace(Mid(Url, CharPosi), "/", Application.PathSeparator)
Else
'OneDriveのパス以外だったらカレントドライブ指定
ChDrive Left(Url, 1)
End If
'作成したローカルパスを返す
UrlToLocal = Url
End Function
ディスカッション
コメント一覧
まだ、コメントがありません