トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 新たなる挑戦編: 第15話「配列変数でセルを書き換えよう!」3/4 :うまくいったみたいだぞ

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第15話 「配列変数でセルを書き換えよう!」

うまくいったみたいだぞ

「うん!これでいいんじゃないか?
うまくいったみたいだぞ!」

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データが取り込まれ、あっという間に処理が終了してしまいました。

一覧にもどる