過去ログ

                                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にする。

アクセス使わないとできないんでしょうか?

よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:データの絞り込みについて  ■名前 : Jaka  ■日付 : 03/2/3(月) 11:12  -------------------------------------------------------------------------
   こんにちは。
こんな感じでしょうか?

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
 ───────────────────────────────────────  ■題名 : Re:データの絞り込みについて  ■名前 : やす <yasuyuki@jc3.so-net.ne.jp>  ■日付 : 03/2/3(月) 11:54  -------------------------------------------------------------------------
   こんにちは、Jaka さん
返信、ありがとうございます。

コンボボックス1,2共にユーザーフォーム上に配置してある場合を考えています。

セル上で行うには、AutoFilterが有効ですよね。

分かりましたら、またお願いします。。
 ───────────────────────────────────────  ■題名 : Re:データの絞り込みについて  ■名前 : Jaka  ■日付 : 03/2/3(月) 12:13  -------------------------------------------------------------------------
   ????
どのような事なのか良く解りませんが?
一応ユーザーフォーム上として書いたつもりですが..。
 ───────────────────────────────────────  ■題名 : 困惑させてしまい、すいません。  ■名前 : やす <yasuyuki@jc3.so-net.ne.jp>  ■日付 : 03/2/3(月) 14:38  -------------------------------------------------------------------------
   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

上記を実行するとシートのセル上にオートフィルターが置かれてしまいます。
シート上にユーザーフォームを置くのではなく、ユーザーフォーム上に全てのコンボボックスを置いて処理を行いたいのですが・・・

うまく説明できないてないですねぇ、申し訳ないです。。

私の知識不足で、間違った理解をしていたら、さらに申し訳ありません。
 ───────────────────────────────────────  ■題名 : Re:困惑させてしまい、すいません。  ■名前 : Jaka  ■日付 : 03/2/3(月) 15:25  -------------------------------------------------------------------------
   今一状況がつかめないんだけど、こう言うことなんでしょうか?
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
 ───────────────────────────────────────  ■題名 : Re:困惑させてしまい、すいません。  ■名前 : やす <yasuyuki@jc5.so-net.ne.jp>  ■日付 : 03/2/3(月) 18:04  -------------------------------------------------------------------------
   何回もありがとうございます。
わかりにくい説明で申し訳ありません。。

そうです。まさにそういうことをしたいのですが、数が多く、参照する数も変化するため、VBAでできないかと思ったのですが。。

まだまだ、私には早すぎたのかもしれませんねぇ、TT
 ───────────────────────────────────────  ■題名 : Re:困惑させてしまい、すいません。  ■名前 : ポンタ  ■日付 : 03/2/4(火) 9:22  -------------------------------------------------------------------------
   横から失礼します。

シートを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
 ───────────────────────────────────────  ■題名 : Re:困惑させてしまい、すいません。  ■名前 : やす <yasuyuki@jc5.so-net.ne.jp>  ■日付 : 03/2/4(火) 19:41  -------------------------------------------------------------------------
   ポンタ さん、ありがとうございます。

みなさんの話と解説書を元に試行錯誤の末、動くものができました。
本当にありがとうございました。
 ───────────────────────────────────────  ■題名 : Re:困惑させてしまい、すいません。  ■名前 : やす <yasuyuki@jc5.so-net.ne.jp>  ■日付 : 03/2/4(火) 19:39  -------------------------------------------------------------------------
   Jaka さん、ありがとうございました。

今回は、自分の知識不足を痛感しました。
うまく説明もできませんでした。。

試行錯誤の末になんとか、動くものができました。

これからは、さらに勉強して出直します。

ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 675