
以前、エクセルでテキストファイルを開く手順を紹介しました。
他のシステムで処理したデータをエクセルに取り込み、独自に加工するにはテキストファイルが便利です。
テキストファイルの中でも、エクセルと相性が良いのはカンマ区切りのCSVファイルです。
ここでは、エクセルVBAプログラムでCSVファイルを処理する方法を見ていきたいと思います。
この記事の内容
.CSV(テキストファイル)を開くエクセルVBAプログラムコード
エクセルでCSVファイルを開く簡単な方法は、ワークブックとして開いてしまいます。
Workbooks.Open "C:\Users\owner\Desktop\sample.csv"
この一文でデスクトップに保存されているCSVファイルが開きます。
エクセルでCSVファイルを開くのと同じ処理ですね。
読み込んだ後に、何か処理するプログラムを付け足せば、他のシステムと連携させる事ができます。
テキストファイルを開く時の注意点
CSVファイルはカンマ(,)で区切られたテキストファイルです。
テキストファイルの中には、スペースやタブで区切られた形式や、桁数が決まった固定長のデータもあります。
エクセルではCSVでなくても、他の区切り文字や固定長ファイルも開く事ができます。
それよりも厄介なのは、文字コードが違う時です。
シフトJISコードのテキストファイルであれば、エクセルで開いても文字化けしません。
しかし、他の文字コードの時は文字化けしていまう事もあります。
UTF-8で保存したテキストファイルをエクセルで開くと以下のようになります。
こうした時は、ファイルを開く時のウィザード画面で、文字コードを指定すると正しく開く事ができます。
ファイル出力する基幹システム側でシフトJISに保存してくれれば良いのですが、そうでなければ受取側で処理するしかありません。
.CSV(テキストファイル)で保存するエクセルVBAプログラムコード
エクセルシートのデータをCSV形式で保存するエクセルVBAプログラムコードの例です。
エクセルシートはこんな感じです。
3列あり、日付、部門、金額の項目です。
データは連続してあり、何行あるのかわかりません。
1行目はタイトルです。
CSVファイルには不要です。
日付は、8桁で、前0詰めです。
部門は、3桁で、前0詰めです。
この桁数は、基幹システムに取り込むときに必須となるので、CSVファイルに保存する時に編集します。
この条件で私が作ったVBAプログラムコードはこんな感じです。
Private Sub sample_xls_csv()
Dim csvFilePath As String
Dim iCount As Long
Dim maxRow As Long
Dim fileNo As Integer
Dim FileName As String
Dim strCells As String
' ファイル名の取得(拡張子を除く)
FileName = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)
' CSVファイルパスの作成
csvFilePath = ActiveWorkbook.Path & "\" & FileName & ".CSV"
' 最終行を調べる
maxRow = ActiveSheet.Range("A1").End(xlDown).Row
' ファイル番号を取得
fileNo = FreeFile
' ファイル開く
Open csvFilePath For Output As #fileNo
' 縦方向ループ(最終行まで)
For iCount = 2 To maxRow
strCells = Format(Cells(iCount, 1), "00000000")
strCells = strCells & "," & Format(Cells(iCount, 2), "000")
strCells = strCells & "," & Cells(iCount, 3)
Print #fileNo, strCells
Next iCount
' ファイルを閉じる
Close #fileNo
' 処理終了メッセージ
MsgBox ("CSV出力しました。" & vbLf & vbLf & varFile)
End Sub
エクセルVBAには、テキストファイルで保存する関数もありますが、日付や部門に桁数の指定などがあったので、Print文を使ってファイル出力しています。
VBAというより、VBの基本的なファイル操作のプログラムになりました。
Forループの処理が苦手です。
いつもわからなくなるので、最初の段階で最終行を明示して処理させています。
エクセルVBAっぽい感じの処理といえば、最終行を調べるあたりですね。
データを加工しやすいエクセルで処理するメリット
エクセルでテキストファイルを処理できるようになると、業務の自動化がやりやすくなります。
普段から使い慣れたソフトなので、多くの人と共有しやすくなります。