Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13487 / 13646 ツリー ←次へ | 前へ→

【5180】コンボボックスを用いてのオートフィルタ。 たまころ 03/4/24(木) 14:50 質問
【5181】Re:コンボボックスを用いてのオートフィルタ... ぴかる 03/4/24(木) 15:19 回答
【5182】Re:コンボボックスを用いてのオートフィルタ... たまころ 03/4/24(木) 15:21 質問
【5186】Re:コンボボックスを用いてのオートフィルタ... ぴかる 03/4/24(木) 15:58 回答
【5188】Re:コンボボックスを用いてのオートフィルタ... たまころ 03/4/24(木) 16:14 質問
【5191】Re:コンボボックスを用いてのオートフィルタ... ぴかる 03/4/24(木) 16:29 発言
【5193】Re:コンボボックスを用いてのオートフィルタ... こうちゃん 03/4/24(木) 17:59 回答
【5194】Re:コンボボックスを用いてのオートフィル... ポンタ 03/4/24(木) 18:15 回答
【5206】Re:コンボボックスを用いてのオートフィル... たまころ 03/4/25(金) 14:31 お礼

【5180】コンボボックスを用いてのオートフィルタ。
質問  たまころ  - 03/4/24(木) 14:50 -

引用なし
パスワード
   はじめまして。VBA初心者なんです。

5000件ぐらいのデータがありまして、
段階的にオートフィルタで絞っていきたいのです。
簡単に言いますとA列から順番にオートフィルタで絞っていくイメージなのですが・・・

1.まずA列をコンボボックスを用いてデータを絞ります。。
2.次のコンボボックスにはB列の選択肢が表示され、データを絞ります。
3.次のコンボボックスにはC列の選択肢が表示され、データを絞ります。
4.次のコンボボックスにはD列の選択肢が表示され、データを絞ります。
5.これで最後。コンボボックスにはE列の選択肢が表示され、データを絞りって最終的に
  欲しいデータが手に入るって

という感じのマクロを組みたいのですが。さっぱりわかりません。
どなたか助けてください!!

【5181】Re:コンボボックスを用いてのオートフィル...
回答  ぴかる  - 03/4/24(木) 15:19 -

引用なし
パスワード
   たまころさん、こんにちは。

>5000件ぐらいのデータがありまして、
>段階的にオートフィルタで絞っていきたいのです。
>簡単に言いますとA列から順番にオートフィルタで絞っていくイメージなのですが・・・
>
>1.まずA列をコンボボックスを用いてデータを絞ります。。
>2.次のコンボボックスにはB列の選択肢が表示され、データを絞ります。
>3.次のコンボボックスにはC列の選択肢が表示され、データを絞ります。
>4.次のコンボボックスにはD列の選択肢が表示され、データを絞ります。
>5.これで最後。コンボボックスにはE列の選択肢が表示され、データを絞りって最終的に
この操作を全て手動でやってみて、そいつをマクロ記録しましょう。
そして絞った内容をコンボボックスに置き換えましょう。
これにて多分、出来るはず!。

【5182】Re:コンボボックスを用いてのオートフィル...
質問  たまころ  - 03/4/24(木) 15:21 -

引用なし
パスワード
   んー手動でやってみました。
1.までなら簡単にできますよねぇ
だけど、
2.以降の選択肢をコンボボックスに反映させるのがわからないんですよ。
すいませーん。お願いします。

【5186】Re:コンボボックスを用いてのオートフィル...
回答  ぴかる  - 03/4/24(木) 15:58 -

引用なし
パスワード
   状況がいまいちつかめてないので、アカンかもしれませんが・・・。

たとえば、3項目あったとして記録してみると、
  Selection.AutoFilter Field:=1, Criteria1:="みかん"
  Selection.AutoFilter Field:=2, Criteria1:="りんご"
  Selection.AutoFilter Field:=3, Criteria1:="バナナ"
こいつをコンボボックスに変えてみると、
  Selection.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
  Selection.AutoFilter Field:=2, Criteria1:=ComboBox2.Value
  Selection.AutoFilter Field:=3, Criteria1:=ComboBox3.Value

こんなんとちゃうんかな?。

【5188】Re:コンボボックスを用いてのオートフィル...
質問  たまころ  - 03/4/24(木) 16:14 -

引用なし
パスワード
   ▼ぴかる さん:
ありがとうございます。
んーすいませんわがままでちょっと違うんです。

補足説明させていただきますね。
普通にオートフィルタを使う際も、A列で選択したデータに対して
B列の選択肢が決まりますよねぇ。
それと同じで、今回もコンボにあらかじめデータを仕込んでおくのではなく、
1.で選択したデータに対しての選択肢をその都度表示させたいんです。

例えば、1.で"みかん"と選択したら、2.ではコンボに"黄色""オレンジ"と、
また、1.で"りんご"と選択したら、2.ではコンボに"赤""青"といった感じです。
だめですかねぇ。

ほんとすいません。わがままで。お願いします。

【5191】Re:コンボボックスを用いてのオートフィル...
発言  ぴかる  - 03/4/24(木) 16:29 -

引用なし
パスワード
   なるほど、なるほど、やられたい事は分かりました。
でも抽出項目をサーチするんが、私にはよう分かりません。
こいつが出来たら、確かに便利ですね。どなたかお助けを・・・。よろしくですっ。

【5193】Re:コンボボックスを用いてのオートフィル...
回答  こうちゃん E-MAIL  - 03/4/24(木) 17:59 -

引用なし
パスワード
   みなさん、こんにちは

私は、こんなケースではデータベース使うことが多いのですが、あえてベタにシートのデータ検索する方法でモジュール作ってみました。
(簡単のため3段階の例です。)
フォームのコンボボックスとしますね。

Sheet2の各列に元データを作っておきます。

A    B    C     D      E
肉   肉   牛     牛     松坂
果物  肉   豚     牛     近江
野菜  果物  りんご   豚     薩摩
    果物  みかん   豚     ヨークシャー
    野菜  ピーマン  りんご   国光
    野菜  ジャガイモ りんご   ふじ
              みかん   温州
              みかん   和歌山
              ピーマン  緑
              ピーマン  赤
              ジャガイモ メークイン
              ジャガイモ 男爵

ComboBox1のRowSourceに"Sheet2!A1:A3"を設定しておきます。

以下はフォームモジュールです。

Private Sub ComboBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'ComboBox1の変更時、B・C列のデータから該当するデータをF列にコピーして、F列をComboBox2のRowSourceに設定します。

  Dim i As Integer
  Dim j As Integer

  j = 1
  With Sheet2
    For i = 1 To .Range("B65536").End(xlUp).Row
      If .Cells(i, 2).Value = Me.ComboBox1.Value Then
        .Cells(j, 6).Value = .Cells(i, 3).Value
        j = j + 1
      End If
    Next
    Me.ComboBox2.RowSource = "Sheet2!F1:F" & j - 1
  End With

End Sub

Private Sub ComboBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

  Dim i As Integer
  Dim j As Integer

  j = 1
  With Sheet2
    For i = 1 To .Range("D65536").End(xlUp).Row
      If .Cells(i, 4).Value = Me.ComboBox2.Value Then
        .Cells(j, 7).Value = .Cells(i, 5).Value
        j = j + 1
      End If
    Next
    Me.ComboBox3.RowSource = "Sheet2!G1:G" & j - 1
  End With

End Sub

かなりベタですが、こんな感じでどうでしょ?
あとはフィルター使ったり、データベースと組み合わせたりで応用できると思いますが、いかがでしょ?

【5194】Re:コンボボックスを用いてのオートフィル...
回答  ポンタ  - 03/4/24(木) 18:15 -

引用なし
パスワード
   横から失礼します。

セル範囲に名前を付ける、という方法あります。

コードはこれだけです。

ComboBox2 のリストがある範囲に ComboBox1 で選んだ項目と同じ名前を付けてください。

Private Sub ComboBox1_Change()
  If ComboBox1.ListIndex > -1 Then
    ComboBox2.RowSource = "=" & ComboBox1.Value
  End If
End Sub

Private Sub ComboBox2_Change()
  If ComboBox2.ListIndex > -1 Then
    ComboBox3.RowSource = "=" & ComboBox2.Value
  End If
End Sub

http://www11.ocn.ne.jp/~ponta73/excelvba_01.html
↑でサンプルを公開してますので、良かったら見にきてください。

【5206】Re:コンボボックスを用いてのオートフィル...
お礼  たまころ  - 03/4/25(金) 14:31 -

引用なし
パスワード
   ▼みなさん:

ありがとうございました♪
無事に解決することが出来ました。

13487 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free