从VBA移动公式使用ActiveCell.Formula为一个单元连接每个规格

在试图通过VBA将公式粘贴到单元格M2中时,我没有得到它的工作,错误不明显。 Excel中的公式如下:

=IF(D2="",C2,IF(E2="",CONCATENATE(C2 &";"& D2),IF(F2="",CONCATENATE(C2&";"&D2&";"&E2),IF(G2="",CONCATENATE(C2&";"&D2&";"&E2&";"&F2),CONCATENATE(C2&";"&D2&";"&E2&";"&F2&";"&G2))))) 

在VBA中,我试图使用以下内容:

 Range("M2").Select ActiveCell.Formula = "=IF(D2="",C2,IF(E2="",CONCATENATE(C2" & "&""; """ & "&D2"),IF(F2="",CONCATENATE(C2" & "&""; """ & "&D2" & "&""; """ & "&E2",IF(G2="",CONCATENATE(C2" & "&""; """ & "&D2" & "&""; """ & "&E2" & "&""; """ & "&F2",CONCATENATE(C2" & "&""; """ & "&D2" & "&""; """ & "&E2" & "&""; """ & "&F2" & "&""; """ & "&G2")) 

即使这不起作用:

 ActiveCell.FormulaR1C1 = "=IF(D2="",C2,IF(E2="",CONCATENATE(C2 &"";""& D2),IF(F2="",CONCATENATE(C2&"";""&D2&"";""&E2),IF(G2="",CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2),CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2&"";""&G2)))))" 

整个代码如下:

 Sub PutBackTogether() ' ' PutBackTogether Macro ' ' Range("M2").Select ActiveCell.FormulaR1C1 = "=IF(D2="",C2,IF(E2="",CONCATENATE(C2 &"";""& D2),IF(2="",CONCATENATE(C2&"";""&D2&"";""&E2),IF(G2="",CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2),CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2&"";""&G2)))))" Range("M3").Select Columns("M:M").EntireColumn.AutoFit Range("M2").Select Selection.AutoFill Destination:=Range("M2:M147248") Range("M2:M147248").Select Columns("M:M").ColumnWidth = 17.29 Selection.Copy Range("C2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Columns("D:M").Select Selection.Delete Shift:=xlToLeft ActiveWorkbook.Save End Sub 

有人可以很容易地识别我的错误(s)的上下文吗?

您不能直接将string粘贴到VBA中, D2=""的引号正在被VBAparsing,而不是被放入公式中。

你必须加倍报价才能留在string中,像这样

 ActiveCell.Formula = "=IF(D2="""",C2,IF(E2="""",CONCATENATE(C2 &"";""& D2),IF(F2="""",CONCATENATE(C2&"";""&D2&"";""&E2),IF(G2="""",CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2),CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2&"";""&G2)))))" 

考虑直接使用范围,而不是先select它,如果你想继续build立macros,select/活动单元的东西将会很快让你感到厌烦,

代替

 Range("M2").Select ActiveCell.Formula = ... 

尝试

 Range("M2").Formula = ... 

适用于你在那里的一切

 Range("M2").AutoFill Destination:= Range("M2:M147248")