Excel【Csvファイル】のデータ活用で困ること
Csvファイルのデータを活用したいとき、
CsvファイルをExcelで開いて編集している方が多いと思います。
Csvファイルのデータの内容によりますが、
例えば、社員を「社員番号、社員名、営業所」で管理していたとします。
社員番号が数字5桁で「01234」の場合、
Excelで開くと「1234」になってしまいます。
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回読込されるわけです。
短時間で実行できる方法を紹介しました。