うまくいったみたいだぞ
「うん!これでいいんじゃないか?
うまくいったみたいだぞ!」
Sub CSVデータ取り込み()
Dim buf As String
Dim v As Variant
Dim 日付 As String, 数量 As String
Dim i As Long, r As Long, c As Long
Dim Counter As Long
Dim wrk As Variant
wrk = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, _
Cells(4, Columns.Count).End(xlToLeft).Column))
Open ThisWorkbook.Path & "\Sample.csv" For Input As #1
Do Until EOF(1)
Line Input #1, buf
v = Split(buf, ",")
r = 製品行取得(v(0), wrk)
If r <> 0 Then
For i = 1 To UBound(v)
If v(i) <> "" Then
日付 = Mid(v(i), 1, InStr(v(i), ":") - 1)
数量 = Mid(v(i), InStr(v(i), ":") + 1)
c = 日付列取得(日付, wrk)
If c <> 0 Then
wrk(r, c) = 数量
End If
End If
Next i
End If
Counter = Counter + 1
Application.StatusBar = Counter & "件、取り込みが完了しました"
Loop
Close #1
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, _
Cells(4, Columns.Count).End(xlToLeft).Column)) = wrk
End Sub
Private Function 製品行取得(ByVal 製品 As String, wrk As Variant) As Long
Dim r As Long
For r = 6 To Cells(Rows.Count, 1).End(xlUp).Row
If wrk(r, 1) = 製品 Then
製品行取得 = r
Exit Function
End If
Next r
End Function
Private Function 日付列取得(ByVal 日付 As String, wrk As Variant) As Long
Dim c As Long
For c = 4 To Cells(4, Columns.Count).End(xlToLeft).Column
If Format(wrk(4, c), "yyyymmdd") = 日付 Then
日付列取得 = c
Exit Function
End If
Next c
End Function
※赤字の箇所が、高速化のために修正されたコードです。
星くんは、早速コードを実行させてみます。
すごいスピードでCSVデータが取り込まれ、あっという間に処理が終了してしまいました。