0

ユーザーが3つの異なるテキストボックスにデータを入力するExcelの入力ユーザーフォームがあります。これは私のコードです

      Private Sub Process_Click()

     Worksheets("1").Range("A1").Value = Date.Value
     Worksheets("1").Range("B1").Value = Name.Value
     Worksheets("1").Range("C1").Value = Amount.Value


     End Sub

したがって、最初にプロセスを押すと、データがセル A1、b1、および C1 に書き込まれます。私がやりたいことは、フォームを開いてフォームのプロセスをクリックするたびに、それらの値が行を下に移動するようにすることです。たとえば、次にプロセスをクリックすると、A2、b2、および c2 に移動します。の上。

4

2 に答える 2

2

これはバランカの答えに似ています。

基本的な考え方は同じです。最後に入力された行を確認し、その行の 1 行下にデータを追加します。

while最後に入力された行を見つけるためにここで使用されている方法は、ループを使用するよりもわずかに効率的かもしれませんが、両方をテストして自分で確認する必要があります。

Private Sub Process_Click()
    Dim appendRow As Long

    ' add 1 to get the row after the last-populated row
    appendRow = Worksheets("1").Cells(Rows.Count,1).End(XlUp).Row + 1

    Worksheets("1").Range("A" & appendRow).Value = Date.Value
    Worksheets("1").Range("B" & appendRow).Value = Name.Value
    Worksheets("1").Range("C" & appendRow).Value = Amount.Value
 End Sub
于 2013-03-15T22:30:31.383 に答える
0

まず、最後に入力されたセルを知る必要があります。これは、範囲をナビゲートすることで簡単に実行できます。3 つの列すべてにデータが入力されていると仮定するとA、最後の行を取得するために 1 つのみ (たとえば ) を読み取ることができます。

Dim i as Integer
i = 1
while Worksheets("1").Range("A" & i).Value <> "" or Worksheets("1").Range("A" & i).Value <> 0
    i = i + 1
wend

最後に入力された行がわかったので、次のようにします。

 Worksheets("1").Range("A" & i).Value = Date.Value
 Worksheets("1").Range("B" & i).Value = Name.Value
 Worksheets("1").Range("C" & i).Value = Amount.Value

これは問題を解決するための 1 つの方法であり、データ セットがあまり大きくない場合に有効です。欠点は、テーブルが非常に長い場合while、最後に入力された行を追跡するのに時間がかかることです。

これがお役に立てば幸いです

于 2013-03-15T22:28:38.110 に答える