大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAを使ってテキストファイルから任意の行データを取得する方法をご紹介します。

はじめに

この記事でご紹介したい内容はこちらです。

ご紹介したいこと

  • テキストファイルの任意の行をExcel VBAで取得する方法
  • 取得したいテキストファイルをダイアログボックスで指定する方法

本記事の内容を動画でまとめています

この記事で紹介するExcel VBAのコードを実行するとこんなことができます。Excel VBAの実行結果をパッと見たい方はどうぞご覧ください。

目次から見たい項目へ移動すると便利ですよ。

目次

取得したいテキストデータ

この記事では簡単にこちらのテキストデータを用意しました。

1行目には見出しがあり2行目にデータが保存されています。

それぞれのデータはコンマ『,』区切りで保存されていることを想定しています。

取得したいテキストデータ

取得したいテキストデータ

作成したエクエルVBAコードを実行して任意の行データを取得してみます。

今回はテキストファイルの2行目を取得するコードになっています。取得したいデータに応じて、取得する行を変えたり特定の文字がある場合にデータを取得するといった使い方も可能です。

Excel VBAで任意の行データを取得

取得方法はボタンに登録したエクセルのコードを実行するだけです。

ボタンをクリックしてExcel VBAコードを実行します。

Excel VBAを実行

Excel VBAを実行

ボタンをクリックするとダイアログボックスがでてきます。選択する手間を省くためエクセルが保存されているフォルダからスタートするようにしています。

取得したいテキストファイルの選択

取得したいテキストファイルを選択

取得したテキストファイルを選択すると2行目のデータがエクセルのセルへ入力されます。

テキストデータの取得結果

テキストデータの取得結果

テキストファイルの2行目が取得されています。

つづいてVBAコードを記載します。

Excel VBAコード

テキストファイルの任意の行を取得するExcel VBAコードです。

標準モジュールへ記載します。

VBAコード:テキストファイルの任意のデータを取得

'1つのテキストの任意の行を取得
Sub GetTextData()
    
    Dim OpenFileName
    
    'カレントディレクトリを設定します
    With CreateObject("WScript.Shell")
        .CurrentDirectory = ThisWorkbook.Path
    End With
    
    'ファイルを指定するダイアログを表示します
    OpenFileName = Application.GetOpenFilename("テキストファイル,*.txt?")
    
    '設定しない場合は、終了します
    If OpenFileName = False Then Exit Sub
    
    '長さは取得したいテキストデータに応じ変更してください
    Dim Hozon As Variant
    ReDim Hozon(1 To 100, 1 To 100) As Variant
    
    '一旦すべてのテキストデータを配列へ保存します
    Open OpenFileName For Input As #1
        i = 0
        'テキストをすべて取得する
        Do Until EOF(1)
            Line Input #1, buf
            i = i + 1
            'コンマ区切りでデータを取得する
            a = Split(buf, ",")
            For j = 0 To UBound(a, 1)
                Hozon(i, j + 1) = a(j)
            Next
        Loop
    Close #1
    
    '任意行の値を取得します
    Dim GetData As Variant
    ReDim GetData(1 To 1, 1 To 100) As Variant
    '▼必要に応じて変更
    i = 2 '2行目のデータを取得
    For j = 1 To UBound(Hozon, 2)
        GetData(1, j) = Hozon(i, j)
    Next
    
    'データ貼り付け
    With ActiveSheet
        .Range(.Cells(2, 1), .Cells(2, 1).Offset(0, UBound(GetData, 2) - 1)) = GetData
    End With
        
End Sub

おわりに

テキストファイルの任意の行だけ取り出したい場合に使えるVBAコードです。

さらにフォルダ内のすべてのテキストファイルからデータを取得できるようにVBAコードを拡張すればより操作性の高いコードになります。

最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す