如果condition为true,则创建下拉列表

时间:2013-10-24 19:34:14

标签: excel drop-down-menu conditional-statements

我有一个很好的问题。假设我有一个如下所示的列表:

Fruits    | Apples   | 1
          | Oranges
          | pears

Vegetables| Corn     | 1
          | Turnips
          | Broccli

因此,我们有A,B和C列.A是Fruitsvegetables,B类型,C每次填充1 {1}}。我想要做的是创建一个下拉列表,其中C = 1,直到C单元格中的下一个1。

所以我最终会得到的是:

水果|苹果(与其他水果一起下拉)| 1

蔬菜|玉米(与其他蔬菜一起下拉)| 1。

注意“|”是任何混淆的细胞之间的分隔符。

我希望我的问题对任何善良的人都有帮助。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我不确定你想把它们放在哪里。但假设您希望它们位于工作簿中的不同工作表上,则可以使用以下宏。

Option Explicit

Sub CreateDropdownsInSheet()
    Dim SourceSheet As Worksheet
    Dim TargetSheet As Worksheet
    Dim i As Double
    Dim DropDownRange As Range

    'Define Source Sheet and Target Sheet
    Set SourceSheet = ActiveWorkbook.Sheets("Sheet1")
    Set TargetSheet = ActiveWorkbook.Sheets("Sheet2")

    'Loops through the source sheet
    For i = 1 To SourceSheet.Cells(SourceSheet.Rows.Count, 3).End(xlUp).Row Step 1
        If SourceSheet.Cells(i, 3).Value = 1 Then
            'Gets range for dropdown
            Set DropDownRange = SourceSheet.Range(SourceSheet.Cells(i, 2), SourceSheet.Cells(i, 2).End(xlDown))

            With TargetSheet.Cells(TargetSheet.Cells(TargetSheet.Rows.Count, 1).End(xlUp).Row + 1, 1)
                'Names group
                .Value = SourceSheet.Cells(i, 1).Value

                'Populates dropdown
                With .Offset(0, 1).Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & DropDownRange.Parent.Name & "!" & DropDownRange.Address(External:=False)
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .ShowInput = True
                    .ShowError = True
                End With

                'Selects first element in dropdown list
                .Offset(0, 1).Value = SourceSheet.Cells(i, 2).Value
            End With
        End If
    Next i
End Sub

如果您更改代码中的SourceSheet和TargetSheet变量的工作表名称以适合您的工作簿(我假设目标工作表是一个空工作表)并运行此宏,那么您要查找的列表应该在目标表。