この行は間違っています:
lngWriteRow = ws.Cells(Rows.Count, 12) _
.End(xlUp).Offset(1, 0).Row
変更しない列 12 を参照しているため、行は同じままです。
代わりにこれを使用してください
lngWriteRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row
編集:
初期オフセットが必要な場合は、データ入力 @ 行 13 を開始するには、次を使用します。
lngWriteRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row
if lngWriteRow < 13 then lngWriteRow = 13
Offset(12,0)
は、毎回使用するため、使用できません。
編集
明確にするために、コードをワークシート マクロとして貼り付けて F5 キーを複数回押すと、ここでは空のシートで機能します。したがって、説明がない限り、これが何を間違っているのか、問題は解決したと思います。
Private Sub Test()
Dim lngWriteRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
lngWriteRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row
If lngWriteRow < 13 Then lngWriteRow = 13
ws.Range("B" & lngWriteRow) = "test"
ws.Range("C" & lngWriteRow) = "test"
ws.Range("D" & lngWriteRow) = "test"
ws.Range("E" & lngWriteRow) = "test"
ws.Range("F" & lngWriteRow) = "test"
ws.Range("G" & lngWriteRow) = "test"
End Sub
編集
何度か郵送した後、これがこのなぞなぞの解決策です。入力するセルの下に塗りつぶされたセルがあるとは述べられていませんでした。
したがって、col-Bの場合はもっと似ていました
title-row
row13
row..
row..
row63
space
other stuff
基本的に、提案された修正は機能しましたが、シート全体の列 B の最後の塗りつぶされたセルを探しましたが、これが問題でした。
これに対する解決策は次のとおりです。
lngWriteRow = ws.Cells(ws.Range("B12:B63")Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row
そして、途中で説明をするために:
2 ~ 7 の BG 列にデータを追加しているため、(Rows.Count,1)
の代わりに を使用することはできません。(Rows.Count,2)
最後の行を探しているので、2-7 を使用する必要があります。1 を使用すると、新しいデータを追加しようとしているときに、変更されていない列 A の最後の値を探しています。
を使用することはできませんOffset(12,0)
。これは、データを挿入するたびにオフセットが作成されるためです。つまり、行が 12 行離れてしまうことになります。
Rows.Count
最後に、これは 65536 程度であり、追加するデータの下にデータがあるため、使用できません。End(xlUp)
あまりにも下から検索し、データが含まれている列 B の最後のセルで停止しますが、B14-B65536 にデータがない場合を除き、これは B13 にはなりません。
これがここでのダイナミクスを理解するのに役立つことを願っています.