![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.7ベストアンサー
- 回答日時:
またまた登場、myRangeです。
補足要求6に返答がありませんので次のようなことを推測してみました。
-------------------------------------------------------------
●取引先マスター●(取引先番号なし)
___A______B______C__
1_______取引先名____店番号__
2_____ブランドA渋谷店__111__
3_____ブランドA青山店__222__
4_____ブランドB渋谷店__111__
5_____ブランドB青山店__222__
6_____ブランドB銀座店__333__
上記は、
最初の質問と補足の表のレイアウトが違うので
また、取引先名と店番号の関係が分かりませんので
補足の表を参考にして、
取引先名をユニークに、店番号はダブリあり、にしてます。
こういう感じであれば先の回答を少し変えればできます。
以下は、検索画面シートのシートモジュールに書くこと。
'------- 検索画面がアクティブになったとき、
'------- ComboBox2をセット
Private Sub Worksheet_Activate()
Dim myDic
Dim R As Long
Set myDic = CreateObject("Scripting.Dictionary")
For R = 2 To Sheets("取引先マスタ").Cells(Rows.Count, "C").End(xlUp).Row
If myDic.exists(Sheets("取引先マスタ").Cells(R, "C").Value) = False Then
myDic.Add Sheets("取引先マスタ").Cells(R, "C").Value, ""
End If
Next R
ComboBox2.List = myDic.keys
ComboBox1.Clear
End Sub
'-----、Combox2 の選択で、ComboBox1を絞り込む
Private Sub ComboBox2_Change()
Dim R As Long
ComboBox1.Clear
For R = 2 To Sheets("取引先マスタ").Cells(Rows.Count, "C").End(xlUp).Row
If Sheets("取引先マスタ").Cells(R, "C").Value = Val(ComboBox2.Value) Then
ComboBox1.AddItem Sheets("取引先マスタ").Cells(R, "B").Value
End If
Next R
End Sub
'-------------------------------------------------------
おそらくこれで望みどおりかと。。
●上記は、検索画面がアクティブになった時にComboBox2に項目をセットしてますので、
ComboBox2に項目をセットするタイミングは適宜変更のこと。
以上です。
返信遅くなりましてすみません。
まさにそのとおりです。
myRangeのおかげで理想どおりの動作を実現することができました。
この度はわかりにくい質問、補足でご迷惑おかけしました。
次回から気をつけたいと思います。
本当にありがとうございました。
No.6
- 回答日時:
回答1への補足と少し(しかし最重要)違っているようなので再度補足が必要です。
----------------------------------------------------
●回答1への補足
取引先| 取引先名 | 店
10000 | ブランドA 渋谷店| 01
10001 | ブランドA 池袋店| 01
10001 | ブランドB 池袋店| 02
この表を提示して、
>ComboBox1のListfillRangeに設定して【取引先名】を表示させています
>やりたいことは別のComboBox2を作成してそこに【取引先】だけを表示させて
>"10001"を選択したらComboBox1に池袋店の2つが絞り込み表示させるということです
との説明なので
ComboBox1は、取引先名
ComboBox2は、取引先(正確には"取引先番号"と推測しますが)
となります。
--------------------------------------------
●今度の補足
>レコードセットデータは【取引マスタ】シートにあります。
>B列に取引先名があり、C列に店番号があります
>ComboBox1には取引先名を表示させ、
>ComboBox2には店番号が表示させるようにしたいです。
との説明なので
ComboBox1は、取引先名
ComboBox2は、店番号
となります。
--------------------------------------------------------
■■疑問点■■
(1)回答1の補足の表にある、取引先(番号)が今度の説明にはない
(2)回答1の補足説明と今度の説明では、ComboBox2にセットする項目が違う
■■更に確認点■■
(1)データの中での、取引先名、店番号、どちらもユーニークか?
(2)取引先(番号)があるとするとそれは、ユニークか?
最初に提示された、表からすると、取引先(番号)、取引先名、店番号ともユニークでないようだが、、
----------------------------------------------------
▲▲投稿に関する要望点▲▲
補足を投稿する前には、矛盾がないか何度も読み返してから投稿願います。
そうでないと何回も遣り取りをしなければならなくなるので。。
次回の回答で是非解決にしたいと思います。
以上です。
No.5
- 回答日時:
>本当に何度もすみません
いえいえ、何も気にする必要はありませぬよ。
で、本題。
>【取引先マスタ】sheetと【検索画面】sheetが分かれているのですが
当方の見落としかな、と思い、
質問、補足に再度目を通してみましたが
【検索画面】という文言が出てきたのは今度が初めてですね。
ですから、当然ながら当方の回答は
抽出されたデータもCombobox1,2も【取引先マスタ】にあるものだ、
との前提になってます。
前提が崩れてますので、分かっていることもそうでないことも含めて
イチから明確にした方がいいでしょう。
(1)データはどのシートにあるのか
(2)そのデータはどのセルから始まっているか
(3)ComboBox1、2、はどのシートにあるのか
(4)検索画面シートのレイアウトはどうなってるか
また、出来れば次の回答で解決を図りたいと思いますので
上記の補足は詳しくお願いします。
以上です。
この回答への補足
ありがとうございます。
自分の説明不足でした。
>(1)データはどのシートにあるのか
レコードセットデータは【取引マスタ】シートにあります。
ここには取引先名、店番号フィールドがあります。
完全にテーブル用のシートでそれ以外なにもありません
>(2)そのデータはどのセルから始まっているか
Range"B2"から下に1400件ほどあります。
B列に取引先名があり、C列に店番号があります。D列にもデータはあるのですが重複データが多すぎて検索には使えなそうです。
>(3)ComboBox1、2、はどのシートにあるのか
ComboBox1などコントロール類はすべて【検索画面】シートにあります。
>(4)検索画面シートのレイアウトはどうなってるか
レイアウトですが、日付を指定するテキストボックスが一番上にあり、
ComboBox1がその下にあります。
ComboBox1には取引先名を表示させ、
その下のComboBox2には店番号が表示させるようにしたいです。
ComboBox2から任意の店番号を選択するとComboBox1にその番号に対応した取引先名を絞り込むようにさせたいです。
最終的には日付と指定した取引先名をSQLのWHERE条件にして、
その日にその取引先で売り上げた明細を別ブックに出力するプログラムです。この出力する部分は完成しています。
よろしくおねがいいたします。
No.4
- 回答日時:
回答2の補足に以下のようにありますね。
----------------------------------------------
>上記のコードでmyRecに格納した。
>レコードをWorksheets("取引先マスタ")にコピーすると、
取引先| 取引先名 | 店
10000 | ブランドA 渋谷店| 01
10001 | ブランドA 池袋店| 01
10001 | ブランドB 池袋店| 02
10002 | ブランドA 目黒店| 01
>という形で表示されます。
>それをComboBox1のListfillRangeに設定して
>【取引先名】を表示させています。
>やりたいことは別のComboBox2を作成してそこに
>【取引先】だけを表示させて"10001"を選択したら
>ComboBox1に池袋店の2つが絞り込み表示させるということです
-----------------------------------------------
この説明から、
シート「取引マスタ」に取り込んだデータを
Combobox1,2に、必要項目だけ表示させ
ComboBox2の選択項目により、Combobox1を絞り込みたい
で、Comboboxへのセットの仕方などを知りたい
と、受け取りました。
●で、シート取引マスタにデータが表示された状態から
Combobox1,2への処理の回答をしました。
が、エラーが出るということなので
質問者のコードを見直したところ
質問者のコードがCombox2のChangeイベントに書いてあることに気づきました。
なぜ、そこに、ADODBのコードがあるのでしょうか?
意味不明です。
ComBox2のChangeイベントには当方が回答したように
Combobox1への絞込み処理のコード【のみ】必要なはずです。
●何度も言うようですが、
当方の回答は、シート「取引マスタ」に取り込まれたデータを
Combobox1,2にそれをセット&処理するコードです。
そこらをも少し明確に説明したらどうでしょう。
その前に試しに、
シート「取引マスタ」にデータが■表示されてる状態■で
例えば、CommandButtonのクリックで、
Combobox1,2に項目をセットし、
Combobox2のChangeイベントでCombobox1を絞り込む
というふうにしてみてください。
------ CommandButton1 のクリックで
Combobox1,2の初期項目をセットする --------
Private Sub CommandButton1_Click()
Dim myDic
Dim R As Long
Set myDic = CreateObject("Scripting.Dictionary")
For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If myDic.exists(Cells(R, "A").Value) = False Then
myDic.Add Cells(R, "A").Value, ""
End If
Next R
ComboBox2.List = myDic.keys
ComboBox1.ColumnCount = 2
ComboBox1.List = Range("B2", Cells(Rows.Count, "C").End(xlUp)).Value
End Sub
'-----、Combox2 Changeイベント ---------------
Private Sub ComboBox2_Change()
Dim R As Long
ComboBox1.Clear
For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(R, "A").Value = Val(ComboBox2.Value) Then
ComboBox1.AddItem Cells(R, "B").Value
ComboBox1.List(ComboBox1.ListCount - 1, 1) = Cells(R, "C").Value
End If
Next R
End Sub
'-------------------------------------------------------
●●Combobox1は、取引先名と店番号の2列表示に変更しました。
以上です。
この回答への補足
ご回答ありがとうございます。
言われたとおりにやってみましたが、
【取引先マスタ】sheetと【検索画面】sheetが分かれているのですが、
コンボボックスをみると検索画面のA,B列を持ってきてるみたいです。
WorkSheetsオブジェクトを付け足したりしてみましたがうまくいきません。できればアドバイスお願いします。
本当に何度もすみません。
No.3
- 回答日時:
>ComboBox1のListfillRangeに設定して、【取引先名】を表示させています
●●ListFillRangeでは拙いので、ListFillRangeはセットしないこと!!
使用列 : A、B,C列
項_目 : 1行目
データ ; 2行目~~
>Worksheets("取引先マスタ").Range("B2").CopyFromRecordset data:=myRec
の次に下記、初期項目セットコードを追加する
------ Combobox1,2の初期項目をセットする部分 --------
Dim myDic
Dim R As Long
Set myDic = CreateObject("Scripting.Dictionary")
For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If myDic.exists(Cells(R, "A").Value) = False Then
myDic.Add Cells(R, "A").Value, ""
End If
Next R
ComboBox2.List = myDic.keys
ComboBox1.List = Range("B2", Cells(Rows.Count, "B").End(xlUp)).Value
'-----ここからは、Combox2 を選択する部分 ------------------
Private Sub ComboBox2_Change()
Dim R As Long
ComboBox1.Clear
For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(R, "A").Value = Val(ComboBox2.Value) Then
ComboBox1.AddItem Cells(R, "B").Value
End If
Next R
End Sub
'-------------------------------------------------------
これで
Combobox2の取引先番号を選択すると
Combobox1の取引先名が絞り込まれます。
以上です。
この回答への補足
ご回答ありがとうございます。
教えいただいたとおりにやってみましたが、
初期設定の >ComboBox1.List = Range("B2", Cells(Rows.Count, "B").End(xlUp)).Value
の部分で、「不正なプロパティ配列インデックスです。」
とエラーメッセージが出ます。
原因はなにが考えられるでしょうか?
No.2
- 回答日時:
>レコードセット
で何が言いたいのか。難しい語句を使うときは、注意して。
(1)CSVファイル。
(2)AccessのMDBファイル。
(3)エクセルのシートのセル範囲のこと。(レコードセットとは余りいわないようだが)
(4)その他
それによってできるスキル(回答)が変わる。それを書かないで質問するとは。
もちろんそれらを含めて・総称して、データセットなどという概念もあるが。
>別のコンボボックスで表示されるようにしたいのですが
またそれらの中から検索するのか?
それでは質問の例示が悪いではないか。
渋谷店 01
渋谷ー>01で終わりではないか?
表示用にはコンボはあまり使わないようだが。
ーー
(1)データの検索のコードがわからない。
(2)フォームなりのコントロールのイベントで連動させるコードがわからない
のどちらか?
この回答への補足
Private Sub ComboBox2_Change()
Dim myConn As New ADODB.Connection
Dim myRec As New ADODB.Recordset
Dim myCmd As New ADODB.Command
Dim strSQL As String
Dim intComInx As Integer
Dim strComLst As String
strSQL = strSQL & "SELECT"
strSQL = strSQL & " TM.取引先名 "
strSQL = strSQL & ",TM.取引先 "
strSQL = strSQL & ",TM.店 "
strSQL = strSQL & "FROM "
strSQL = strSQL & "V21.取引先RM TM "
strSQL = strSQL & "INNER JOIN V21.出荷先RM SM "
strSQL = strSQL & "ON "
strSQL = strSQL & "TM.取引先 = SM.出荷先 "
strSQL = strSQL & "AND TM.店 = SM.出荷先店 "
strSQL = strSQL & "AND TM.法人 = SM.法人 "
With myConn
.ConnectionString = _
"Provider=**********;Data Source=***;User Id=*****;Password=********"
.Open
End With
' オブジェクトのインスタンス化
Set myCmd.ActiveConnection = myConn
Set myRec.ActiveConnection = myConn
' コマンドテキストの設定
With myCmd
.CommandText = strSQL
.CommandType = adCmdText
.Execute
End With
intComInx = ComboBox1.ListIndex
strComLst = ComboBox1.List(intComInx)
myRec.Open strSQL, myConn, , adLockReadOnly, 1
myRec.Find
Worksheets("取引先マスタ").Range("B2").CopyFromRecordset data:=myRec
すみません。質問が雑になっていました。
補足しますと、上記のコードでmyRecに格納した。
レコードをWorksheets("取引先マスタ")にコピーすると、
取引先| 取引先名 | 店
10000 | ブランドA 渋谷店| 01
10001 | ブランドA 池袋店| 01
10001 | ブランドB 池袋店| 02
10002 | ブランドA 目黒店| 01
・
・
・
という形で表示されます。
それをComboBox1のListfillRangeに設定して、【取引先名】を表示させています。やりたいことは別のComboBox2を作成してそこに【取引先】だけを表示させて"10001"を選択したらComboBox1に池袋店の2つが絞り込み表示させるということです。これは可能なのでしょうか?
理想は【取引先名】を選択すると【取引先】と【店】が連動して表示させることです。それと【取引先名】はユニークで【取引先】と【店】の組み合わせで設定しています。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- スーパー・コンビニ テレビで見た大阪の格安店を探しています 1 2023/05/27 21:26
- その他(メールソフト・メールサービス) グーグル検索の順位 3 2022/11/03 01:15
- Google Maps Google Maps にお店の名前を表示する方法は? 2 2022/12/26 16:21
- 飲食店・レストラン 新宿、池袋、大宮、渋谷でリーズナブルなイタリアンか中華の店でおすすめ教えてください。 ランチの予定で 1 2023/04/17 20:42
- フランス語 フランス語で店名を付けたいです。 1 2022/07/09 16:54
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Q&Aの掲示板を作成していてヤフ...
-
長さ0の文字列を格納できません...
-
VB SQL-Serverとは
-
Webページに株価を表示させるに...
-
エクセルvbaかアクセスのvbaで...
-
アクセスについて
-
formで送信したPOSTデータの削...
-
JPドメイン以外でEUCを使用
-
納品 vs ご納品 どちらが正し...
-
スーパーなどで食品発注で売れ...
-
納入日と納品日について
-
明日売り場欠品だらけになりそ...
-
「スポット受注」はどういう意...
-
テキストファイル内の外字の有無
-
納期の前倒しを依頼する場合 ...
-
Zと2とか紛らわしいのがあるか...
-
HPの納品後の修正について
-
グーグルの障害者訓練プログラ...
-
Excel-VBA コンテンツの作成日時
-
インプットとアウトプット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
formで送信したPOSTデータの削...
-
Q&Aの掲示板を作成していてヤフ...
-
マスタデータの要件定義
-
住所から市町村JISコードを検出
-
ASP 多言語の表示がうまく出来...
-
CGI(Perl)を使用してGoogleスプ...
-
Access97データベースの最大登...
-
複数同時アクセスついて
-
電子納品
-
ユニークID (社保庁問題)
-
VB SQL-Serverとは
-
エクセル、VBAで検索するとデー...
-
PHP 更新順を作成日順に変更し...
-
株価予測システムを作成するた...
-
Javaで家計簿を作成
-
卒業制作でてんてこまいです…
-
パソコン 言語について 競馬...
-
VB2008のDataGridViewにあるデ...
-
【ASP.NET】DataSetをSqlDataSo...
おすすめ情報