在Excel中创建一个比较两列的宏,第三列中的答案

时间:2014-10-10 14:44:32

标签: excel vba

我没有找到适合这个问题的答案,而且我对VBA很新,所以我希望有人会帮助我。

我正在尝试在我的宏中创建一个Sub,它在两列之间逐行进行简单的值比较。如果它们完全匹配,则会在第三列填充“是”,否则将显示“否”

所有列都在excel表中并且具有相同的行数,结果应该是这样的示例(没有足够的代表来发布图像):

enter image description here

我在想像For Each声明,但我不确定如何以正确的方式创建它。提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

快速子程序循环遍历第1行到第20行并比较结果:

for i = 1 to 20
    If sheet1.range("A" & i).value = sheet1.Range("B" & i).value Then
        sheet1.Range("C" & i).value = "No"
    Else
        sheet1.Range("C" & i).value = "Yes"
    End if
Next i

因为这似乎更像是一个学习实验,你也可以通过以下方式引用细胞:

for i = 1 to 20
    If sheet1.cells(i,1).value = sheet1.cells(i,2).value Then
        sheet1.cells(i,3).value = "No"
    Else
        sheet1.cells(i,3).value = "Yes"
    End if
Next i

你提的范围会有所不同。您可以获取填充的最后一行,然后从1循环到:

Dim endRow as long

endRow = Sheet1.Range("A999999").End(xlUp).Row
for i = 1 to endRow
    If sheet1.range("A" & i).value = sheet1.Range("B" & i).value Then
        sheet1.Range("C" & i).value = "No"
    Else
        sheet1.Range("C" & i).value = "Yes"
    End if
Next i

答案 1 :(得分:0)

当插入新行时,表将自动将公式带到新行。例如,假设您有下表,其中Same?列包含公式=IF(C3=D3, "Yes", "No")

enter image description here

当您在表格中输入新行时,Same?列中的公式将自动转到新行。例如,一旦我点击Tab创建新行,这就是该单元格的样子:

enter image description here

现在说你想用一组新的数据完全重新填充表格。这没问题,只需复制新数据并将其粘贴到表中,如下所示:

复制

enter image description here

粘贴到第一个单元格

enter image description here

该表为您处理公式,有效地使宏不必要。

答案 2 :(得分:0)

谢谢大家的投入! 我从你的答案中提取了元素,并设法找到解决我问题的代码。如果您有任何问题,请告诉我

Sub Compare

On Error Resume Next
Dim Sm_Row As Long

Sm_Row = Range("Table1[Same?]").Row

For Each cl In Range("Table1[Same?]")
    If Range("Table1[Col1]").Cells(Sm_Row, 1).Value = Range("Table1[Col2]").Cells(Sm_Row, 1).Value Then
        cl.Value = "Yes"
    Else
        cl.Value = "No"
    End If
        Sm_Row = Sm_Row + 1
Next cl

End Sub