.png)
今回は、Shift-JISのCSVをExcelのシートに取り込むコードをご紹介します。単純にLineInputでの読み込みなので、難しい処理ではありません。
動作としては、参照ボタンを押してファイルを選択した後、読み込み開始ボタンを押すことで新しいシートにCSVデータを書き出す処理を行います。
なお、UTF-8のCSVファイルの取り込みについては、下記の記事をご参照ください。
.png)
【ExcelVBA】UTF-8のCSVをExcelのシートに取り込む | ともゆきの独り言(雑記ブログ)
UTF-8のCSVをExcelのシートに取り込む処理の備忘録です。動作としては、参照ボタンを押してCSVファイルを選択した後、読み込み開始ボタンを押すことで新しいシートにCSVデータを書き出す処理を行います。
画面設計

- シート名:設定情報
- セルD4:「入力ファイル」として名前付け
- 参照ボタン:ファイル選択のマクロの登録
- 読み込み開始ボタン:CSV取り込みのマクロの登録
入力データ

ファイル名:テストデータ.csv
形式はShift-JISのカンマ区切りです。全ての項目がダブルクォーテーションで囲まれていないパターンです。単価のところのみ「”」で囲まれています。
処理実行結果

Shift-JIS CSV取り込み - ソースコード(ExcelVBA)
Option Explicit ────────────────────────────────────────────────────────────────────────────── Sub MainProcess() Dim WS As Worksheet Dim CSVFile As String Set WS = ThisWorkbook.Worksheets("設定情報") CSVFile = WS.Range("入力ファイル") Call CSVImport(CSVFile) End Sub ────────────────────────────────────────────────────────────────────────────── Sub CSVImport(ByRef filePath As Variant) 'レコード数取得(配列は開始番号0から) Dim csvRow As Long: csvRow = 6 Dim csvColumn As Long: csvColumn = 3 '新規シート作成 Dim newWS As Worksheet Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "CSV" Set newWS = ActiveSheet 'CSV取り込み Dim readString As String Dim tmp As Variant Dim i As Long Dim j As Long ReDim Arry(csvRow, csvColumn) Open filePath For Input As #1 Do Until EOF(1) Line Input #1, readString tmp = Split(Replace(replaceColon(readString), """", ""), ":") For j = 0 To UBound(tmp) Arry(i, j) = tmp(j) Next j i = i + 1 Loop Close #1 '配列の転記(Excelは開始番号1から) newWS.Range("A1").Resize(csvRow + 1, csvColumn + 1) = Arry ''1回だけ代入 End Sub ────────────────────────────────────────────────────────────────────────────── Function replaceColon(ByVal str As String) As String Dim strTemp As String Dim quotCount As Long Dim l As Long For l = 1 To Len(str) 'strの長さだけ繰り返す strTemp = Mid(str, l, 1) 'strから現在の1文字を切り出す If strTemp = """" Then 'strTempがダブルクォーテーションなら quotCount = quotCount + 1 'ダブルクォーテーションのカウントを1増やす ElseIf strTemp = "," Then 'strTempがカンマなら If quotCount Mod 2 = 0 Then 'quotCountが2の倍数なら str = Left(str, l - 1) & ":" & Right(str, Len(str) - l) '現在の1文字をコロンに置き換える End If End If Next l replaceColon = str End Function
Shift-JIS CSV取り込み - ポイント
LineInputでの取り込み方法は、下記Webサイト様(Office TANAKA:田中先生)をご参照ください。いつも大変お世話になっております。
▼Shift-JISのCSV取り込み
undefined
undefined
ダブルクォーテーションの置き換え処理の詳細は、下記Webサイト様(いつも隣にITのお仕事:高橋先生)をご参照ください。いつも大変お世話になっております。
▼データにカンマが含まれている場合のCSV取り込み

エクセルVBAでデータにカンマが含まれてしまっているCSVを取り込む
エクセルVBAで様々なタイプのCSVを取り込んでいきます。今回は、意外と多いパターンであるデータの中にカンマが含まれている場合のCSVをエクセルVBAで取り込む方法についてお伝えしていきます。
コメントを投稿
別ページに移動します