- ベストアンサー
ユーザーフォーム作成後の入力方法
まだ初心者で本を片手に作成しております。 今回ユーザーフォームで入力致しました。 エクセルのD1のセルにカウントが入力され、 順次にA3.B3,A4.B4に入力されています。 それをアクティブセルの入力出来るように変更したいのですが、 わかりませんので、宜しく教授ください。 ※range・cellsをactiveに変更しましたが、うまくいきませんでした。 下記はmoduleにしました。 Option Explicit Sub ShowForm() Worksheets("高").Activate Call 画面初期化 会員登録.Show End Sub Public Sub 画面初期化() Worksheets("高").Activate 会員登録.会員番号.Value = Application.WorksheetFunction.Max(Range("A3:A65536")) + 1 会員登録.氏名カナ.Value = "" End Sub こちらはフォームに記入しました。 Option Explicit Private Sub CommandOK_Click() Dim Row As Integer Row = Range("d1").Value + 3 If 会員登録.氏名カナ.Value = Empty Then MsgBox ("氏名カナが空欄です") Exit Sub End If Cells(Row, 1).Value = 会員登録.会員番号.Value Cells(Row, 2).Value = 会員登録.氏名カナ.Value Range("D1").Value = Range("d1").Value + 1 Call 画面初期化 End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
困ってるのは、とっても伝わって来るのですが、何を聞きたいのかが残念ながらさっぱり判りません まず、日本語をきちんと書いた方が良いですよ 言葉自体は丁寧にしようとしているので、質問する側としての礼儀をわきまえてる方と思いますので、あえて言いますが、誤字脱字や『てにをは』がおかしいのもかなり失礼です 回答する気を減退させる行為自体、質問される方にとって損以外の何者でも無いので、妙に堅苦しい表現を使う必要は無いですが、判りやすく丁寧にかつ、聞きたい事のみを質問されるようにした方が、良いと思いますよ ご質問の件ですが >range・cellsをactiveに変更しましたが、うまくいきませんでした。 どこをactiveにしたいのか判らないので、勘で返答します MsgBox ActiveCell.Address で、現在のアクティブセルのアドレスが取得できます また、アクティブセルの変更は Range("A1").Activate で、レンジA1がアクティブになります 微妙に異なりますが Range("A8").Select で、レンジA8がセレクトされます Range のカッコ内の値は文字列ですので、変数に"A7"などを格納して、それをRangeに指定することが出来ます Dim MyRange As String MyRange = "A7" Range(MyRange).Select MsgBox ActiveCell.Address Rowはエクセル内部に元からある変数とぶつかりますので、避けます 別な変数を用意して下さい コードに関しては、最初どの部分で何を行っているのか、コードを調整している内に、だんだん判らなくなってきます なるべくコメントをたくさん埋めるようにしたほうが良いと思います コメントを大量に書く事については、賛否両論ありますが、俺の場合は、コードそのものより、コメントによって各内容の処理を補完した方が、やろうとしている事を明確に出来たので、その後の勉強にも役立ちました 例えば Range(MyRange).Activate '次の入力位置を選択 って感じです 処理内容をそのままコメントしても無意味です その処理を行う"意味"をコメントするのがポイントです 会員登録 会員番号 と言うのが、説明の中に一言も出てきませんが 会員登録 がUserFrom 会員番号 がTextBoxとかでしょうか? Cells(会員登録.会員番号.Value, 1).Select ってのは、試しましたか? RangeとCellsとその選択は、エクセルVBAをやる上で、最初にはまる所です そういう意味で、予定通りですので、あせらずがんばってください 一部分でも何かの役に立てば幸いです
その他の回答 (3)
- pulsa
- ベストアンサー率57% (34/59)
あ~あ 人に言っておいてやっちゃった… メンテもの面 × メンテの面 ○ 申し訳ない
- pulsa
- ベストアンサー率57% (34/59)
不愉快って事でもないんですが、教える気を削ぐのはあなたにとって、何の得にもならないから気をつけた方が良いですよ って事です 例えば、ご教授は誤用です http://d.hatena.ne.jp/keyword/%B6%B5%BC%F8 と、まぁこれは、この辺にしておきます 多分これ以上は、経験しないと難しいと思いますんで ご質問の件ですがNO.2さんが言う通り、仕様が甘いですね 単に説明漏れかも知れませんが、聞きたい事の本質がそこにあるようですので、そこを詰めないと返答が難しいです 本来一続きのデータが途切れているのを探すのに適した関数は Currentregion です 使い方は MsgBox Range("A1").Currentregion.Rows.Count これで、Range("A1")を含む範囲で、空白セルに囲まれた範囲の最大行が返ります 補足の >各表のA3B3,A4B4,A5B5,A6B6,A7B7と順次入力していきます。 空白のセル(A5B5)が出来た場合 MsgBox Range("A3").Currentregion.Rows.Count とすると戻り値は「2」 なぜかと言えばCountなので、行番号ではなく数(量?)だからです 入力位置としたければ、A3からカウントし始めたのを補足するために+2("A3"が1だから) さらに、データの入っている数の一つ下の行なので+1 合計+3すれば、取り合えず空白セルの行を求める事ができますね コレをそのまま会員番号に使って良いなら Range("D1") = Range("A3").Currentregion.Rows.Count + 3 デフォルトで表示されるFormの会員番号をコレにするなら ↑をやったのち 会員登録.会員番号.Text = Range("D1").Value 会員番号を飛ばして行くけど、空白セルを出したくないなら 会員番号がある行をサーチして、最大数+1(行じゃなく値)を求める必要があります 例えば Dim iCnt As Integer Dim iMax As Integer Dim MyCount As Integer iMax = Cells(Rows.Count, 1).End(xlUp).Row '空白を無視して最終行を取得 For iCnt = 3 To iMax If MyCount < Cells(iCnt, 1) Then MyCount = Cells(iCnt, 1).Value'今の値より大きい時保持 End If Next iCnt MsgBox MyCount + 1'最大値+1 退会したなどして、B列に空欄が出来たときは、会員番号を残しておいて、最初に示した方法で最終行に追加していくのが、メンテもの面でも賢い選択とは思いますがね B列が空欄だったら印刷しない とかの方が、会員番号をこんなに苦労して埋めるより簡単なのは、もう気付いてるでしょ? それと、最初の返答に書いた通り、ユーザー変数にRowを使うのは絶対止めるべき 後で泣き見ますよ(俺も別な変数だけど、知らずに使って何度か泣いた)
お礼
いろいろ有り難うございました。 VBは奥が深いので、勉強します。 また、質問すると思いますので、宜しくお願いします。 ※「ご教授ではなく、ご教示であることも勉強になりました。」
- redfox63
- ベストアンサー率71% (1325/1856)
> 空白のセル(A5B5)が出来た場合、その空白セルに入力後、A8B8に入力した思います。 の仕様があいまいですよ … A3:B7にデータがあるという場合に 会員番号が 1,2,3,4,5 とあってこれの3番目の『3』を削除し 新規に入力した場合 3番目の登録には会員番号何番にするのでしょう 3なのでしょうか それとも 6なのでしょうか? 3だとするなら 画面初期化でMaxで引っ張ってきている部分を修正しないといけません 6とするなら rowの取得を修正でしょう 入力がA3から連続で2項目以上ある場合は row = Range("A3").End(xlDown).Row+1 で取得できます といった具合です
補足
大変不愉快な質問方法をして申し訳有りません。 以後、質問内容・方法を考えて投稿さして頂きますので、 宜しくお願いします。 会員登録はUserForm 会員番号・氏名カナはText Boxで作成しております。 エクセルの表:C1に会員数、A2に会員番号、B2に氏名カナの項目を作成しました。 d1には会員数が入力されます。 フォームで会員番号、氏名カナを入力しますと 各表のA3B3,A4B4,A5B5,A6B6,A7B7と順次入力していきます。 空白のセル(A5B5)が出来た場合、その空白セルに入力後、A8B8に入力した思います。 エクセル上で指定したセルに入力したいと思います。 宜しく御教授願います。 Private Sub CommandOK_Click() Dim Row As Integer Row = Range("d1").Value + 3’A3より入力 If 会員登録.氏名カナ.Value = Empty Then MsgBox ("氏名カナが空欄です") Exit Sub End If Cells(Row, 1).Value = 会員登録.会員番号.Value’A3セルに会員番号を入力 Cells(Row, 2).Value = 会員登録.氏名カナ.Value’B3セルに氏名カナを入力 Range("D1").Value = Range("d1").Value + 1’d1の会員数足す1の数字が会員番号としてフォームの会員番号に入力 Call 画面初期化 End Sub