
いつもお世話になっております
下記の部分を複数選択したいのですが
どうしたよろしいでしょうか
If r.Value = ListBox1.List(ListBox1.ListIndex) Then
A列 担当
B列 名前
C列 性別
Private Sub UserForm_initialize()
With ListBox1
.AddItem "工藤"
.AddItem "加藤"
.AddItem "遠藤"
.AddItem "佐藤"
.Font.Size = 14
.MultiSelect = fmMultiSelectMulti
End With
End Sub
Private Sub CommandButton1_Click()
Dim dic As Object
Dim r As Range, rr As Range
Dim key1, key2, i As Integer
Set dic = CreateObject("Scripting.Dictionary")
For Each r In Range("A2", Cells(Rows.Count, "A").End(xlUp))
If r.Value = ListBox1.List(ListBox1.ListIndex) Then
If Not dic.exists(r.Value) Then dic.Add r.Value, _
CreateObject("Scripting.Dictionary")
If Not dic(r.Value).exists(r.Offset(, 1).Value) Then _
dic(r.Value).Add r.Offset(, 1).Value, _
CreateObject("System.Collections.ArrayList")
dic(r.Value)(r.Offset(, 1).Value).Add (r.Offset(, 2).Value)
End If
Next
Set rr = Range("F2")
Range("F:H").Clear
For Each key1 In dic.keys
rr.Value = key1
For Each key2 In dic(key1).keys
Set rr = rr.Offset(1)
rr.Offset(, 1).Value = key2
Set rr = rr.Offset(1)
For i = 0 To dic(key1)(key2).Count - 1
rr.Offset(i, 2).Value = dic(key1)(key2)(i)
Next
Set rr = rr.Offset(dic(key1)(key2).Count - 1)
Next
Set rr = rr.Offset(1)
Next
Set dic = Nothing
End Sub
No.6ベストアンサー
- 回答日時:
取り敢えず形にはなっているでしょうか?
Dim dic1 As Object
Private Sub UserForm_Initialize()
Dim r As Range
Dim st As String
With ListBox1
.AddItem "工藤"
.AddItem "加藤"
.AddItem "遠藤"
.AddItem "佐藤"
.Font.Size = 14
.MultiSelect = fmMultiSelectMulti
End With
Set dic1 = CreateObject("Scripting.Dictionary")
For Each r In Range("A2", Cells(Rows.Count, "A").End(xlUp))
With Application
st = Join(.Index(r.Resize(, 2).Value, 1, 0), "_")
If Not dic1.Exists(st) Then dic1.Add st, .Index(r.Range("B1:D1").Value, 1, 0)
End With
Next
End Sub
Private Sub CommandButton1_Click()
Dim key As Variant
Dim rf As Range
Dim i As Long
Dim v As Variant
Set rf = Range("F2")
Range("F:H").Clear
For i = 0 To ListBox1.ListCount - 1
For Each key In dic1.Keys
If ListBox1.Selected(i) = True Then
If key Like ListBox1.List(i) & "*" Then
v = dic1(key)
rf.Resize(, 3).Value = v
Set rf = rf.Offset(1)
End If
End If
Next
Next
End Sub
No.5
- 回答日時:
まずA列の重複と言うのは、担当:お客様が1:1なのか1:多なのかを確認したかったのです。
それにより出力される件数は 選択した数 or 担当しているお客様数 と行数が変わりますので。
ダミーデータを提示されるならその辺を気にされた方が宜しいかも。
あと担当者が入れ替わりなど多い場合なら、どこか空いている列に一覧を作成し
RowSourceプロパティ
http://officetanaka.net/excel/vba/tips/tips139.htm
を用いるのと後々管理は楽かなと。
本題についてはちょっとお時間を。
No.4
- 回答日時:
No.3 です。
お礼の内容からすると解決したと言う事であれば、その旨記載して欲しいです。
A列に重複がなければDictionaryオブジェクトは不要でしょうし、仮にあるのならそのItemにDictionaryオブジェクトは不要でしょう。
ただB列に重複があるか否か次第ですけど。
No.3
- 回答日時:
ListBoxの担当者が抱える?顧客名一覧を書き出したいとかでしょうかね。
取り敢えずユーザーフォームを表示している間はデータの書き換えや追加・削除がなければ、dicへの登録はUserForm_initialize()イベントで行ないdicの宣言はプロシージャー外で行った方が見やすそうに感じます。
⇒書き換える必要があるならスル~で。
若しくはデータが多いとかでしょうか?
Dim dic As Object 'イベントの前に書いておく
Private Sub UserForm_initialize()
・・・・
>例えば 担当 工藤 加藤 選択したら
>その、担当の 名前 性別 血液型を
担当者名はなくても宜しいのでしょうか?
また名前が重複(同じ担当者で)するようなデータ構築されているのですか?
No.2
- 回答日時:
For Each r In Range("A2", Cells(Rows.Count, "A").End(xlUp))
If r.Value = ListBox1.List(ListBox1.ListIndex) Then
エクセルのVBAは使ったことがないので、的を射ていない質問かもしれませんが、上記の行では何をしたいのでしょうか?
・範囲を指定して、それぞれのセルの値がリストボックスで選ばれたもののいずれかと合致している場合以下の処理をする
(以下の処理)
・一度dic という配列に突っ込み
・セルF2に表示させる
というようなことでしたら、ループを二重にしないと、それぞれのセルの値ということにはなりません。
例えばの話、
A B C
佐藤 阿部 男
佐藤 井口 女
加藤 伊藤 女
遠藤 宇野 男
佐藤 江口 女
藤本 小野 男
工藤 加賀 男
佐藤 木村 女
のように入っていて、リストボックスで 佐藤、工藤 を選択したら、F2に何を表示させたいのですか?
No.1
- 回答日時:
コード読んでいないけど、、、
リストボックスのmultiselect の使い方はこんな感じかな?
http://officetanaka.net/excel/vba/tips/tips144.htm
ぶっちゃけ、選択されたリストをどのように使いたいのかな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シートごとに 個数と集計 2 2021/10/25 22:00
- Visual Basic(VBA) 超難 日付に対するクロス集計 7 2021/12/06 20:56
- Visual Basic(VBA) ListBox1をClickしたときのイベント 5 2022/12/11 19:45
- Visual Basic(VBA) ワークシートチェンジ 1 2022/02/01 11:19
- Visual Basic(VBA) ワークシートごとに計算結果 2 2022/04/30 22:00
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) vba 特定シートを一つにまとめる 3 2021/10/20 14:59
- Visual Basic(VBA) リストポックスへの抽出方法 1 2022/08/10 17:58
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) VBA Find でオートメーションエラー(エラー440)が出ました 1 2021/11/09 21:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数に格納された文字列でdefin...
-
先頭0で重複のない配列を作りたい
-
PHPの配列の出力について
-
不要な配列を消したい
-
規則性があるテキストをグルー...
-
2つの配列/キーが一致する際、...
-
配列の順番により別の配列を並...
-
関数をの引数について。
-
配列から順位を算出したい
-
pythonで辞書データへのアクセ...
-
配列の重複チェック
-
phpで$a,$b,を%指定して表示さ...
-
PHPで、'=>'の意味が分かりませ...
-
配列の表示について
-
多次元配列の中で条件に合う要...
-
配列を利用して表示されるテー...
-
MySQL接続・カテゴリわけ
-
すべての変数の値をリセットする
-
データベースに削除機能を追加...
-
PHP ファイル読み取りについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マッチング処理(1:N)
-
Excel VBAでフィルター後の対象...
-
foreachで上限回数指定方法また...
-
3つの連想配列を交互に代入し...
-
Smartyでインクリメント
-
sqlのデーターを『あ行』『か行...
-
POSTで渡されるデータの数がわ...
-
foerachの中でキーを足したり、...
-
foreachで配列を、左から縦3列...
-
foreachの間にテーブルの<TR>を...
-
リストボックス複数選択抽出方法
-
textより$$にはさまれた文字列...
-
判定の仕方
-
プログラムの改良
-
forを使わずにforeach文のみで...
-
元号の表示
-
Mac トロイの木馬”Flashback"に...
-
pdfファイルの複数添付 引数の型
-
Delphi XEの警告文を消したい
-
Arduino 全部のピンをチェック...
おすすめ情報
返信遅れてすみません。
担当を複数選択して抽出したいのですが、
For i = 0 To ListBox1.ListCount - 1
If r.Value = ListBox1.Selected(i) Then
に修正しましたが、エラーにはなりませんでしたが、
なにも 表示されませんでした
おしえてくれませんでしょうか
すみません。説明不足でした
A列 B列 C列 D列
担当 名前 性別 血液型
工藤 根岸 育雄 男 A
加藤 小田 都義 女 A
遠藤 高松 友良 男 A
佐藤 村瀬 一樹 女 A
リストボックス1に表示されているのが
A列の担当
例えば 担当 工藤 加藤 選択したら
その、担当の 名前 性別 血液型を
表示させたいです。
autofiter ではなく。
すみません 解決していません。
A列に重複がなければ ではなく
単純に 工藤 加藤 が選択されたら
工藤 加藤の
名前(お客様) 性別 血液型
をすべて 表示させたいだけです、。
担当:お客様が1:1なのか1:多なのか
提示したデータはお客様が1:1となっていますが、
1:多です
すみませんでした