Excel VBA質問箱 IV

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

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


47878 / 76738 ←次へ | 前へ→

【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が空白になります。

以上ですが、

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

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

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

0 hits

【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 質問

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