このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】CSVをゼロ落ちさせないで読み込む方法(クエリテーブル)

2024年5月8日

CSVファイルをExcelで開くと先頭のゼロが消えちゃう

いわゆるゼロ落ちで困っていませんか?

VBAでもクエリテーブルを使用してCSVファイルを読み込んだ時に、何もしないとゼロ落ちが発生します。

今回はゼロ落ちを回避する方法を紹介するので、参考にしてみてください。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

クエリテーブルでゼロ落ちさせない方法

クエリテーブルでは、TextFileColumnDataTypesプロパティによって、それぞれの列に対してデータ型を指定することができます。

このプロパティで「テキスト形式」を指定することによって、ゼロ落ちを回避することができます。

Sub CSVInputWith0()
    'ファイルを開く
    Dim varFileName As Variant
    varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
                                        Title:="CSVファイルの選択")
    If varFileName = False Then Exit Sub
    
    'TextFileColumnDataTypesプロパティ用の配列作成
    Dim arrDT(1 To 100) As Long, i As Long
    For i = 1 To 100
        arrDT(i) = xlTextFormat 'テキスト形式
    Next

    'クエリテーブル実行
    With ActiveSheet.QueryTables.Add(Connection:="text;" & varFileName, Destination:=Range("A1"))
        .TextFilePlatform = 65001 'UTF8
        .TextFileCommaDelimiter = True
        .TextFileColumnDataTypes = arrDT
        .Refresh BackgroundQuery:=False
        .Delete
    End With
End Sub

このTextFileColumnDataTypesプロパティなんですが、使い方に少しクセがあります。

このプロパティには配列を渡す必要があって、CSVファイルの各列に対してデータ型を指定することができます。

例えば、Array(xlTextFormat, xlGeneralFormat)とした配列を渡すと、1列目はテキスト形式、2列目は一般形式となります。(データ型の種類については、公式ドキュメントを参照)

上で紹介したプログラムでは、すべてテキスト形式となるように配列を作成しています。

    'TextFileColumnDataTypesプロパティ用の配列作成
    Dim arrDT(1 To 100) As Long, i As Long
    For i = 1 To 100
        arrDT(i) = xlTextFormat 'テキスト形式
    Next

この部分で、要素が100個の配列を作成しています。

TextFileColumnDataTypesプロパティは列以上に配列の要素があっても問題ないので、多めの列数に対応できるように100個の配列としました。

このプログラムを実行すれば、すべての列がテキスト形式として扱われ、ゼロ落ちを回避することができます。

もし、列数が100個を超えるようなCSVファイルであれば、この要素数を増やして対応してください。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

VBA

Posted by やろまい