
ユーザーフォーム上でのVBAを教えて頂きたく思い、投稿致します。
現在、特定のセルをダブルクリックしユーザーフォームを呼び出し
指定範囲からデータを取得し、リストボックス上に表示させる。
Private Sub UserForm_Activate()
With Worksheets("データシート").Range("A1").CurrentRegion
Me.ListBox1.RowSource = .Resize(.Rows.Count - 1 _
).Offset(2, 0).Address(external:=True)
End With
End Sub
という物を利用し、フォーム上で決定された値を、特定セルに戻す
(入力する)という作業を行っているのですが、
フォーム上での数値決定を、あいまい検索かつ、リアルタイムに
変動するように出来ないでしょうか?
下記のような流れをイメージしております。
1.テキストボックスに検索内容を入力(対象は指定範囲)
2.入力された文字に応じて、リストボックスのデータを変動させる。
3.数値を決定しセルに反映。
2.のデータ変動ですが、以下のようなデータがあった場合、
1.AABBCC
2.AABCCD
3.AACCDD
入力値[AA] =1,2,3
入力値[AAB] =1,2
入力値[AABB]=1
という表示が、入力した瞬間に返ってくるような物は可能でしょうか?
2を色々調べたのですが、これだ!という物に出会えませんでしたので
ご教授お願い致します。
No.3ベストアンサー
- 回答日時:
ListBoxのRowSourceでは複数の領域を設定できないようです
やるなら Listプロパティをつかって設定といった方向でしょう
データ範囲のRangeオブジェクトのValueプロパティでシートのデータを取得
取得した配列をループしてテキストボックスに部分文字列があるか探索およびコレクションする
探索して出来上がったコレクションを ListBoxのListプロパティへ設定
といった手順でしょう
テキストボックスの Changeイベントで
dim ar(), dt()
dim n as integer, m as integer
with Range("A1").CurrentRegion
' シートから元データを取得
ar = .Resize( .rows.Count-1, 1).Offset(2,0).value
end with
Redim dt( UBound(ar) - 1 )
m = -1
for n = LBound( ar ), Ubound(ar)
' 部分文字列があるかを判定
if instr( ar(n,1), TextBox1.text then
m = m + 1
dt(m) = ar(n,1)
end if
next
if m = -1 then
' テキストボックスに入力があるが該当行がない場合
listBox1.RowSource = ""
ListBox1.Clear
exit sub
end if
' 見つかったデータをListBoxに設定する
redim ar(m,0)
for n = 0 to m
ar(n,0) = dt(n)
next
listBox1.rowsource = ""
ListBox1.List = ar
といった具合でしょう
この回答への補足
回答ありがとうございます。
上記の分で思った動作が出来ました!
ただ[Redim]など使った事のない関数が出てきましたので、
色々と検索し、自分なりにコメントを付けて処理を追いかけてみました。
(自分の提示した処理の範囲と、ar = 範囲 と変更してあります)
処理の認識等があってるかどうかを教えて頂けますでしょうか?
Private Sub TextBox1_Change()
Dim 範囲(), dt()
Dim n As Integer, m As Integer
'アクティブセル領域の取得
With Range("A1").CurrentRegion
' シートから元データを取得
範囲 = .Resize(.Rows.Count, 1).Value
End With
ReDim dt(UBound(範囲) - 1) '配列で検索した数値の数だけ変数を作成。上限-1(?)
m = -1 '検索値の個数判定
For n = LBound(範囲) To UBound(範囲) '範囲の下限から上限をループ
' 部分文字列があるかを判定
If InStr(範囲(n, 1), TextBox1.Text) Then 'n行の1列目をTextBox1の値で検索
m = m + 1
dt(m) = 範囲(n, 1) 'HITした行を変数に格納
End If
Next
If m = -1 Then
' テキストボックスに入力があるが該当行がない場合
ListBox1.RowSource = ""
ListBox1.Clear
Exit Sub
End If
不明なのは「ReDim dt(UBound(範囲) - 1)」の部分で、
「-1」はどういう役目があるのでしょうか?
最初に自分が記載したコードの
.Resize(.Rows.Count - 1).Offset(2, 0)
部分と同じ内容(こちらの処理に合わせて書いて頂いた)
という認識ですので、こちらも認識が間違っていればご指摘頂きたいです。
redfox63様のおかげで、試行錯誤の末、
望む物が完成しました!
また皆様のお力を借りる時があるかと思いますが、
その時はご教授下さい。
本当にありがとうございました。
No.2
- 回答日時:
才走った質問の書き方だが、順序だてて飛躍なしにかけないですか。
過度に記号化せず、現実の匂いを残した例がかけないか?
(1)第1ステップ
テキストボックスに
AA
AAB
AABB
などどれか1つを入れる。何種類ぐらいあるのか?
(2)第2ステップ
>入力された文字に応じて、リストボックスのデータを変動させる。
とは実際例ではどうなるのか。
AAであればあれとこれとト言う風に決まっているのですか?
それはセル範囲にあるのか、配列などで持つのか。ファイルなどもありえると思うが。
ここでリストボックスにデータをセットするということは、素の中かrら選択させるのか。且つマルチセレクト?
ここが1対1対応ならば、結果も数種に決まるように思うが
AA-->関数関係で決定ーー>AABBCCーー>都度選択ーー>選択されたら
AAを含むことは判っているーー>1,2,3のどこかへ入ることは確実。AABBCCがBBBBBなら、含まれないから番号に上がらないことは確実。
(3)第3ステップ
選択したリストの中にAAなど文字列を含むものの順序番号をセルに書き出すのか?ここをもう少し意味のある語句で公開できないのか。
あいまい検索など大きい言葉を使っているが、その語句が含まれておれば、その番号(何を意味するのかわからないが)をセルに、ペアとして書き出すらしいが、すっきり判らない。
この回答への補足
説明のしかたがわかりにくくて申し訳ありません。
フォームの概要としましては、以下の内容となります。
1.テキストボックス1 = 検索値を入力
2.リストボックス1(?)= 検索結果を表示
3.テキストボックス2 = リストボックスで選択された数値を表示
4.コマンドボタン1 = テキストボックス2で選択された数値をセルに代入
(1)第1ステップ
検索値となりますので、値は可変です。
商品名を検索する時もあれば、メーカー名を検索する時ありますので
何種類くらい?というのは断定できません。
(2)第2ステップ
検索対象はセルで範囲はA1セル~A500セルと仮定します。
A1:おおさか
A2:おおいた
A3:おかやま
のデータが検索対象に入力されている場合、
テキストボックス1にデータを入力している最中に
リストボックス1のデータを変動させたいのです。
テキストボックス1= リストボックス1の表示
「お」= おおさか,おおいた,おかやま
「おお」= おおさか,おおいた
「おおさ」= おおさか
「おおさじ」=表示無し
検索されたリストが複数の場合もありますので、その中から任意の
一つを選択肢、セルに反映させるイメージです。
(3)第3ステップ
範囲内の検索値を含むセルをリストボックスにリストアップする。
という内容です。前回は【AABBCC=1】と番号は省略した為
わかり難くなってしまい大変申し訳ありません。
こちらの説明で伝わるでしょうか?説明下手で本当にすいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA ドロップダウンリストを残して値のみクリア 2 2022/10/27 05:42
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
VBA:日付を配列に入れ別セルに...
-
Excelで空白セル直前のセルデー...
-
【Excel VBA】マクロで書き込ん...
-
【VBA】【ユーザーフォーム_Lis...
-
CSVファイルを読み込んだらセル...
-
C# DataGridViewで複数選択した...
-
CellEnterイベント仕様について
-
エクセル、マクロで番号を読込...
-
EXCEL VBA 文中の書式ごと複写...
-
エクセル VBA ボタンをクリック...
-
【ExcelVBA】値を変更しながら...
-
Excel 範囲指定スクショについ...
-
データのある範囲を選択するVBA...
-
【VBA】写真の貼り付けコードが...
-
文字数に応じてfont-sizeを自動...
-
DataGridViewでグリッド内に線...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
特定の色のついたセルを削除
-
【Excel VBA】一番右端セルまで...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
VBA:日付を配列に入れ別セルに...
-
C# DataGridViewで複数選択した...
-
Excel UserForm の表示位置
-
入力規則のリスト選択
-
Excel 範囲指定スクショについ...
-
エクセル、マクロで番号を読込...
-
DataGridViewでグリッド内に線...
-
Excel VBAで特定の範囲の空白セ...
-
CellEnterイベント仕様について
-
Excel VBAでCheckboxの名前を変...
-
【ExcelVBA】値を変更しながら...
-
データグリッドビューの結合セ...
-
下記のマクロの説明(意味)を...
おすすめ情報