VBA 在列的单元格中插入一个公式来计算何时满足多个 IF AND 条件

VBA to insert in a cell in a column a formula to calculate when multiple IF AND conditions are met

我坚持要写一个 VBA 代码,使我能够在 V 列中插入以下公式(从 V2 开始到最后一行,因为它是一个动态范围)如果满足 3 AND 条件其他列相同 sheet。我尝试使用宏并插入它询问的公式 R1C1 但它给了我一个语法 error.Also,我宁愿使用 VBA 代码,因为它将在一个非常大的数据库上 运行多个 sheets 并且范围会随时间变化。但是,所有格式、header 名称和列号将始终保持不变。

所以我的条件是:

如果 M 列中的单元格有值,且 N 列不等于 5,且 T 列为空,则将此公式插入该行的 V 列:

G 列 * (0.19) 同样,如果满足相同条件,则将此公式插入 X 列:

V列/Y列以及O列中的这个公式:

column M/ Column X 如果不满足3个条件中的任何一个,则不做任何事情并移至下一行并继续

对 sheet "CABC" 和 sheet "CXYZ" 中的每一行执行此操作(每项工作都会更改行数 sheet 因此我需要一个 Last包括行数)此外,有时在新工作簿中,这些 sheet 中的一个或两个都不会存在,因此我需要一个错误处理程序来继续,以防它找不到 sheet.

我会给出我的代码,但是我真的没有,因为我在这里或在 youtube 上找到的 none 代码对我有用:(

这是适用于我的 V 列的 IF AND 公式,但是当我将它插入 VBA 时它不起作用(不适用于 .range.formula 或 . range.formulaR1C1 来自录制的宏) 公式:

"=IF(AND(M2>0,NOT(N2=5),T2=""),(G2*(0.07/(1+(0.05+0.07)))),"")" 

非常感谢!!

处理大量数据时,使用公式维护速度会变慢。使用数据作为值是很好的。请注意,如果应用了任何公式,以下内容将替换为值。这只适用于第v栏,所以该栏的其余部分不清楚,所以请申请。

Sub test()
    Dim vDB As Variant, rngDB As Range
    Dim Ws As Worksheet
    Dim i As Long

    Set Ws = Sheets(1) '<~~ set your sheet name ; Sheets("CABC")

    Set rngDB = Ws.UsedRange
    vDB = rngDB

    For i = 2 To UBound(vDB, 1)
        'This apply to V column
        If vDB(i, 13) > 0 And vDB(i, 14) <> 5 And vDB(i, 20) = "" Then
            'vDB(i,22) is V Column
            vDB(i, 22) = vDB(i, 7) * (0.07 / (1 + (0.05 + 0.07)))
        Else
            vDB(i, 22) = ""
        End If
    Next i
    rngDB = vDB

End Sub

Sheet 图片

这是添加的代码。

Sub test()
    Dim vDB As Variant, rngDB As Range
    Dim Ws As Worksheet
    Dim i As Long

    Set Ws = Sheets(1) '<~~ set your sheet name ; Sheets("CABC")

    Set rngDB = Ws.UsedRange
    vDB = rngDB

    For i = 2 To UBound(vDB, 1)
        'This apply to V column
        If vDB(i, 13) > 0 And vDB(i, 14) <> 5 And vDB(i, 20) = "" Then
            'vDB(i,22) is V Column
            vDB(i, 22) = vDB(i, 7) * (0.07 / (1 + (0.05 + 0.07)))  'column V
            vDB(i, 24) = vDB(i, 7) * 0.19                          'column X
            vDB(i, 15) = vDB(i, 22) / vDB(i, 24)                   'column O

        Else
            vDB(i, 22) = ""
        End If
    Next i
    rngDB = vDB

End Sub