見出し画像

Excel【Csvファイル】のデータ活用で困ること

Csvファイルのデータを活用したいとき、
CsvファイルをExcelで開いて編集している方が多いと思います。

Csvファイルのデータの内容によりますが、
例えば、社員を「社員番号、社員名、営業所」で管理していたとします。

社員管理ファイル(Csvファイル)


社員番号が数字5桁で「01234」の場合、
Excelで開くと「1234」になってしまいます。

社員管理ファイル(Excelで開いたとき)

Csvファイルの中は、文字列で保存してありますが、
Excelで開くことにより、数値化されてしまいます。

文字列が数値化されると困りますね。

数値化されない方法

◇外部データ取込する

外部データ取込機能を使用します。

リボンの「データ」タブの中の「テキストファイル」を選択

ウイザードが立ち上がります。

区切り文字「カンマ」を選択します
社員番号の列を選択し、データ形式を「文字列」にします
データを挿入したいセルを指定
データ取込後

社員番号の最初の0が表示されています。

確かに、ちゃんと取込出来ていますが、
頻繁にCsvファイルを「テキストウイザード取込」するのは、
大変そうですね。

◇マクロを使用する(VBA開発)

今回は、QueryTableを使用します。
標準モジュール

Sub QueryCsv()
    Dim clsCsv As clsQueryCsv                 'Csv読込インスタンス'
    Dim strFileName As String                 'ファイル名'
    Set clsCsv = New clsQueryCsv
    
    strFileName = ThisWorkbook.Path & "¥" & "社員番号.csv"
    
    Call clsCsv.ReadCsvQuery(strFileName, strFolderPth)

    Set clsCsv = Nothing
End Sub

クラスモジュール(clsQueryCsv)

Sub ReadCsvQuery(ByVal tgtCsv As String, ByVal FlePth As String)
    Dim varFileName  As Variant                             'ファイル名'
    Dim Ws As Worksheet                                     'ワークシート名'
    Dim NxtRow As Long, EndRow As Long                      '行数'

    varFileName = FlePth & tgtCsv
    Set Ws = ThisWorkbook.Worksheets("Sheet1")
        
    With Ws
        EndRow = .Cells(Rows.Count, 1).End(xlUp).Row
        If EndRow = 1 Then
            NxtRow = 1
        Else
            NxtRow = EndRow + 1
        End If
    End With
    
    'QueryTable設定'
    With Ws.QueryTables.Add(Connection:="text;" & varFileName, Destination:=Ws.Cells(NxtRow, 1))
        .RefreshStyle = xlOverwriteCells
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileCommaDelimiter = True
        .TextFileColumnDataTypes = Array(2, 2, 2)
        .Refresh BackgroundQuery:=False
        .Delete
    End With

End Sub

試しに2回実行すると、

2回実行しなくても良いですが、
ちゃんとCsvファイルを読込する事が出来ました。

マクロを簡単に実行するには、図形のボタンを配置して、
マクロを登録する方法が良く使用されます。

ボタンを2回押せば、数秒で2回読込されるわけです。
短時間で実行できる方法を紹介しました。