如果范围中的单元格与组合框值匹配则右侧单元格值

时间:2015-02-23 16:38:26

标签: excel-vba vba excel

我正在尝试通过Excel和VBA创建一个时间线,在A1:A24范围内列出小时(1-24);我创建了一个ComboBox,用这个范围填充列表,现在我正在尝试链接这两个,所以如果我在ComboBox中选择一个小时,Excel将在该特定单元格的右侧显示“Test”一个单元格从给定范围(例如,如果我在ComboBox中选择“8”,则Excel将在B8中显示“Test”,因为A8的值为“8”)

这就是我对VBA的一点知识的了解:

Private Sub Combobox1_Change()

    For Each cell In Range("A1:A24")
        If cell.Value = Me.ComboBox1.Value Then
            cell.Offset(0, 1).Value = "Test"
        End If
    Next

End Sub

如果有人能帮我解决这个问题会很棒!

1 个答案:

答案 0 :(得分:0)

如果列表的订购顺序为1 - 24,请使用

Private Sub ComboBox1_Change()
Dim MyRange As Range

    Set MyRange = [A1]                    ' or wherever your list starts
    MyRange(ComboBox1.Value, 2) = "Test"  ' address the range object by row, column
End Sub

小心If cell.Value = Me.ComboBox1.Value Then ... ComboBox1会返回String,您的手机可能包含数字而If可能不起作用(至少在这种情况下是这样的) )。

一个更通用的例程扫描整个列表而不依赖于它的升序排序(你很快就会有一个列表" Apple"," Banana"," Cherimoya& #34;,...)

Private Sub ComboBox1_Change()
Dim MyRange As Range, Idx As Integer

    Set MyRange = [A1]                       ' or whereever your list starts
    Idx = 1

    Do While MyRange(Idx, 1) <> ""           ' start processing
        If Str(MyRange(Idx, 1)) = Str(ComboBox1) Then
            If MyRange(Idx, 2) = "" Then     ' bonus: do a toggle
                MyRange(Idx, 2) = "Test"
            Else
                MyRange(Idx, 2) = ""
            End If
            Exit Do                          ' or not for full list processing
        End If
        Idx = Idx + 1
    Loop
End Sub
相关问题