
いつもお世話になっております
下記のコードは
ListBox1をClickしたときに
ListBox2に担当のお客様が表示されるというものです。
ここでListBox1をマルチセレクトしたときに
ListBox2に表示させることは可能でしょうか
添付ファイルを2回に分けます。
わかる方おしえてくれませんでしょうか
無理なのでしょうか。
よろしくお願いいたします。
Private Sub ListBox1_Click()
Dim dic As Object
Set dic = CreateObject("Scripting.dictionary")
ListBox2.Clear
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(i, "H").Value = ListBox1.List(ListBox1.ListIndex) Then
If Not dic.Exists(Cells(i, "H").Value) Then
With ListBox2
.AddItem ""
.List(.ListCount - 1, 0) = Cells(i, 3).Value
End With
End If
End If
Next
Set dic = Nothing
End Sub
Private Sub UserForm_initialize()
With ListBox1
.AddItem "近藤"
.AddItem "工藤"
.AddItem "遠藤"
.AddItem "加藤"
End With
End Sub

No.2ベストアンサー
- 回答日時:
clickイベントはマルチセレクトの場合、発生しないので
Private Sub ListBox1_Click()を
Private Sub ListBox1_Change() に変えます。
以下のようにようにしてください。
不明点があれば、補足してください。
----------------------------------------------------
Private Sub ListBox1_Change()
Dim dic As Object
Dim i As Long
Set dic = CreateObject("Scripting.dictionary")
ListBox2.Clear
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
dic(ListBox1.List(i)) = True
End If
Next
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If dic(Cells(i, "H").Value) = True Then
With ListBox2
.AddItem ""
.List(.ListCount - 1, 0) = Cells(i, 3).Value
End With
End If
Next
Set dic = Nothing
End Sub
No.5
- 回答日時:
こんばんは
dictionaryのロジックはすでに指摘されている通り
UserForm_initializeで実行した方が理に適っています
担当者別データ(担当者リスト)が欲しく、重複担当者の値が有る列対象なのでListBox1.AddItem(作成時)が理想かと
.AddItem "近藤" などとするなら dicの使用意図がわからないです
選択されている値は一意ですよね・・(一意でないと困りけれど)
あと
ListBox1.MultiSelect = fmMultiSelectMulti も忘れずに・・
これも指摘されていますね
Private Sub ListBox1_Click()についてはMultiSelectにするとClickイベントが上手く動かないので Private Sub ListBox1_Change() にします
ListBox1_Changeの内容ですが
先ず ListBox2.Clear
ListBox1が選択されている値を使うのでListBox1リストをループ
ListBox1.Selected(インデックス) = True で
選択されているかを判断して選択されていれば
シートの対応する範囲をループ処理をして
ListBox1.Selected(インデックス)=Hセル ならば
ListBox2.List(j, 0) にListBox1.Selected(インデックス)の値
n = n + 1 ()ヒットごとに
ListBox2.List(j, n) = 該当Cセルテキスト
jはSelected(インデックス) = True ごとに j = j + 1
ListBox2.ColumnCountの設定は少し工夫が必要かな・・
コードを書いた方が判り易いと思いますが・・
取り合えず、、下手な日本語で書いて見ましたがめどは立ちますでしょうか
不明な点は追記してください‥Unique関数って使えますか?
すぐに閉じると間違い訂正や回答しようとしている場合に出来ない場合があります
No.4
- 回答日時:
No.3 です。
訂正。
>ListBox1を弄るたびにdicを組み替えるのは確かにデータ数が多ければ有利かもですけど、
ListBox1を弄るたびにdicを組み替えるのは確かにデータ数が少なければ有利かもですけど、
でした。
選択する項目のON・OFFの度にイベント発生しませんでしたっけ。
それなら選択後にCommandButtonを使う等の方が良いかなと。
今回とは逆にListBox2をクリックし、呼び込みをするって案もありそう。
No.3
- 回答日時:
個人的には、
Private Sub UserForm_initialize()
にてdicに担当をkey・名前セルをitemとして格納する。
その後keysを基にListBox1.AddItem~を追加作成。
あとはListBox1で選択された値を基にListBox2にdic("担当者名")のitemを吐き出す。
とかかな?
ListBox1を弄るたびにdicを組み替えるのは確かにデータ数が多ければ有利かもですけど、吐き出す回数が多いなら先に入れてしまうって方法は以前回答したと思いましたけど、近年回答してもスル~でしたので眺めるだけにしてました。
でも、
With ListBox2
.AddItem ""
.List(.ListCount - 1, 0) = Cells(i, 3).Value
End With
これって複数列を入れるって事の前段階な気もしちゃいますけど。
itemには複数のデータを格納できますって回答しようとして切られちゃったからかな?
key:item = 1:1に限らず(= 1:多 ですよ)。
No.1
- 回答日時:
元々得たい結果が不明ですが、1担当につき1顧客で宜しいのですかね?
>If Not dic.Exists(Cells(i, "H").Value) Then
にしては変数:dicは使われていないのに、存在の有無を判定してますけど?
マルチセレクトの場合、全てのリストを調べ選択されているかどうかを比較し処理判断する必要があるのでは?
2~3年前にそんな質問上げてませんでしたっけ?(当時のIDは違いましたけど)。
うろ覚えなので勘違いならすいません。
https://kosapi.com/post-4040/
選択されてたらその値でH列にフィルタをかけて、可視されている顧客名を順に取得するとか?
これは近年見かけたような気もします。
別の質問で別の回答者が仰ってたと思いましたが、既に作成できるスキルはあると思うのですが何をどう使うかって点は、そのやりたい事を検索してみるとヒントは見つかるかなと。
あとは過去の質疑の回答と照らし合わせ応用していく。
単に回答を得て動いたら質問を閉じるってやり方では、伸びないと思いますよ。
と、この時間は寝ぼけているので回答がメチャクチャかもしれませんけど。
まぁ指がメチャクチャに潰れるよりは良いですが?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
電子書籍プレゼントキャンペーン!
最大2万円超分当たる!マンガや小説が読める電子書籍サービス『Renta!』で利用できるギフトコードプレゼント実施中!
-
ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています
Visual Basic(VBA)
-
VBA コードの意味を教えて下さい。
Visual Basic(VBA)
-
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
4
vbaの計算 if elseと範囲について
Visual Basic(VBA)
-
5
Excel VBAのデバッグ
Visual Basic(VBA)
-
6
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
7
順列をランダムに発生するプログラム
Visual Basic(VBA)
-
8
VBAプログラミング
Visual Basic(VBA)
-
9
【VBAエラー】Nextに対するForがありません 対策について
Visual Basic(VBA)
-
10
VBA同じシートの別ブックに転記していく方法
Visual Basic(VBA)
-
11
日付を重複させずに数えたい
Visual Basic(VBA)
-
12
[Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。
Visual Basic(VBA)
-
13
エクセル 2つの列にある値の完全一致を抜き出すVBA
Visual Basic(VBA)
-
14
【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。
Visual Basic(VBA)
-
15
Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、
Visual Basic(VBA)
-
16
ExcelのVBAでシフト表を作っていますが、バグが出て困っています
Visual Basic(VBA)
-
17
vb.net どうしてイコールにならないのでしょうか
Visual Basic(VBA)
-
18
初めてマクロを入力しますが、テキストとおりに入力したのに構文エラーです。修正を教えてください。
Visual Basic(VBA)
-
19
VBAリストボックスで選択した後
Visual Basic(VBA)
-
20
Excel VBAでAA(BBB) → BBB.AA に置換したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
Excel VBAでフォルダ内の全テキ...
-
5
XMLでデータとして画像を指定す...
-
6
ExcelVBAで戻り値を返すには
-
7
VBAでアクセスDBからデータの取...
-
8
エクセルデータをVBで検索でき...
-
9
java / jsp selectedについて
-
10
Excel VBAで1週間毎にカテゴリ...
-
11
VBA ファイルの内容を並べ替え...
-
12
AccessVBAでのExcelメモリ解放
-
13
アクセスでウェブ上のデータを...
-
14
【C#】textBoxの指定行のデータ...
-
15
階層別の組織図の自動作成について
-
16
Excel VBA で日付を4ケタの数値...
-
17
エクセルのセル最終行取得
-
18
エクセルVBA WEBからデータ取...
-
19
矩形グラフ(オシロやロジアナ...
-
20
エクセルのCSV読み込みについて
おすすめ情報
公式facebook
公式twitter
添付はデータの表です。
よろしくお願いいたします。
下記の部分のところなんとかすれば
いけるのかもしれないのですが
If Cells(i, "H").Value = ListBox1.List(ListBox1.ListIndex) Then