• ベストアンサー

ユーザーフォームについて

エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

'標準モジュール Sub test() UserForm1.Show End Sub ’UserForm1のフォームのコード Private Sub CommandButton1_Click() ’A列の最終行の次の行にテキストボックスの値を入力 Range("A" & Rows.Count).End(xlUp).Offset(1).Value = TextBox1.Value ’+1の値を入力 TextBox1.Value = TextBox1.Value + 1 End Sub Private Sub UserForm_Initialize() ’起動時にA列の最終行の値をテキストボックス1に入力 TextBox1.Value = Range("A" & Rows.Count).End(xlUp).Value + 1 End Sub

nasu000_002
質問者

お礼

ありがとうございます。 A列最終行にテキストボックス内の数値の入力ができました! ただ、シート上のボタンでユーザーフォームを呼び出すようにしているのですが、 「起動時にA列最終行のデータをテキストボックスに表示させる」のがうまく行きません。 ユーザーフォーム内のボタンを押した後は、ちゃんとA列最終行のデータがテキストボックスに表示されます。 このテキストボックスをタブオーダーで一番目に設定しているためでしょうか?

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

私から言えば、多分質問の書き方がピントハズレ。「現在のA列のデータがあるセルの直ぐ下のセルは、どういうコードでとらえられるか」と質問すべきでは。 そのセルにテキストボックスの値をセット刷るのが目的では。 ヒョウジュンモジュールで Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row + 1 MsgBox d End Sub 私など回答で毎回ぐらい使うコードだ。("A65536”)は、まず使わないセルを指定してでも良い。 これを知らないでUserFormがどうたらなんて、アンバランスな感じだ。 Sub test01() MsgBox Rows.Count d = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1 MsgBox d End Sub やxlEndを使う方法もある。 Googleででも「vba シート データ最終行」で照会すれば沢山記事がある。 http://www.niji.or.jp/home/toru/notes/8.html以下多数

nasu000_002
質問者

お礼

ご指摘ありがとうございます 起動時にテキストボックスに値を入れておくのは難しいですね

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

たとえば private sub userform_Initialize() me.textbox1 = worksheets("シート名").range("A65536").end(xlup) + 1 end sub private suc CommandButton1_Click() worksheets("シート名").range("A65536").end(xlup).offset(1) = cdbl(me.textbox1) ’必要に応じて 'me.textbox1 = worksheets("シート名").range("A65536").end(xlup) + 1 end sub のように。 #補足 テキストボックスの値をそのままセルに戻すと「文字列」になってしまうので注意しないといけません。 #余談 わざわざ一度テキストボックスに値を受けなくても,コマンドボタンを押すだけで「そこ(シート上)にある最後の数字+1を次のセルに入れる」といった具合に組み立てるのでも十分に見えます。 もちろん,次々+1せずどこかで数字をスキップしたい(ここから50番からに変えたい)みたいなことを意図しているのなら,番号入力用にテキストボックスを用意する意味はあります。

nasu000_002
質問者

お礼

回答ありがとうございます。 keithinさんの方法でもできました。 たしかに、テキストボックスに値を受けなくても大丈夫です。 ただ、今後の応用のために番号自動取得のボックスを作りたいので、今回はこれで行きたいと思います。

関連するQ&A