检查价值观

时间:2011-11-13 08:14:29

标签: excel vba

If UserForm1.ComboBox1.Value = "One" Then

    If UserForm1.ComboBox2.Value = "Attentive" Then

    For Each listItem In ws.Range("D1:D56").SpecialCells(xlConstants)

    With Me.ListBox1
    If listItem = "Y" Then .AddItem Sheets("Sheet2").Range("A" & listItem.Row).Value
    End With

    Next listItem

End If

范围A具有名称。范围C具有“一”,“二”和“三”形式的值。范围D是注意的,其具有“Y”和“N”形式的值。

这个程序正在做的是: 检查范围D1:D56在范围C中具有“一个”值,然后在列表框中打印其中包含“Y”的列A的名称。

现在我想添加另一个带有“One”的条目,我现在必须将范围更改为D57,我不想重复此操作,应该自行考虑,而不是手动更改代码。< / p>

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

我知道您只想制作检查值动态的范围。因为特殊单元格使用usedrange,所以你可以使用:

For Each listItem In ws.Columns(4).SpecialCells(xlConstants)

或者您可以使用:

For Each listItem In ws.Range("D1", ws.cells(rows.count,"D").end(xlup)).SpecialCells(xlConstants)

根据您的评论,这里有一个更新的答案:

Dim rCell As Range
Dim sValue As String '// Represents your One, Two, Three values
Dim sAttentive As String '// Represents your attentive value

sValue = UserForm1.ComboBox1.Value

If UserForm1.ComboBox2.Value = "Attentive" Then
    sAttentive = "Y"
Else
    sAttentive = "N"
End If

For Each rCell In ws.Columns(4).SpecialCells(xlConstants)
    If rCell.Value = sAttentive And rCell.Offset(, -1) = sValue Then
        Me.ListBox1.AddItem Sheets("Sheet2").Range("A" & listItem.Row).Value
    End If
Next rCell