CSV読み込み関数の作成

では前回行ったCSVファイルの読み込みを関数化してCSVの扱いを楽にしていきましょう。

CSVを取り込む順序を考える

まずは順序を考えましょう。

僕が前回行った手順では

  1. ファイルを選択するダイアログを出す。
  2. ファイルのパス(おいてある場所)からCSVを読み込む

ですね。この場合1と2は全く別の処理ですので分けて関数化してみましょう。

ファイル選択ダイアログを出す関数作成

これは簡単ですね。

Functionを作成してファイル選択ダイアログの為の

Application.GetOpenFilename("CSV Files (*.csv), *.csv")

の結果を関数の戻り値として設定するだけですね。

Function filePath() As String

Dim s As String

s = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
If InStr(s, "csv") = 0 Then
MsgBox "CSVファイルが見つかりませんでした。"
Exit Function
End If
filePath = s

End Function

もしもキャンセルが押された時やCSVファイルではないものを選択されてしまった時の為に念の為メッセージを出しておきます。

使用する時は

Dim s As String
s = filePath

の様にすれば変数sに選択したファイルのパスが格納されますね。

CSVを取り込む関数作成

この関数は引数にファイルのパスを受け取って発動させましょう。

ひとまずは取り込みだけなのでCSVファイルの行ごとのデータを1次元の配列として呼び出し元に返す様にしていきます。

Function csvArr(s As String) As Variant()
    
    Dim i     As Long
    Dim arr() As Variant
    
    Open s For Input As #1
    i = 0
    ReDim arr(0)
    Do Until EOF(1)
        i = i + 1
        ReDim Preserve arr(i)
        Line Input #1, arr(i)
    Loop
    Close #1
    
    csvArr = arr()

End Function

関数の戻り値として返す型に()を加える事により配列と返すという事にします。(つけなくても出来ちゃいますが…)

基本的な処理は前回行ったものと概ね変わりません。ただ、関数の戻り値として返すものの設定がいつもとちょっと違うだけですね。

まとめ

これでCSVの読み込みを関数化出来ましたので沢山CSVを読み込む時でも

Dim s   As String
Dim arr As Variant

s = filePath arr = csvArr(s)

こんな感じで終わっちゃいますね。

では次回は実際にこれら取り込んだデータをセルに吐き出すとしてのお話をしていこうかと思います。

<<<CSVを読み込んでみる   <<<CSVデータを2次元配列に変換

スポンサーリンク

シェアする

フォローする