• ベストアンサー

VBAで最終行の取得について

UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A      B 1 ○○   ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A      B 1 ○○   ×× 2 あいう  アイウ 3 :    : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize()  Dim lasClm As Integer, i As Integer  lasClm = Sheet1.Range("A1").End(xlToRight).Column   For i = 1 To lasClm   ComboBox1.AddItem Sheet1.Cells(1, i).Value   Next i End Sub ********************************************* Private Sub CommandButton1_Click()  Select Case ComboBox1.Text  Case Sheet1.Cells(1, 1).Value '「○○」が選択  Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1)  Case Sheet1.Cells(1, 2).Value '「××」が選択  Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2)  End Select  UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例)    A     B 1 ○○   ×× 2 あいう  アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんな感じ? '********************************************* Private Sub CommandButton1_Click()  If Me.ComboBox1.ListCount < 0 Then Exit Sub  Sheet1.Cells(65536, Me.ComboBox1.ListIndex + 1) _     .End(xlUp).Offset(1, 0).Value = TextBox1.Text  Unload Me End Sub '**********************************************

gazo
質問者

お礼

回答ありがとうございます。 解決することができました。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

RangeオブジェクトのプロパティEnd()を使うと、データが入力されてる再終行のRangeオブジェクトを取得できます。なのでその次のセルを参照すれば良いかと。こんな感じ; Public functiom maxrow( col_idx as Long) as Range Set maxrow = Cells( 1, col_idx).End(xlDown).Offset(1,0) End Function 上記の例だと、指定列の1行めにデータがないと、エラーになりますので、ちょっと注意。

gazo
質問者

お礼

回答ありがとうございます。 解決することができました。