【问题标题】:VBA to insert in a cell in a column a formula to calculate when multiple IF AND conditions are metVBA在列中的单元格中插入一个公式以在满足多个IF AND条件时进行计算
【发布时间】:2020-08-06 02:08:33
【问题描述】:

我一直坚持编写 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)))),"")" 

非常感谢!!

【问题讨论】:

  • 您需要在 VBA 中将引号加倍。
  • column M/ Column X formula : 哪一列是公式?

标签: excel vba if-statement excel-formula nested-loops


【解决方案1】:

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

【讨论】:

  • 非常感谢!它工作得很好!您介意告诉我如何调整公式以使其返回绝对值吗?谢谢!
  • @ZepiQuinto,我编辑了答案。但是,我没有完全理解你的问题。
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多