ファイルサイズの大きいCSVファイルを全て読み込むと、
Excelファイルが重くなってしまいます!
Excelファイルの肥大化を防ぐために
・必要なデータのみを読み込む
ようにしましょう!
CSVファイルを開く際の文字コードにより、
読み込み方法を使い分けましょう!
列を指定したCSVファイルの読み込みについては、
以下の記事をご確認ください!
※不要な列を読み込まないようにできます。
文字コード「Shift_JIS」で読み込む場合
文字コード「Shift_JIS」でCSVファイルを読み込む場合は、特に考慮不要のためシンプルに
・Openステートメント
を使用します。
ここでは例として、
・デスクトップ配下のファイル「sample_shift_jis.csv」から
・文字列「みかん」が含まれている行のみを
・シート「sample」へ
・文字コード「Shift_JIS」で読み込み
をします。
Option Explicit
Sub sample()
Dim csvFile As String
Dim outputWs As Worksheet
Dim outputRow As Long
Dim outputColumn As Long
Dim fileNo As Long
Dim line As String
'読み込むCSVファイル
csvFile = "C:\Users\user\Desktop\sample_shift_jis.csv"
'出力シート
Set outputWs = Worksheets("sample")
'出力行
outputRow = 2
'出力列
outputColumn = 2
'使用可能なファイル番号を取得
fileNo = FreeFile
'開く
Open csvFile For Input As #fileNo
'最終行まで繰り返し
Do While Not EOF(fileNo)
'次の行を読み込む
Line Input #fileNo, line
'対象文字列が含まれている場合は出力
If line Like "*みかん*" Then
outputWs.Cells(outputRow, outputColumn) = line
outputRow = outputRow + 1
End If
Loop
'閉じる
Close #fileNo
End Sub
上記のVBAコードの実行により、
・特定の文字列(みかん)を含む行のみを、
・シートへ読み込む
ことが出来ました。
文字コード「UTF-8」で読み込む場合
「Openステートメント(=Shift_JIS)」で読み込んだ際に、文字化けしてしまうことがあります。
文字化けすると、「特定の文字列」が含まれている/いないを判定できません。
「Openステートメント(=Shift_JIS)」で読み込んだ際に文字化けが発生した場合は、文字コード「UTF-8」で読み込みましょう。
文字コード「UTF-8」でCSVファイルを読み込む場合は、
・ADODB.Stream
を使用します。
※「ADODB.Stream」は文字コードの指定ができるため。
ここでは例として、
・デスクトップ配下のファイル「sample_utf8.csv」から
・文字列「みかん」が含まれている行のみを
・シート「sample」へ
・文字コード「UTF-8」で読み込み
をします。
Option Explicit
Sub sample()
Dim csvFile As String
Dim outputWs As Worksheet
Dim outputRow As Long
Dim outputColumn As Long
Dim line As String
'読み込むCSVファイル
csvFile = "C:\Users\user\Desktop\sample_shift_jis.csv"
'出力シート
Set outputWs = Worksheets("sample")
'出力行を設定
outputRow = 2
'出力列を設定
outputColumn = 2
With CreateObject("ADODB.Stream")
'開く
.Open
'文字コードに「UTF-8」を指定
.Charset = "UTF-8"
'改行コードに「adCRLF」を指定
.LineSeparator = -1
'ファイル名を指定
.LoadFromFile = csvFile
'最終行まで繰り返し
Do While Not .EOS
'次の行を読み込む
line = .ReadText(-2)
'対象文字列が含まれている場合は出力
If line Like "*みかん*" Then
outputWs.Cells(outputRow, outputColumn) = line
outputRow = outputRow + 1
End If
Loop
'閉じる
.Close
End With
End Sub
上記のVBAコードの実行により、
・特定の文字列(みかん)を含む行のみを、
・シートへ読み込む
ことが出来ました。
セル内の文字列をカンマ区切りで分割したい場合は、
以下の記事を参照してください!
参考①
以下の方法でも同様のことができます。
※こちらの方法は「1行目の見出し(項目名)」を取得できるため、より良い方法かもしれません。
①CSVファイルを単純に読み込んで
②その後、オートフィルタを利用して不要な行を削除
詳細は以下の記事をご確認ください。
●CSVファイルを単純に読み込む
●オートフィルタを利用して不要な行を削除
参考②
シートへ読み込んだデータを、配列へ格納することもできます。
詳細は以下の記事をご確認ください。
参考③
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●「Openステートメント」
●「ADODB.Stream」