ユーザーが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に移動するときにそれらの値が行を下げたいことですに。
回答:
回答№1は2これは、Barrankaの答えに似ています。
基本的な考え方は同じです。最後に入力された行を確認し、それより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
回答№2の場合は0
最初に、最後に入力されたセルを知る必要があります。これは、範囲内を簡単にナビゲートできます。 3つの列すべてにデータが入力されていると仮定すると、1つしか読み取ることができません(たとえば、 A
)最後の行を取得するには:
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
それは単にそれを解決する方法であり、データセットが本当に大きくなることを意図していない場合に機能します。欠点は、非常に長いテーブルがある場合、 while
最後に読み込まれた行を追跡するには時間がかかる場合があります。
これがあなたに役立つことを願って