2017-04-21 9 views
0

ダイナミックドロップリストを作成しようとしているスプレッドシートがあります。Test No.とその曜日のリストを持つように設定しましたそれに。それは次のようになります。私は、ドロップダウンリストが唯一の私に、すでにそのために使用されていない利用可能日を与えたいリストの一つ下の同じ番号を追加するとExcelでダイナミックドロップリストを作成する方法

Setup TestNumbers

今、私が何をしたいです数。

ダウン新しい下のドロップが 5678ダウン新しい下のドロップのためにすなわち 木、金、土、日を持っている必要があり 1234ため

すなわち9012新しい下のドロップダウンのためにすなわち 月、水、木、土、日を持っている必要があります

私は7日間の曜日があり、データ検証を使用してそのリストをドロップオプションにすることができますが、私はそれを動的で欲しいだけですそのオプションはまだTest Noによって使用されていません。

これはできますか?

あなたは月あなたのリストを作成してドロップダウンリスト
をによって使用することができます

答えて

1

:ROW1はヘッダ行であり、あなたがと呼ばれる名前付き範囲を持っているし、右側シート]タブをクリックB - >表示のコードをとに下記のコードを貼り付け開いたコードウィンドウ - >ブックをマクロ有効ブックとして保存します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
Dim x, dict 
Dim i As Long, lr As Long 
Dim Rng As Range, Cell As Range 
Dim Str As String 
lr = Cells(Rows.Count, 1).End(xlUp).Row 
Set Rng = Range("A2:A" & lr) 
x = Range("Days").Value 
Set dict = CreateObject("Scripting.Dictionary") 
If Target.Column = 2 And Target.Row > 1 Then 
    If Target.Offset(0, -1) <> "" Then 
     For Each Cell In Rng 
      If Cell <> "" And Cell = Target.Offset(0, -1) Then 
       If Str = "" Then 
        Str = Cell.Offset(0, 1).Value 
       Else 
        Str = Str & ", " & Cell.Offset(0, 1).Value 
       End If 
      End If 
     Next Cell 
     For i = 1 To UBound(x, 1) 
      If InStr(Str, x(i, 1)) = 0 Then 
       dict.Item(x(i, 1)) = "" 
      End If 
     Next i 
     On Error Resume Next 
     With Target.Validation 
      .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
           xlBetween, Formula1:=Join(dict.keys, ",") 
     End With 
    End If 
End If 
End Sub 

したがって、B列のセルを選択すると、特定のテスト番号のために既に選択された日数を除いたコードがドロップダウンリストを追加します。列Aの対応するセル enter image description here

0

- 日曜日
選択火例えば名前平日を定義 - 日曜日と
月の定義を選択水曜日 - 日曜日と名前を定義します。
セレクト木 - 日曜日と名前
選択金の定義 - 日曜日と名前を定義木
セレクト土 - 日曜日と名前を定義金
選択日曜日と名前を定義し

をあなたがドロップダウンリストを必要とするすべてのセルを選択することができます。
は、例えばセルB2から開始下記のソースの書き込みでデータ検証、リストを作成します。

=IF(OR(B1="",B1="Day"),wkday,INDIRECT(B1))

+0

これは、常に順番に選択されている場合にのみ適用されます。ときどき彼らは月と水で選んだ「9012」のようなものではないので、最後にドロップでTue、Sat、Sunが必要です。 – Mike

+0

月曜日に水曜日を選択すると、下のセルには木曜日 - 日曜日(名前水) – yass

1

あなたはvalidatを変更するには、シートのコードモジュールにWorksheet_SelectionChangeイベントを処理することができますイオンリスト。新しい選択されたセルが検証したいセルの1つであるかどうかを調べるためにいくつかのチェックが必要です。列Bの識別子、列Aの識別子などが含まれます。下のルーチンのチェックは、サンプルデータに準拠しています。

データが列であると仮定すると、
' Code Module of your worksheet 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Target.Cells.count > 1 Then Exit Sub 
    If Target.Column <> 2 Or Target.row < 2 Then Exit Sub 
    If Len(Trim(Target.Value)) > 0 Then Exit Sub 
    If Len(Trim(Target.offset(, -1).Value)) = 0 Then Exit Sub 

    Dim newList As String: newList = ",Sun,Mon,Tue,Wed,Thu,Fri,Sat" 
    Dim r As Range: Set r = Target.offset(-1) 
    Do Until Len(Trim(r.Value2)) = 0 Or r.offset(, -1).Value2 <> Target.offset(, -1).Value2 
     newList = Replace(newList, "," & r.Value2, "") 
     Set r = r.offset(-1) 
    Loop 
    With Target.Validation 
     .Delete 
     .Add xlValidateList, , , Mid(newList, 2) 
    End With 
End Sub 
関連する問題