- ベストアンサー
エクセルVBAでの テキストボックス内の値検索について
お世話になります。 早速質問致します。エクセルVBAでユーザーフォームへ配置された 各テキストボックスへ入力を忘れた箇所がある場合それを見つけ出し メッセージボックスで入力忘れを表示させ、さらに、その入力を忘れ てしまった空欄のテキストボックスにフォーカスを移動させたいので すが、どのように指令したら良いのでしょうか? ちなみにテキストボックスは15個設けています。それらを一度に 検索する方法がありましたら、アドバイスお願い致します。
- na714
- お礼率52% (43/82)
- Visual Basic
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コレクションを利用した方法を紹介します。 下記は机上コーディングのみなので、そのままペーストで確実に動作する保証はできないですが。 'チェックする対象のテキストボックスを格納するコレクション Dim colValueCheckTextBoxes As Collection 'コレクションを初期化する処理 Private Sub InitValueCheck() 'コレクションを作成する Set colValueCheckTextBoxes = New Collection 'チェックする対象のテキストボックスへの参照を追加する With colValueCheckTextBoxes .Add テキストボックス1 .Add テキストボックス2 .Add テキストボックス3 ・・・・・ .Add テキストボックスN End With End Sub '空白のチェックを行う '返り値True/False 空白項目がない/空白項目がある Private Function DoValueChecks() As Boolean Dim i As Long '成功すると仮定して返り値を初期化 DoValueChecks = True 'コレクションに追加されたテキストボックスの値を確認する For i = 1 To colValueCheckTextBoxes.Count With colValueCheckTextBoxes(i) '最初に発見された空白のテキストボックスコントロールにフォーカスを設定して終了 If .Value = vbNullString Then MsgBox .Name & "が未入力です" .SetFocus '返り値を異常終了に設定してループを抜ける DoValueChecks = False Exit For End If End With Next End Function 最初に一度だけ(例えばFormLoad時など)InitValueCheckを呼び出す必要があります。 また、チェック実行時にDoValueChecksを実行して、Trueが返った場合はすべての項目が入力された状態だと判定できます。 入力するテキストボックスが増えた場合、InitValueCheck内に、そのテキストボックスへ参照を追加する必要がある、と自動メンテナンスではないという欠点はありますが。 入力必須ではない項目がある場合、InitValueCheckで追加しないことでその項目はチェック対象にならない、と制御できるという利点があります。
その他の回答 (2)
- onlyrom
- ベストアンサー率59% (228/384)
No1です。 >すいませんが、内容の説明をお願いできないでしょうか? お易い御用なり。 とは言ってもそれぞれのヘルプを見れば分かることですので改めて説明するようなところはないのですが(^^;; -------------------------------------------- 'コマンドボタンのクリックイベント Private Sub CommandButton1_Click() 'Nは、TextBox1,2,3...の番号取得用変数 Dim N As Integer 'TextBoxが15個あるのでそれをFor文でまわす For N = 1 To 15 'MeはUserFormのこと。別になくてよい 'Controls("TextBox1") でTextBox1を表すので 'それを15も書くと煩わしいので変数Nと組合せて15個分を1個で済むようにする 'Textboxの内容が空白かどうかきく If Me.Controls("TextBox" & N).Value = "" Then '空白(未入力)だったらTextBox欄の項目表示に使っているLabelのCaptionプロパティを表示する MsgBox Me.Controls("Label" & N).Caption & " は未入力です" 'メッセージを確認したら未入力TextBoxへ飛ぶ Me.Controls("TextBox" & N).SetFocus 'イベント処理を抜ける Exit Sub End If Next N End Sub 以上。
お礼
丁寧な解説で本当に助かりました。早速試してみたところ 見事に成功致しました。無事解決です。 経験者の方は簡単なことかも知れませんが、自分で作った ものが機能すると感動です。 本当にありがとうございました。
- onlyrom
- ベストアンサー率59% (228/384)
こんばんは。 UserFormには、CommandButton(例えば書込み用)があって、それをクリックした時、TextBoxの未入力チェックでいいんですよね。 UserFormにCommandButtonがひとつと、 LabelとTextBoxのペアが15個配置してあるとする (LabelはTextBoxの見出し用) ------------------------------------------ Private Sub CommandButton1_Click() Dim N As Integer For N = 1 To 15 If Me.Controls("TextBox" & N).Value = "" Then MsgBox Me.Controls("Label" & N).Caption & " は未入力です" Me.Controls("TextBox" & N).SetFocus Exit Sub End If Next N End Sub ---------------------------------------- たとえ上記が勘違いであるとしても、 少なくとも、Controlsを使うことでFor文でまわすことができます。 以上。
補足
ご回答ありがとうございます。説明不足ですいませんでした。 はい、コマンドボタンでの処理です。 ところで、すいませんが、内容の説明をお願いできないでしょうか? 超初心者なもので、構文の理解をしておきたいのですが・・・。
関連するQ&A
- エクセルVBA テキストボックスへのセットフォーカスについて
エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!" TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。
- ベストアンサー
- Visual Basic
- エクセルで、任意のテキストボックス等にフォーカスを移したい
すいません、またまた質問です。 エクセルXPで、ユーザーフォーム上に 複数のテキストボックスやリストボックスを 置いて入力した値が任意のシートのセルに 入力されるというものを作っています。 (しかしながらVBAがほとんど見様見真似レベル なのでかなり悪戦苦闘(~_~*)) そこで、ユーザーフォームにて例えばTEXTBOX1に 入力後、Enterで次のテキストボックス(又は リストボックス)にフォーカスを移したいのですが、 その時に任意のテキストボックス等にフォーカスを 移すことは可能でしょうか。 番号順(なのかな?)に自動でフォーカスを 移動させることはできたのですが、任意の対象へ 移動させるやり方とかってあるのでしょうか。 例えばTEXTBOX1からRISTBOX5へ移すとか。 入力する順番に移動できたらユーザーフォーム上での 入力作業が非常に楽になると思って(^o^;) どうぞよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA のテキストボックスで
EXCEL VBAのテキストボックスでボックス内にテキストを入力 しなければカーソルの移動が出来ないようにできますか? 宜しくお願いします。
- 締切済み
- オフィス系ソフト
- エクセルVBAでテキストボックス等選択する。
こんばんわ! エクセルのVBAのユーザーフォームについての質問です。 オプションボタン1・2・3とあって 1を選択したらテキストボックス1が選択される(そのまま入力できる状態になる) 2を選択したらテキストボックス2が選択される(そのまま入力できる状態になる) 3を選択したらテキストボックス3が選択される(そのまま入力できる状態になる) ということをしたいのですが、どのようにすればよいでしょうか? アドバイスの程よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA テキストボックスを見やすくしたい
いつもお世話になっております。 EXCEL VBA のユーザーフォーム上の テキストボックスについて教えて下さい。 大きめのテキストボックスを作り 改行を許可して、数十文字を表示させることができたのですが、行と行の間が詰まりすぎていて、見づらいのです。 行間を空ける方法を教えて下さい。
- ベストアンサー
- オフィス系ソフト
- エクセルのフォームでのフォーカス
エクセルVBAでのユーザーフォームの テキストBOX間のフォーカスはenterで移動可能かのですが、間にComboBoxがあるとComboBoxが飛ばされますが そこにもフォーカス移動って可能でしょうか?
- ベストアンサー
- オフィス系ソフト
- VBAユーザーフォーム内のテキストボックスで検索
http://oshiete.homes.jp/qa3451770.html こちらで質問した者なのですが (benelli様ありがとうございました) VBAでユーザーフォームでの検索を作成し このユーザーフォーム内にテキストボックスを作成して そのテキストボックスに入力した数字を検索できるようにしたいです。 よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- テキストボックスの値をセルに反映させたい。
はじめまして、いつもお世話になっております。 EXCEL VBAの質問です。 下記(1)(2)の質問にお答えいただきたく、お願いいたします。 (1)ユーザーフォームのテキストボックスの値をEXCELのデータが入力されている 最終行の下の空白にユーザーフォームのボタンをクリックして反映。 (2)(1)の逆で特定のセルの値をユーザーフォームのテキストボックスに反映。 色々なサイトのプロシージャをコピペしましたが、うまくいきません。 見づらいかもしれませんが、ユーザーフォームの画像を添付します。 皆様、よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- エクセルVBAのユーザーフォーム上のテキストボックスについての質問です
エクセルVBAのユーザーフォーム上のテキストボックスについての質問です。 Aのユーザーフォームの内容をBのユーザーフォームのテキストボックスへ引き継いで、Bのユーザーフォーム上で内容を編集するという仕組みにしたいのです。 Bのユーザーフォームは新規入力もかねたユーザーフォームなので、テキストボックスのイベントにAfterUpdateを使用して、テキストボックスの内容が書き換えられるとデータベースから検索して新規か既存か判断させています。 AのユーザーフォームからBのユーザーフォームのテキストボックスへ引継ぎさせるときにこのAfterUpdateを発生させたくないのですが、Application.EnableEvents=Falseなどを使ってもイベントが発生してしまいます。 また、イベントがどのタイミングで発生するかと、コードをステップで実行させると、このイベントは発生しません。そのために、いきづまってしまいました。 AのユーザーフォームからBに引き継ぐ処理 ユーザーフォームB.Load ---ユーザーフォームBのイニシャライズが実行される ユーザーフォームB.テキストボックス = ユーザーフォームA.テキストボックス ユーザーフォームB.Show ちょっと簡単に書きすぎですがこんな感じです。 コードをステップで実行するとユーザーフォームBのAfterUpdateは実行されません。(VBAエディタのバグ?) どなたか回答お願いします。
- ベストアンサー
- その他(プログラミング・開発)
- エクセル・VBAでテキストボックスに入力された文字を
エクセル・VBAでテキストボックスに入力された文字を B列から検索し、結果をユーザーフォームのリストbox に表示したいのですがうまくいきません 検索は部分一致・大文字小文字無視で行いたいです よろしくお願いします
- ベストアンサー
- オフィス系ソフト
お礼
親切丁寧な指導ありがとうございました。 初心者なので本当に助かりました。構文の内容を よく読んでチャレンジしてみたいと思います。 また機会がありましたら、ご指導お願い致します。
補足
ご回答ありがとうございます。 お手数ですが、内容の詳しい説明をお願い致します。 何しろ超初心者なので・・・。 お願い致します。