我在Excel中运行宏时遇到问题(Mac上的第15版365)。它在这一部分失败了:
Dim LastRow2 As Long
LastRow2 = Range("A65000").End(xlUp).Row
Range("AV2").Select
ActiveCell.FormulaR1C1 = _
"=IF(OR(AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-40]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-39]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-38]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-34]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-33]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-32]<1),AND(RC[" & _
"ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-31]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-30]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-29]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-28]<1)),""Error"",""Good"")"
Selection.AutoFill Destination:=Range("AV2:AV" & LastRow2)
我无法弄清楚为什么......我没有看到任何错误。任何帮助,将不胜感激。
答案 0 :(得分:1)
分解你的公式可以大大减少!
原始分解:
"=IF(
OR(
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-40]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-39]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-38]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-34]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-33]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-32]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-31]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-30]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-29]<1),
AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-28]<1)
),
""Error"",""Good"")"
可以实现:
"=IF(
AND(
RC[-41]<>""ZZ"",
RC[-27]=""I"",
RC[-26]=""n"",
OR(
RC[-40]<1,
RC[-39]<1,
RC[-38]<1,
RC[-34]<1,
RC[-33]<1,
RC[-32]<1,
RC[-31]<1,
RC[-30]<1,
RC[-29]<1,
RC[-28]<1
)
),""Error"",""Good"")"
将此项设置为模块顶部的Private Const
,以便于维护。
Option Explicit
Private Const AV_ErrOrGood As String = "=IF(AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"", OR(RC[-40]<1,RC[-39]<1,RC[-38]<1,RC[-34]<1,RC[-33]<1,RC[-32]<1,RC[-31]<1,RC[-30]<1,RC[-29]<1,RC[-28]<1)),""Error"",""Good"")"
Sub SO45177305()
Dim LastRow2 As Long
LastRow2 = Range("A" & Rows.Count).End(xlUp).Row
Range("AV2:AV" & LastRow2).FormulaR1C1 = AV_ErrOrGood
End Sub