【ExcelVBA】Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させるには②

この記事では、Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させる方法についてご説明します。

参考
この記事では、コンボボックスのAddItemメソッドで読み込んだデータを、コンボボックスに追加する方法をご紹介しています。
別の方法に、コンボボックスのListFillRangeプロパティを使って、コンボボックスにCSVファイルのデータを表示させる方法があります。
詳しくはこちらの記事をご覧ください。
【ExcelVBA】Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させるには①

【動画】Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させている実際の動き

本題に入る前に、まずは次の動画をご覧ください。


CSVファイルのデータをマクロが読み込み、コンボボックスのAddItemメソッドでその読み込まれたデータをコンボボックスに追加して表示させています。

Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させる方法

Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させるには、次の流れの通りに行います。

作業の流れ

STEP.1
【コンボボックス】シート上にコンボボックスを設置
シート上にコンボボックスを設置します。
STEP.2
【マクロ】CSVファイルのデータを読み込む
CSVファイルのデータを読み込みます。
STEP.3
【マクロ】読み込んだデータをコンボボックスに設定する
読み込んだデータをコンボボックスに設定します。
コンボボックスへの設定はコンボボックスのAddItemメソッドを使います。

【STEP.1】シート上にコンボボックスを設置

シート上にコンボボックスを設置します。

【STEP.2】CSVファイルのデータを読み込む

CSVファイルのデータを読み込みます。

【STEP.3】読み込んだデータをコンボボックスに設定する

読み込んだデータをコンボボックスに設定します。

コードの例

Excelのマクロのコード(例)

Sub test()

    Dim filePath            As String           'データファイル
    Dim st                  As ADODB.Stream     'バイナリ データまたはテキストのストリームのインスタンス用変数
    Dim fileLineNum         As Long             'データファイルの行数
    
    'データファイルのフルパスを取得する
    filePath = ThisWorkbook.Path & "\" & "data.csv"
    
    'バイナリ データまたはテキストのストリームのインスタンスを生成する
    Set st = New ADODB.Stream
        
    With st
    
        .Charset = "Shift_JIS"      '文字セットShift_JISを設定する
        .Open                       'streamを開く
        .LoadFromFile filePath      'データファイルから読み込む
        
        'コンボボックスをクリアする
        ComboBox1.Clear
        
        'Streamの末尾まで繰り返す
        Do Until .EOS
            
            'コンボボックスにCSVファイルのデータを追加する
            ComboBox1.AddItem .ReadText(adReadLine)
        
        Loop
    
    End With
    
End Sub

コードの解説

注目すべきコード①

最初に見て頂きたいのは8行目から17行目です。

    'データファイルのフルパスを取得する
    filePath = ThisWorkbook.Path & "\" & "data.csv"
    
    'バイナリ データまたはテキストのストリームのインスタンスを生成する
    Set st = New ADODB.Stream
        
    With st
    
        .Charset = "Shift_JIS"      '文字セットShift_JISを設定する
        .Open                       'streamを開く
        .LoadFromFile filePath      'データファイルから読み込む

8行目でCSVファイルを指定し、17行目のLoadFromFileメソッドでCSVファイルを読み込みます。

注目すべきコード②

最初に見て頂きたいのは26行目です。

            'コンボボックスにCSVファイルのデータを追加する
            ComboBox1.AddItem .ReadText(adReadLine)

26行目でコンボボックスのAddItemメソッドを使って、コンボボックスにCSVファイルのデータを追加しています。

動作確認

取り込むCSVファイルのデータは次の通りです。

マクロを実行後、このCSVファイルのデータをマクロが取り込んでコンボボックスを動かしてみた画面は次の通りです。

CSVファイルのデータがコンボボックスに表示されていることが確認できます。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。

  1. Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)

なぜ必要かというと、先ほどのコードの4行目の「ADODB.Stream」というオブジェクトが「msado28.tlb」というファイルを参照するからです。

    Dim st                  As ADODB.Stream     'バイナリ データまたはテキストのストリームのインスタンス用変数

この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。

ここでは「msado28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADODB.Stream」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。

最後に

本記事では、Excelのシート上に設置したコンボボックスにCSVファイルのデータを表示させる方法についてご説明しました。

大まかな処理の流れとしては次の3つになります。

  1. シート上にコンボボックスを設置する
  2. CSVファイルのデータを読み込む
  3. 読み込んだデータをコンボボックスに設定する

CSVファイルのデータをシート上のコンボボックスに表示させたい時は参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら