(Excel VBA)为整列编写公式

时间:2017-10-15 13:47:26

标签: vba formula

我需要使用相同的操作完成30个excel文件。我的excel文件中有非固定行数。对于所有excel文件,我想应用VBA将IF函数写入从第二行到最后一行的列“H”。

这是我需要写的公式(第二行):= IF(AND(AND = C2,C2 = C1,G2 = TRUE,G1 = FALSE,G3 = TRUE),“O”,IF( AND(C2 = C3,C2<> C1,G2 = TRUE), “FromYes”,IF(AND(C2 = C1,C2 = C3,G2 = TRUE,G1 = TRUE,G3 = FALSE), “d”, IF(AND(C2 = C1,C2<> C3,G2 = TRUE), “ToTmr”, “”))))

其他行应具有相似的公式。

有没有办法让我直接在vba中为整列“H”编写公式?

我尝试过这样的代码,但运行速度非常慢

For x = 2 To lastRow

If ws.Cells(x, 3) = ws.Cells(x + 1, 3) And ws.Cells(x, 3) = ws.Cells(x - 1, 3) And ws.Cells(x, 7) = True And ws.Cells(x - 1, 7) And ws.Cells(x + 1, 7) = True Then
ws.Cells(x, 8) = "O"

Else

If Cells(x, 3) = Cells(x + 1, 3) And (Cells(x, 3) <> Cells(x - 1, 3)) And Cells(x, 7) = True Then

Cells(x, 8) = "FromYes"

Else

If Cells(x, 3) = Cells(x - 1, 3) And Cells(x, 3) = Cells(x + 1, 3) And Cells(x, 7) = True And Cells(x - 1, 7) = True And Cells(x + 1, 7) = False Then

Cells(x, 8) = "D"

Else

If Cells(x, 3) = Cells(x - 1, 3) And Cells(x, 3) <> Cells(x + 1, 3) And Cells(x, 7) = True Then

Cells(x, 8) = "ToTmr"

End If

End If

End If

End If


Next x

Next d

1 个答案:

答案 0 :(得分:0)

您的方法有一些变化。首先,使用可以使用VBA设置单元格公式的事实。其次,使用可以在VBA中为整个范围设置单元格公式的事实。第三,如果您的公式很快,请使用它而不是代码(这不是一个严格而快速的规则,但如果您不熟悉VBA或不经常使用它,那么使用公式会更简单)。

使用这些想法,我想出了这个:

With Sheet1
    .Range(.Cells(2, 8), .Cells(lastRow, 8)).FormulaR1C1 = _
            "=IF(AND(RC[-5]=R[1]C[-5],RC[-5]=R[-1]C[-5],RC[-1],NOT(R[-1]C[-1]),R[1]C[-1]),""O""," & _
            "IF(AND(RC[-5]=R[1]C[-5],RC[-5]<>R[-1]C[-5],RC[-1]),""FromYes""," & _
            "IF(AND(RC[-5]=R[1]C[-5],RC[-5]=R[-1]C[-5],RC[-1],R[-1]C[-1],NOT(R[1]C[-1])),""D""," & _
            "IF(AND(RC[-5]<>R[1]C[-5],RC[-5]=R[-1]C[-5],RC[-1]),""ToTmr"",""""))))"
End With

这是设置列H的范围的公式,第2行到lastRow,Sheet1等于您的公式。消除了循环行的需要,使其更快。

我总是发现在通过VBA输入公式时使用R1C1格式更容易。获得这种格式很容易;您只需要在Excel中选择公式选项并选择R1C1参考样式。然后,您可以将其复制到VBA中,并使用另一个引号转义引号。

使用此功能,您可以轻松编写循环文件的工具,找到相应工作表上的最后一行,并设置公式。