- 締切済み
VBAについて
現在マクロ勉強中です。 教えて頂きたいのは、登録ボタンで指定セルの台帳への転記する方法です。 Private Sub cmdToroku_Click() Dim myrow As Integer Option Explicit With ActiveSheet If .Range("A4").Value = "" Then myrow = 1 Else myrow = .Range(Cells(.Rows.Count, 1).End(xlUp).Address).Row + 1 End If .Cells(myrow, 1).Value = TextBox1.Value End With End Sub 上記ですと、開いているシートのA1に入力されてしまいます。 別シートへ転記したい場合どのあたりを修正すればよいのでしょうか? お力お借りできれば幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kybo
- ベストアンサー率53% (349/647)
以下の様に★部分を訂正してみてください。 Private Sub cmdToroku_Click() Dim myrow As Integer With Worksheets("台帳") If .Range("A4").Value = "" Then ’★台帳シートのA4で判断する myrow = 4 ’★1を4に変更(A4にしたいのなら) Else myrow = .Range(Cells(.Rows.Count, 1).End(xlUp).Address).Row + 1 End If .Cells(myrow, 1).Value = TextBox1.Value End With End Sub
- kybo
- ベストアンサー率53% (349/647)
「台帳」という名前のシートが既に同じブック内にある場合で、アクティブシートのA4の値で判断する場合。 Private Sub cmdToroku_Click() Dim myrow As Integer With Worksheets("台帳") If ActiveSheet.Range("A4").Value = "" Then myrow = 1 Else myrow = .Range(Cells(.Rows.Count, 1).End(xlUp).Address).Row + 1 End If .Cells(myrow, 1).Value = TextBox1.Value End With End Sub
- eden3616
- ベストアンサー率65% (267/405)
「'★」を最後につけている箇所になります。 「シート名」に実際のシート名を入力してください。 With ○○ ~ End Withブロックはこの間に記述された構文において 「.Range("A1")」のように先頭にピリオド「.」を記述することで ○○より手前のオブジェクトを省略して記述することが出来ます。 ここで「Activesheet(現在アクティブなシート)」が省略されていますので「.Range」や「.Cells」は 「Activesheet.Range」や「Activesheet.Cells」と記述するのと同意になります。 Private Sub cmdToroku_Click() Dim myrow As Integer Option Explicit With Sheets("シート名") '★ If .Range("A4").Value = "" Then myrow = 1 Else myrow = .Range(Cells(.Rows.Count, 1).End(xlUp).Address).Row + 1 End If Cells(myrow, 1).Value = TextBox1.Value End With End Sub
補足
ご回答ありがとうございます。 続けて質問させて下さい。 台帳と書かれたシートには転記されたのですが、値がA4に入ってくれませんでした。 A1に入ってしまいます。これはまだ異なるところがあるのでしょうか? ユーザーフォーム起動→そこに入力した値が台帳というシートのA4セルに転記をさせたいのが 今回のやりたいことなのですが、ユーザーフォームのテキストボックスの転記先が違う等でしょうか?