|
▼いい人 さん
こんばんは。
>セル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が空白になります。
以上ですが、
「設定」で行っていることは、全て手動操作で可能です。
「名前の定義」というプロシジャーに記述されている
数式をちょっと難解ですが、じっくり理解してみてください。
「設定」実行後は、「挿入」---「名前」---「定義」とクリックして
「名前の定義」ダイアログからも調べることができます。
|
|