【问题标题】:If a double condition is met, then add to a specific dictionary如果满足双重条件,则添加到特定字典
【发布时间】:2018-01-11 15:21:04
【问题描述】:

我正在尝试创建一个代码,让我可以检查列 A 和 C 是否都匹配“汽车”和“红色”。如果是,我想在我现有的DicoRedCar 中填写汽车品牌作为项目,价格作为关键是我的代码:

Sub Dicofill()
    Dim DicoRedCar As Object
    Set DicoRedCar = CreateObject("Scripting.Dictionary")
    Dim Startcell As Range 
    Set Startcell = Data.Range("A1") 
    i = i + 1 

    If Startcell.Offset(i, 0).Value = "Car" And Startcell.Offset(i, 2).Value = "Red" Then 
        DicoRedCar.Add Startcell.Offset(i, 0).Value, Startcell.Offset(i, 1).Value
    End If

End Sub

第1栏是车型,第2栏是汽车品牌,第3栏是汽车颜色,第6栏是汽车价格。

但它不喂 Dico。我知道在 A24 范围内出现了一辆红色汽车,但没有任何反应。我试图用 MsgBox 检查 Then 语句,但它什么也没给我。我试过了,但什么也没发生:

If Startcell.Offset(i, 0).Value = "Car" And Startcell.Offset(i, 2).Value = "Red" Then
    Msgbox("found a Red Car")
End If

所以我认为阻塞点首先来自我的“If...Then”语句

【问题讨论】:

  • 您似乎没有在循环播放。上面的代码只会检查第 2 行。
  • Data 是指您要向下扫描的范围,还是工作表引用?
  • 是我在其他地方定义的,它没有传入,也没有用值初始化?对我来说它看起来不像一个循环,通常你会在你的代码之后递增,所以它会在再次检查条件之前发生。
  • A 列和 C 列的长度是否总是相同(不缺少数据),并且是否知道起始行?一旦知道这一点,应该很快就会聚在一起。
  • 数据参考我的表格

标签: vba excel dictionary if-statement multiple-conditions


【解决方案1】:

这可能会让你开始:

Sub Dicofill()

    Dim DicoRedCar As Object
    Dim Startcell   As Range
    Dim myCell      As Range

    Set DicoRedCar = CreateObject("Scripting.Dictionary")
    Set Startcell = Range("A1")

    For Each myCell In Range("A1:A10")
        If myCell.Offset(0, 1) = "Car" And myCell.Offset(0, 2) = "Red" Then
            'it is a good idea to check whether the key exists before adding it:
            DicoRedCar.Add myCell.Offset(0, 1), myCell.Offset(0, 4)
        End If
    Next myCell

End Sub

它遍历 Range("A1:A10") 并检查列 B 中的“Car”和列 C 中的“Red”。如果找到它们,列 B 将作为键添加到字典 DicoRedCar 中,而列 E 是值。

下一步,请考虑在添加之前检查字典中是否存在键,因为它会给您一个错误。这是怎么做的:

dict.Exists(Key)
e.g. If DicoRedCar.Exists(myCell.Offset(0,1)) Then

【讨论】:

    【解决方案2】:

    假设Data 是对工作表的引用。以下将向下扫描A 列并在到达第一个空单元格时停止:

    Sub Dicofill()
    Dim DicoRedCar As Object
    Set DicoRedCar = CreateObject("Scripting.Dictionary")
    Dim Startcell As Range
    
    Set Startcell = Data.Range("A1")
    Do Until Startcell.Offset(i + 1, 0).Value = ""
        i = i + 1
        If Startcell.Offset(i, 0).Value = "Car" And Startcell.Offset(i, 2).Value = "Red" Then
            DicoRedCar.Add Startcell.Offset(i, 0).Value, Startcell.Offset(i, 1).Value
        End If
    Loop
    
    End Sub
    

    【讨论】:

    • 我试图这样做,但我有:运行时错误 457 此键已与此集合的元素相关联。 ://
    • 那你有两辆红色的车? @Vityata 在他们的回答结束时涵盖了这一点。
    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2016-11-06
    • 2021-10-15
    相关资源
    最近更新 更多