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

问题描述 投票:1回答:1

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

所以我的条件是

如果M列中的单元格有一个值,并且N列不等于5,T列为空,那么在该行的V列中插入这个公式:

列G * (0.19) 如果满足同样的条件,在第X列中插入这个公式:

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

M列 X列 如果这三个条件中的任何一个都不满足,那么就不要做任何事情,移动到下一行,然后继续

对工作表 "CABC "和工作表 "CXYZ "中的每一行都这样做(行数随着每个工作表的变化而变化,因此我需要包括最后一行计数)另外,有时在一个新的工作簿中,这些工作表中的一个或两个都不在那里,因此我需要一个错误处理程序来继续前进,以防它找不到工作表。

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

这是IF AND公式,是为我工作的列V然而,当我把它插入VBA中,它不工作(不工作作为.range. formula或作为.range. formulaR1C1从记录的宏)公式。

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

非常感谢!

excel vba if-statement excel-formula nested-loops
1个回答
0
投票

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

表格图片

enter image description here

这是添加的代码。

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
© www.soinside.com 2019 - 2024. All rights reserved.