Excel VBA質問箱 IV

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

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


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

【33775】プルダウンメニューにフィルターをかけた... いい人 06/1/20(金) 11:42 質問[未読]
【33803】Re:プルダウンメニューにフィルターをかけ... 06/1/20(金) 21:35 回答[未読]
【33805】Re:プルダウンメニューにフィルターをかけ... ichinose 06/1/20(金) 22:01 発言[未読]
【33879】Re:プルダウンメニューにフィルターをか... いい人 06/1/23(月) 10:27 お礼[未読]
【33881】Re:プルダウンメニューにフィルターをかけ... いい人 06/1/23(月) 10:58 質問[未読]

【33775】プルダウンメニューにフィルターをかけた...
質問  いい人  - 06/1/20(金) 11:42 -

引用なし
パスワード
   セル1とセル2があり、どちらもプルダウンメニューでそれぞれa,b,c,d,eとあ、い、う、え、おが選択できるとします。
セル1でAを選択、セルBでたとえば”い”を手動で選択して、その組み合わせを決めるのですが、たとえばセル1でAならば、セル2の内容はAならおのずと”い”と”う”しか該当しないケースがあるとします。

デフォルトならばセル2の選択内容は、あ、い、う、え、おの5つが表示されますが、これをセル1でAを選択したら、自動的にセル2での選択肢が”い”と”う”しか表示されないようにしたいのです。

プルダウンの用意までは出来たのですが、これのフィルタリングがわかりません。

ご教示いただけますと幸いです。

【33803】Re:プルダウンメニューにフィルターをか...
回答    - 06/1/20(金) 21:35 -

引用なし
パスワード
   すいません。VBAでの回答ではないのですが、
「あ」の場合 のリスト 範囲名
「い」の場合 のリフト 範囲名
を別のシートに作っておいて

入力規制で「INDIRECT」関数を使えばいいのでは?

【33805】Re:プルダウンメニューにフィルターをか...
発言  ichinose  - 06/1/20(金) 22:01 -

引用なし
パスワード
   ▼いい人 さん
こんばんは。

>セル1とセル2があり、どちらもプルダウンメニューでそれぞれa,b,c,d,eとあ、い、う、え、おが選択できるとします。
「プルダウンメニュー」とは、入力規則のリストの事ですね?

二つ以上のシートを持つ新規ブックの標準モジュールに

'==============================================================
Sub 設定()
  リストの作成
  名前の定義
  入力規則の設定
End Sub
'==============================================================
Sub リストの作成()
  With Worksheets(2)
    .Range("a1:a5").Value = Application.Transpose(Array("a", "b", "c", "d", "e"))
    .Range("b1:b5").Value = Application.Transpose(Array("あ", "い", "う", "え", "お"))
    .Range("c1:c2").Value = Application.Transpose(Array("い", "う"))
    .Range("d1:d2").Value = Application.Transpose(Array("あ", "え"))
    .Range("e1:e2").Value = Application.Transpose(Array("あ", "お"))
    .Range("f1:f3").Value = Application.Transpose(Array("い", "う", "え"))
    .Range("g1:g2").Value = Application.Transpose(Array("う", "お"))
    End With
End Sub
'==============================================================
Sub 名前の定義()
  With ThisWorkbook.Names
    .Add Name:="セルA1リスト", _
      RefersToR1C1:= _
           "=OFFSET(Sheet2!R1C1,0,0,COUNTA(Sheet2!C1),1)"
    .Add Name:="セルB1リスト", _
      RefersToR1C1:= _
         "=OFFSET(Sheet2!R1C2,0," & _
         "IF(Sheet1!R1C1="""",0,MATCH(Sheet1!R1C1,セルA1リスト,0))," & _
         "COUNTA(OFFSET(Sheet2!R1C2,0,IF(Sheet1!R1C1="""",0,MATCH(Sheet1!R1C1,セルA1リスト,0)),65536,1)),1)"
    End With
End Sub
'==============================================================
Sub 入力規則の設定()
  With Worksheets(1)
    With .Range("a1").Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="=セルA1リスト"
      .IgnoreBlank = True
      .InCellDropdown = True
      End With
    With .Range("b1").Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="=セルB1リスト"
      .IgnoreBlank = True
      .InCellDropdown = True
      End With
  End With
End Sub


として、プロシジャー「設定」を実行してみてください。

最左端シートの

セルA1とセルB1に入力規則によるリスト選択が可能になります。

セルA1にリストから任意のデータ(ここでは、a,b,c,d,e)を選択してください。

セルB1のリストメンバは、セルA1の結果により、変わります。


さて、このセルA1とB1のリストメンバは、

左から、2番目のシートに作成されます。アクティブにしてみてください。


A列が最左端シートの(以降省略)セルA1のリストメンバです。

B列は、セルA1が未入力のときの セルB1のリストメンバです。

C列は、セルA1が「a」のときの セルB1のリストメンバです。

D列は、セルA1が「b」のときの セルB1のリストメンバです。

E列は、セルA1が「c」のときの セルB1のリストメンバです。

F列は、セルA1が「d」のときの セルB1のリストメンバです。

G列は、セルA1が「e」のときの セルB1のリストメンバです。


最左端シートのシートモジュールには

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Not Application.Intersect(Target, Range("a1")) Is Nothing Then
    Range("b1").ClearContents
    End If
  Application.EnableEvents = True
End Sub

というイベントプロシジャーを入れておくと
セルA1が変更されるたびにセルB1が空白になります。

以上ですが、

「設定」で行っていることは、全て手動操作で可能です。

「名前の定義」というプロシジャーに記述されている
数式をちょっと難解ですが、じっくり理解してみてください。

「設定」実行後は、「挿入」---「名前」---「定義」とクリックして
「名前の定義」ダイアログからも調べることができます。

【33879】Re:プルダウンメニューにフィルターをか...
お礼  いい人  - 06/1/23(月) 10:27 -

引用なし
パスワード
   亮さん、ichinoseさん、早速のご回答ありがとうございました。

出来ると思っていたのですが、やはり出来るんですね。
(ただVBAは、もっと勉強しないとまだここまで書けません(T_T))

亮さん、入力規則でリストを作成する際、リストの選択が別シートで
出来ません。同一シートでならば、選択できます。ここで、はたと
考え込んでしまったのが発端です。
出来る方法って、ありますか?

長くなりましたが、重ねてお礼申し上げます。自分もいつか、腕を
磨いて、お返しができたらと思います。

【33881】Re:プルダウンメニューにフィルターをか...
質問  いい人  - 06/1/23(月) 10:58 -

引用なし
パスワード
   もうひとつお願いがあります。

上記のことが可能となったのですが、これをたとえば一つ増やして、3つのプルダウンメニュー(入力規則)を用意して、最初に選択された際に2番目に表示される
項目を絞り込みます。そこからさらに絞り込まれた内容を選択して、3番目に表示させることも可能だと思い、コピーで追加してみたのですが、動きません。

またご教授いただけますと幸いです。

重ねて申し訳ございません。

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