0

私はExcelでVBAを初めて使用し、データをシートに配置する基本的なユーザーフォームを持っています。フォームからのデータは、セル B13 から G13 まで入力し、その後、1 行おきに B14-G14 などの次の行で入力する必要があります。

私はすでにこのコードを持っていますが、正しいセルにデータを入力しておらず、同じ行に繰り返し入力しています...

     Private Sub CommandButton1_Click()

Dim lngWriteRow As Long

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

lngWriteRow = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row

If lngWriteRow < 13 Then lngWriteRow = 13

    ws.Range("B" & lngWriteRow) = TextBox1.Value
    ws.Range("C" & lngWriteRow) = TextBox2.Value
    ws.Range("D" & lngWriteRow) = TextBox3.Value
    ws.Range("E" & lngWriteRow) = ComboBox1.Value
    ws.Range("F" & lngWriteRow) = TextBox4.Value
    ws.Range("G" & lngWriteRow) = ComboBox2.Value

End Sub

どうすればこれを達成できますか?(下の行には既にデータがあります)

前もって感謝します

4

1 に答える 1

5

この行は間違っています:

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 にはなりません。

これがここでのダイナミクスを理解するのに役立つことを願っています.

于 2012-11-20T11:51:45.320 に答える