CSVファイルをエクセルで開く(文字列を区切り文字で分割する)VBAを紹介します。
販売システムや会計システムなどから出力したCSVデータを文字列として編集したい場合に便利です。
CVSファイルを開く時に困ることはなんですか。
データをそのまま表示するためには、手数がかかることです。
具体的な例を上げてみましょう。
CSVファイルを開く時に困ること
CSVファイルをクリックしてエクセルで開く
そのため、0が先頭の文字列は0が落ちてしまったり、日付がシリアル値になったりする。
CSVファイルをメモ帳で開きエクセルに貼り付ける
そのため、「区切り位置指定ウィザード」を開き、さらに設定をする必要がある。
エクセルにある機能を利用して開く
- エクセルを開く
- 「データ」タブ
→「データの取得」
→「従来のウィザード」
→「テキストから(レガシ)」 - 区切り位置指定ウィザード」が開く
→言語、区切り文字、セルの書式設定などを選択
→完了を押してエクセルに取り込む
ー結果ー
そうなんですよね。手数が多いんです。
毎回同じテーブルのデータを表示するのであれば、あらかじめ書式を設定しておくと便利ですね。
CSVファイルをエクセルで開くVBA
TextToColumnsを使うVBA
Sub カンマ区切りでわける()
Sheets(“Sheet1”).Select
Cells.Clear
With Range(“A1”)
.Value = “1”
.TextToColumns Destination:=Range(“A1”), _
DataType:=xlDelimited, _
Comma:=True, _
TrailingMinusNumbers:=True
End With
Range(“F:F”).NumberFormatLocal = “@”
Range(“I:J, O:P”).Style = “Comma [0]”
MsgBox “.csvをメモ帳で開いて、「A1」へ貼り付け”
Range(“A1”).Select
End Sub
TextToColumnsを使うVBAの解説
その他のセルの書式設定
Selection.NumberFormatLocal = “yyyy/m/d”
Selection.NumberFormatLocal = “G/標準”
Splitを使うVBA
Sub カンマ区切りで分ける()
Dim tmp As Variant
Dim e, i, h As Long
e = Range(“A1”).End(xlDown).Row
Range(“F:F”).NumberFormatLocal = “@”
Range(“I:J, O:P”).Style = “Comma [0]”
For i = 1 To e
tmp = Split(Cells(i, 1), “,”)
For h = 0 To UBound(tmp)
Cells(i, h + 1) = tmp(h)
Next h
Next i
End Sub
Splitを使うVBAの解説
※「For~Next」でループしているので、TextToColumnsを使う方法よりも遅い。
コメント