こんにちは!データ処理が大好きなtknriaです!
特に、実験データなどはCSVファイルにまとめられることが多く、それをExcelでスマートに処理できたりするとカッコいい!
なんか仕事デキる人みたい!
そんな、カッコよく仕事がデキるようになるマクロを紹介します。
■ Excel VBAでCSVデータを一括高速処理!
Excelシート上に、CommandButtonを一つ用意して、 次の関数を割り当てます。
' ----- 以下、ソース -----
Sub データ取り込み_Click()
Dim OpenFileName As String
Dim nowbook As Workbook
Dim nowsheet As Worksheet
Set nowbook = ThisWorkbook
Set nowsheet = nowbook.ActiveSheet
Dim adoSt As New ADODB.Stream
' ファイルオープンダイアログの初期ディレクトリを設定
ChDrive "D"
ChDir "D:\"
' csvファイルを開く
OpenFileName = Application.GetOpenFilename("データ,*.csv")
If OpenFileName = "False" Then
MsgBox ("キャンセルされました")
GoTo job_end
Else
' 全てのデータを網羅
Dim temp_data As String
Dim str_data() As String
With adoSt
.Type = adTypeText
.Charset = "UTF-8"
.Open
.LoadFromFile (OpenFileName)
Do Until .EOS
temp_data = .ReadText(adReadLine)
str_data = Split(temp_data, ",")
' ---------------------
' ここに必要な処理を記述
' ---------------------
Loop
' csvファイルを閉じる
.Close
End With
End If
job_end:
nowbook.Activate
nowsheet.Activate
MsgBox ("データ処理完了")
End Sub
' ----- 以上、ソース -----
Sub データ取り込み_Click()
Dim OpenFileName As String
Dim nowbook As Workbook
Dim nowsheet As Worksheet
Set nowbook = ThisWorkbook
Set nowsheet = nowbook.ActiveSheet
Dim adoSt As New ADODB.Stream
' ファイルオープンダイアログの初期ディレクトリを設定
ChDrive "D"
ChDir "D:\"
' csvファイルを開く
OpenFileName = Application.GetOpenFilename("データ,*.csv")
If OpenFileName = "False" Then
MsgBox ("キャンセルされました")
GoTo job_end
Else
' 全てのデータを網羅
Dim temp_data As String
Dim str_data() As String
With adoSt
.Type = adTypeText
.Charset = "UTF-8"
.Open
.LoadFromFile (OpenFileName)
Do Until .EOS
temp_data = .ReadText(adReadLine)
str_data = Split(temp_data, ",")
' ---------------------
' ここに必要な処理を記述
' ---------------------
Loop
' csvファイルを閉じる
.Close
End With
End If
job_end:
nowbook.Activate
nowsheet.Activate
MsgBox ("データ処理完了")
End Sub
' ----- 以上、ソース -----
関数の意味をググったりすれば、応用はできると思うので、細かい説明はしません。
大きくは、
・csvファイルを選択して読み込む
・データを処理する
・csvファイルを閉じる
ということをしています。
仕事でCSVファイルに触れる機会が多い人は、是非使ってみてください!
■ 億劫なあとがき
こういう処理こそ、Excel VBAの真骨頂ですよね!