CSVファイルの読み込みと文字列の操作

管理系のソフトやその他のシステム、機械等々から下したデータをExcelに反映させて、集計や管理、データ加工をするということがどの会社の日常でも多い事と思う。

この記事は、ただただファイルを開いてコピーして貼付して数式を入れて…という単純作業が面倒な場合に有効な、書き出したcsvファイルをそのまま文字列として指定シートに読み込ませ、後作業を行う簡単なVBAのメモ書き。

張り付けた形式は「全て文字列でいいよ」という人に限るという、コピペのみのお粗末VBAなので、日付の値等(平成27年1月1日 等)をシリアル値に変換したり、数値を文字列として読み込ませたくない、という場合はLine Input等でDateValue関数を用いる等、別VBAコードが必要となる。

 

 


CSVファイルを別シートにコピーするVBA

 

Sub csvFile_get()

Dim openCsv As String
Dim defaultFolder As String

Worksheets(“CSV”).Activate ‘csvを読み込ませるシート
Cells.Clear ‘CSVシート内の全てをクリア
Range(“A1”).Select
MsgBox (“csvデータの取り込みを開始します。次に表示されるファイル選択ダイアログにて、書き出した [*.csv] ファイルを選択してください”) ‘メッセージボックス(特にいらないかも)

defaultFolder = “C:\” ‘最初の指定フォルダがある場合はこちらにパスを記入
ChDir defaultFolder ‘フォルダ変更

openCsv = Application.GetOpenFilename(“CSVファイル,*.csv”) ‘csvを開くダイアログ
If openFile = “False” Then Exit Sub ‘キャンセルなら終了

With Workbooks.Open(openCsv) ‘csvファイルを開いて
.Sheets(1).Cells.Copy ThisWorkbook.Sheets(“CSV”).Range(“A1”) ‘CSVシートに内容をコピー
.Close (SaveChanges = False) ‘csvファイルを閉じる

End With
End Sub

 

 


ちょっとしたお役立ちVBA

 

ここから下は、読み込んだcsvファイルの後処理に役立った(筆者的に)コードのメモ。最終行のRowを取得するVBA、文字列の頭に指定文字を追加など。色んな場面で使えるので覚えておいて損は無いと思ったものを簡単に説明。

 

Ⅰ. A列に入力されている全部を選択

Range(“A1”).Select
Range(Selection, Selection.End(xlDown)).Select

※行間に空欄がある場合は、
Columns(“A”).Select
Selection.Replace What:=””, Replacement:=”0″, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
等で空欄に”0″を入れ、オプションの詳細設定で「ゼロ値のセルにゼロを表示する」のチェックを外してあげたりして使用してました。

 

Ⅱ. A列最終行のRowを取得

Sheets(“A”).Cells(Rows.Count, 1).End(xlUp).Row

 

Ⅲ. 選択した範囲の文字列の頭に文字を追加

Dim R As Range ‘変数をRとする
For Each R In Selection ‘選択範囲の中で
R.Value = “S” & R.Value ‘Sを値の頭に追加
Next R ‘繰り返し処理

読み込んだcsvファイルをVLOOKUP等の参照させる数式を絡ませる場合、数値だけだと参照してくれない(文字列の為)。列を文字列に変換し、片っ端からF2連打で数式を反映、もしくはLine Input等の別VBAコードを使用し書式を指定させることもできるが、それがめんどくさい場合は、VBAでの読み込み時から「英文+数値」に変換してあげて処理することでも対応可能。

 

 


コピペ用サンプルコード

 

Sub csvFile_get()

Dim openCsv As String

Worksheets(“Sheet1”).Activate
openCsv = Application.GetOpenFilename(“CSVファイル,*.csv”)
If openFile = “False” Then Exit Sub

With Workbooks.Open(openCsv)
.Sheets(1).Cells.Copy ThisWorkbook.Sheets(“Sheet1”).Range(“A1”)
.Close (SaveChanges = False)

End With

End Sub