ユーザーフォーム上での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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
エクセル・マクロ シートの非表示でマクロのエラー
Visual Basic(VBA)
-
-
4
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
5
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
6
エクセルVBA「リストボックスで選択した値をテキストボックスで変更してシート上セルに反映したい」
Excel(エクセル)
-
7
ユーザーフォーム、コンボボックスで重複せず選択リストを表示させるには
Excel(エクセル)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
10
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
Excel VBAでCheckboxの名前を変...
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
EXCEL VBA 文中の書式ごと複写...
-
【ExcelVBA】値を変更しながら...
-
【VBA】【ユーザーフォーム_Lis...
-
Excelで空白セル直前のセルデー...
-
入力規則のリスト選択
-
ListBoxを選択したデータ編集② ...
-
C# DataGridViewで複数選択した...
-
飛び地セルの空白判定
-
DataGridViewのフォーカス遷移...
-
特定の色のついたセルを削除
-
CellEnterイベント仕様について
-
Excel VBA 同じ処理を複数回行...
-
【VBA】写真の貼り付けコードが...
-
VBA 複数条件の分岐処理の上手...
-
下記のマクロの説明(意味)を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
C# DataGridViewで複数選択した...
-
入力規則のリスト選択
-
Excel VBA IF文がうまく動作し...
-
【VBA】写真の貼り付けコードが...
-
Excel 範囲指定スクショについ...
-
EXCEL VBA 文中の書式ごと複写...
-
Excel VBAでCheckboxの名前を変...
-
EXCEL 2010 VBAでピボットで複...
-
飛び地セルの空白判定
-
エクセルのカーソルを非表示に...
-
CellEnterイベント仕様について
おすすめ情報