教えていただいたVBAについて、追加質問をさせてください。

教えていただいたVBAについて、追加質問をさせてください。 現在、下記のコードでCSVを取り込ませていただいております。 20200925に、マクロを実行してファイルを取りこみ、20200926に、マクロを実行し、前日のデータ最終行へ2行目から追加をして行きたいです。 どのように改変すればよいかご教授ください。 宜しくお願いいたします。 Sub Sample() Dim c As Variant, p As String, x As String Dim ai As Object, ao As Object Dim i As Long, r As Long, a As Variant c = Array(1, 2, 3, 6, 9, 10, 26) p = ThisWorkbook.Path & "\" With CreateObject("ADODB.Stream") .Type = 2 .Charset = "Shift-JIS" '"UTF-8" .Open .LoadFromFile p & Replace(Date, "/", "") & "-日々.csv" r = 1 x = .ReadText(-2) a = Split(x, ",") For i = 0 To UBound(c) Worksheets("日々商品").Cells(r, i + 1).Value = a(c(i) - 1) Next i Do Until .EOS x = .ReadText(-2) a = Split(x, ",") If Left(a(2), 3) = "YSR" Then r = r + 1 For i = 0 To UBound(c) Worksheets("日々商品").Cells(r, i + 1).Value = a(c(i) - 1) Next i End If Loop .Close End With End Sub

Visual Basic | Excel49閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

念のため、変更した部分以外も含め、全部掲載しておきます。 実際には、12・13行目 r = Worksheets("日々商品").Cells(Rows.Count, "A").End(xlUp).Row + 1 If r = 2 Then r = 1 を変更しただけです。 ここで、「r」に入るのは、列「A」に関しての「最大行数+1」が入ります。 「+1」しているのは、それまでデータが書き込まれている「次の行」という意味です。 しかし、シートに何も書き込まれていない状態の場合、「r」には、「2」が入ってしまいます。 すると、1行目が空白行になってしまうので、「r = 2」のときは、「r = 1」にしているわけです。 Sub Sample() Dim c As Variant, p As String, x As String Dim ai As Object, ao As Object Dim i As Long, r As Long, a As Variant c = Array(1, 2, 3, 6, 9, 10, 26) p = ThisWorkbook.Path & "\" With CreateObject("ADODB.Stream") .Type = 2 .Charset = "Shift-JIS" '"UTF-8" .Open .LoadFromFile p & Replace(Date, "/", "") & "-日々.csv" r = Worksheets("日々商品").Cells(Rows.Count, "A").End(xlUp).Row + 1 If r = 2 Then r = 1 x = .ReadText(-2) a = Split(x, ",") For i = 0 To UBound(c) Worksheets("日々商品").Cells(r, i + 1).Value = a(c(i) - 1) Next i Do Until .EOS x = .ReadText(-2) a = Split(x, ",") If Left(a(2), 3) = "YSR" Then r = r + 1 For i = 0 To UBound(c) Worksheets("日々商品").Cells(r, i + 1).Value = a(c(i) - 1) Next i End If Loop .Close End With End Sub

とてもわかりやすく有難う御座います。 かなり勉強になっております。 r = Worksheets("日々商品").Cells(Rows.Count, "A").End(xlUp).Row + 1 If r = 2 Then r = 1 上記の記述ですが、想定通りの動作をしてくれます。 とても勉強になりました。 上記の記述で、Row + 1の場合、取り込むデータは項目名列の1行目を除外し、2行目から取り込むことは可能でしょうか?

ThanksImg質問者からのお礼コメント

何度かご説明を読み返させていただきましたが、本当にわかりやすく理解しやすかったです。 おかげさまで、多くの事を学ぶことができました。 有難う御座いました。

お礼日時:9/26 16:16