【问题标题】:vba excel compare valuesvba excel比较值
【发布时间】:2020-05-26 09:07:30
【问题描述】:

我想知道是否有人可以帮助我完成 vba 代码。我想做的是比较两个不同列中的两个值(CorrectCompare)。如果它们相等,则应将第三列 (Rank) 中的值复制到第四列 (Output)。 “Compare组”是39行“Rank组”是39行“Correct组”是13行“Output" 是 13 行所以第一个循环是 Compare (row 2-40), Rank (row 2-40), Correct (第 2-14 行),输出(第 2-14 行)。第二个循环比较(第 41-79 行)、排名(第 41-79 行)、正确(第 15-27 行)、输出(第 15-27 行)等等。 此代码适用于第一个循环。之后就出错了。

Private Sub CommandButton3_Click()

Dim LastRow
Dim i

LastRow = Cells(Rows.Count, "F").End(xlUp).Row


For i = 2 To LastRow
    Cells(i, 7) = Application.WorksheetFunction.VLookup(Cells(i, 6), Columns("D:E"), 2, 0)
Next i

End Sub

下面附上示例数据的图像。

【问题讨论】:

    标签: excel vba loops compare


    【解决方案1】:

    如果我理解正确,如果 Compare 和 Correct 相等,您希望将值从 Rank 复制到 Output。我认为在这种情况下你只需要一个简单的 IF 语句:

    For i = 2 to 26 'I am basing these numbers off the spreadsheet, but you could use 
                     variables here from earlier in your code.
    
    If Cells(i, 4) = Cells(i, 6) Then   'Column 4 and 6 are Compare and Correct, 
                                         respectively.
      Cells(i, 7) = Cells(i, 5)         'Column 7 and 5 are Output and Rank respectively.
    
    Next i
    

    【讨论】:

    • 您的意思是:如果我用您的代码替换注释“' íf cellvalue in Correct and Compare are equal, copy Rank cell value to the next column (Output)”,它会起作用吗?
    • 没错。试一试。让我知道它是否有效。
    • 尝试在一定范围内使用 For 循环以确保其正常工作。然后您可以返回并使用输入变量更改范围。使用 For 循环应该可以防止发生无限循环。
    • 另外,请注意我编辑了我提供的代码。我将“Next”更改为“Next i”。我之前弄错了。
    【解决方案2】:

    按照你添加的图片,使用VLOOKUP不是更容易吗?您将获得与您使用的 IFS 相同的结果。

    试试这个:

    Private Sub CommandButton2_Click()
    
    LastRow = Cells(Rows.Count, "F").End(xlUp).Row
    
    For i = 2 To LastRow
        Cells(i, 7) = Application.WorksheetFunction.VLookup(Cells(i, 6), Columns("D:E"), 2, 0)
    Next i
    
    End Sub
    

    LastRow 获取“正确”列的最后一个单元格,因此我们知道宏必须通过循环多少次。 接下来我们有一个For 循环(在您的示例中)从 2 到 14。 在循环内部有一个 VLOOKUP 函数,它将列 Correct 的值与列 Compare 的值进行比较,如果匹配,则返回列 Rank 的值strong> 第一场比赛。

    【讨论】:

    • 我是初学者..你能给我完整的代码吗?从 Private Sub CommandButton2_Click() 到 End Sub。提前致谢。
    • 编辑了原始答案。您真的不需要太多代码来完成与您的 IFS 公式相同的事情。
    • 它适用于前 13 行(2-14,一个循环),之后它再次重复相同的值。循环 nr 两个应该执行相同的操作 BUT,要比较的 Correct 值应该是第 15 行,而 CompareRank 行应为第 41-79 行。循环 nr 3 正确第 28 行,比较排名第 80-118 行。我希望你明白我的意思。不要犹豫再写一次。到目前为止,我非常感谢您的帮助。
    • 循环只进行到第 14 行,因为 LastRow 的值为 14(它计算 Correct 列中的行 - F 。我的代码将适用于宏启动时填充的 Correct 列的尽可能多的行。它还会查找整个列 D:E 中的数据,因此如果您添加更多数据。
    • 循环的结果是:14 14 33 30 6 6 1 14 14 14 14 14 28 但应该是:15 15 35 34 4 4 1 15 15 15 15 15 30 所以有些东西是有点不对。
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多