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