- ベストアンサー
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列それぞれの最終行の値を取得したいと思っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じ? '********************************************* 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 '**********************************************
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
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行めにデータがないと、エラーになりますので、ちょっと注意。
お礼
回答ありがとうございます。 解決することができました。
お礼
回答ありがとうございます。 解決することができました。