Page 675 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼データの絞り込みについて やす 03/2/3(月) 10:04 ┗Re:データの絞り込みについて Jaka 03/2/3(月) 11:12 ┗Re:データの絞り込みについて やす 03/2/3(月) 11:54 ┗Re:データの絞り込みについて Jaka 03/2/3(月) 12:13 ┗困惑させてしまい、すいません。 やす 03/2/3(月) 14:38 ┗Re:困惑させてしまい、すいません。 Jaka 03/2/3(月) 15:25 ┣Re:困惑させてしまい、すいません。 やす 03/2/3(月) 18:04 ┃ ┗Re:困惑させてしまい、すいません。 ポンタ 03/2/4(火) 9:22 ┃ ┗Re:困惑させてしまい、すいません。 やす 03/2/4(火) 19:41 ┗Re:困惑させてしまい、すいません。 やす 03/2/4(火) 19:39 ─────────────────────────────────────── ■題名 : データの絞り込みについて ■名前 : やす <yasuyuki@jc3.so-net.ne.jp> ■日付 : 03/2/3(月) 10:04 -------------------------------------------------------------------------
初めまして、よろしくお願いいたします。 当方、エクセル97を使用して、簡単なVBAを作っています。 さて、ユーザーフォームを使用してコンボボックス1に条件を入れた場合にコンボボックス2に表示されるものをコンボボックス1の条件に合うデータだけを表示させたいのですが・・・どのように行えば良いのか分かりません。 例 項目1 項目2 A A001 A A002 B B001 B B002 B B003 C C001 C C002 この状態で、コンボボックス1でA,B,Cを選択する。 その結果により、コンボボックス2に表示されるものを 対応する項目2にする。 アクセス使わないとできないんでしょうか? よろしくお願いします。 |
こんにちは。 こんな感じでしょうか? Private Sub ComboBox1_Change() re = Cells(Rows.Count, "A").End(xlUp).Row Application.ScreenUpdating = False Range("A1:A" & re).AutoFilter Field:=1, Criteria1:=ComboBox1.Value ComboBox2.List = Range("B2:B" & re).SpecialCells(xlCellTypeVisible).Value Range("A" & re).AutoFilter Application.ScreenUpdating = True End Sub |
こんにちは、Jaka さん 返信、ありがとうございます。 コンボボックス1,2共にユーザーフォーム上に配置してある場合を考えています。 セル上で行うには、AutoFilterが有効ですよね。 分かりましたら、またお願いします。。 |
???? どのような事なのか良く解りませんが? 一応ユーザーフォーム上として書いたつもりですが..。 |
Jaka さん、たびたび申し訳ありません。 私の知識の無さと説明不足で理解できない発言になってしまいました。 > Private Sub ComboBox1_Change() > re = Cells(Rows.Count, "A").End(xlUp).Row > Application.ScreenUpdating = False > Range("A1:A" & re).AutoFilter Field:=1, Criteria1:=ComboBox1.Value > ComboBox2.List = Range("B2:B" & re).SpecialCells(xlCellTypeVisible).Value > Range("A" & re).AutoFilter > Application.ScreenUpdating = True > End Sub 上記を実行するとシートのセル上にオートフィルターが置かれてしまいます。 シート上にユーザーフォームを置くのではなく、ユーザーフォーム上に全てのコンボボックスを置いて処理を行いたいのですが・・・ うまく説明できないてないですねぇ、申し訳ないです。。 私の知識不足で、間違った理解をしていたら、さらに申し訳ありません。 |
今一状況がつかめないんだけど、こう言うことなんでしょうか? ComboBox1、ComboBox2をどうやって表示させているのかわからないんで、これ以上は何とも...。 Private Sub UserForm_Initialize() ComboBox1.List = Array("A", "B", "C") '↓ まるっきりダミーなんで必要無いと思うけど..。 ComboBox2.List = Array("A001", "A002", "B001", "B002", "B003", "C001", "C002") End Sub Private Sub ComboBox1_Change() ComboBox2.Clear Select Case ComboBox1.Value Case "A" ComboBox2.List = Array("A001", "A002") Case "B" ComboBox2.List = Array("B001", "B002", "B003") Case "C" ComboBox2.List = Array("C001", "C002") End Select ComboBox2.ListIndex = 0 End Sub |
何回もありがとうございます。 わかりにくい説明で申し訳ありません。。 そうです。まさにそういうことをしたいのですが、数が多く、参照する数も変化するため、VBAでできないかと思ったのですが。。 まだまだ、私には早すぎたのかもしれませんねぇ、TT |
横から失礼します。 シートを1枚新規作成し、そこに A B C D 1 A A001 B001 C001 2 B A002 B002 C001 3 C B003 という表を作っておいて、 コンボボックス1が"A"の時は B1:B2 をリストに設定する コンボボックス1が"B"の時は C1:C3 をリストに設定する コンボボックス1が"C"の時は D1:D2 をリストに設定する というのが簡単なのではないでしょうか? このシートは普段は非表示にしておけば良いですし。 以下のコードでは、↑の表が「Sheet1」という名前のシートにあるものとして書いてあります。 2ヶ所出てくる With Worksheets("Sheet1") を適切な名前に書き換えてお試しください。 Private Sub ComboBox1_Change() Dim MyCol As Integer If ComboBox1.ListIndex <> -1 Then MyCol = ComboBox1.ListIndex + 2 With Worksheets("Sheet1") ComboBox2.RowSource = "=" & .Range(.Cells(1, MyCol), .Cells(65536, MyCol).End(xlUp)).Address(0, 0, , True) End With ComboBox2.ListIndex = 0 End If End Sub Private Sub UserForm_Initialize() With Worksheets("Sheet1") ComboBox1.RowSource = .Range("A1", .Range("A65536").End(xlUp)).Address(0, 0, , True) End With End Sub |
ポンタ さん、ありがとうございます。 みなさんの話と解説書を元に試行錯誤の末、動くものができました。 本当にありがとうございました。 |
Jaka さん、ありがとうございました。 今回は、自分の知識不足を痛感しました。 うまく説明もできませんでした。。 試行錯誤の末になんとか、動くものができました。 これからは、さらに勉強して出直します。 ありがとうございました。 |