- 締切済み
エクセル マクロ
以下のようなデータ1とデータ2があり、データ1を選ぶとデータ2が同時に抽出されるようにするには、どのようなマクロを組めば良いのでしょうか。 但し、データ2には重複するデータもあり、その場合は重複して、抽出されるのを避けたいのですが(下の例ですと、トヨタ、BMW)。 マクロ素人で困っており、お手数ですが、アドバイスを宜しくお願いします。 <データ1> 日本、アメリカ、ドイツ <データ2> トヨタ、日産、GM、BMW、VW、ホンダ、トヨタ、BMW、Ford、 もし、データ1で日本を選べば、結果は以下のように表示されるようにしたいです。 日本:トヨタ、日産、ホンダ
- みんなの回答 (2)
- 専門家の回答
みんなの回答
<データ1> 日本、アメリカ、ドイツ <データ2> トヨタ、日産、GM、BMW、VW、ホンダ、トヨタ、BMW、Ford、 データ1とデータ2との間には、何の関係付けもありません。 ですから、いかなるマクロを組んでも抽出するのは不可能です。 <データ2> トヨタ(日本)、日産(日本)、GM(アメリカ)・・・ との関係付けをするのが先決です。
- imogasi
- ベストアンサー率27% (4737/17069)
Sheet1のF2:F5に 日本 米 独 韓 といれ、Sheet1のB2セルの入力規則のリストに上記範囲を指定します。 Sheet2nA2:B11に トヨタ 日本 日産 日本 GM 米 BMW 独 VW 独 ホンダ 日本 トヨタ 日本 BMW 独 Ford 米 現代 韓 と入れます。 Sheet1のシートモジュールのChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False i = 2 Dim x As Range Dim xb As Range Worksheets("Sheet1").Range("B:c").Clear Set xb = Worksheets("Sheet2").Range("B2") If Target.Address = "$A$2" Then ' MsgBox Worksheets("Sheet1").Range("a2") Set x = Worksheets("Sheet2").Range("B2:B11").Find(what:=Worksheets("Sheet1").Range("a2")) If x Is Nothing Then GoTo ext Worksheets("Sheet1").Cells(i, "B") = x.Value Worksheets("Sheet1").Cells(i, "C") = x.Offset(0, -1) i = i + 1 Set xb = x p1: Set x = Worksheets("Sheet2").Range("B1:B11").FindNext(x) If x Is Nothing Then GoTo ext If x.Row <= xb.Row Then GoTo ext Worksheets("Sheet1").Cells(i, "B") = x.Value Worksheets("Sheet1").Cells(i, "C") = x.Offset(0, -1) i = i + 1 Set xb = x GoTo p1 End If ext: Application.EnableEvents = True End Sub Sheet1のA2で日本を選ぶとB2:C4 に 日本 日産 日本 ホンダ 日本 トヨタ と出る。 私はFind,FindNextを使いましたが、苦手です。 Sheet2の上記のB列を総なめで探すロジックもあります。 この類の問題は中・上級で「マクロ素人」では難しいように思います。 (注)何かの弾みで、イベントが反応しないようになったら Sub test02() Application.EnableEvents = True End Sub を実行のこと。
お礼
大変有り難うございます。マクロ素人にはちょっと難しいのですが、頑張って動くようにしてみます。ここまで、丁寧に教えて頂けるとは思いませんでした。本当に感謝!
補足
ちなみに、マクロを学習するのにお勧めの、参考書、HPはありますか。教えて頂けると助かります。 今までは、会社でマクロが分る人に聞いたりしていたのですが、その人も特別に詳しいわけではなく、この際、きちんと勉強しようと思います。
お礼
ご指摘有り難うございます。そうですね、関連付けをしないといけないのですね。