首页 > 解决方案 > VBA在列中的单元格中插入公式以在满足多个IF AND条件时进行计算

问题描述

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

所以我的条件是:

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

G 列 * (0.19) 此外,如果满足相同条件,请在 X 列中插入此公式:

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

列 M/列 X 如果不满足 3 个条件中的任何一个,则不执行任何操作并移至下一行并继续

对工作表“CABC”和工作表“CXYZ”中的每一行执行此操作(每个工作表的行数更改,因此我需要最后一行计数)此外,有时在新工作簿中,这些工作表中的一个或两个不会存在所以如果找不到工作表,我需要一个错误处理程序继续前进。

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

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

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

太感谢了!!

标签: excelvbaif-statementexcel-formulanested-loops

解决方案


在处理大量数据时,使用公式来保持速度会变慢。将数据用作值是很好的。请注意,如果应用了任何公式,以下内容将替换为值。这仅适用于第 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

工作表图像

在此处输入图像描述

这是添加的代码。

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

推荐阅读