使用VBA评估公式并将结果添加到范围

我已经写了一个macros来准备一些文件,并希望在每行中添加下面的公式作为这个自动化的一部分。 公式是一样的每行但麻烦的是公式是非常长的。

=UPPER(CONCATENATE(IF(J2=0,"",AlphaNumericOnly(SUBSTITUTE(J2,"0",""))),IF(M2=0,"",LEN(M2)),IF(N2=0,"",UPPER(AlphaNumericOnly(SUBSTITUTE(N2,"0","")))),IF(P2=0,"",UPPER(AlphaNumericOnly(SUBSTITUTE(P2,"0","")))),IF(R2=0,"",UPPER(AlphaNumericOnly(SUBSTITUTE(R2,"0","")))),IF(W2=0,"",UPPER(AlphaNumericOnly(SUBSTITUTE(W2,"0","")))),IF(X2=0,"",UPPER(AlphaNumericOnly(SUBSTITUTE(X2,"0","")))),IF(Y2=0,"",UPPER(AlphaNumericOnly(SUBSTITUTE(Y2,"0","")))),IF(Z2=0,"",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Z2,"-","1"),".",""),"0","")),IF(AD2=0,"",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AD2,"-","1"),".",""),"0","")))) 

我已经尝试录制正在添加的公式以帮助,但是结果中删除了部分macros。 就好像它太长了。

任何人都可以提供一个方法来将这个公式添加到每一行? 我已经读过,你可以评估一个公式结果vba并返回结果,而不是将公式添加到工作表。 我应该看看这条路线吗?

在模块表的顶部放置这个声明(在Option Explicit如果有的话)。

 Public Const csFORMULA = "=UPPER(CONCATENATE(IF(J2=0,"""",AlphaNumericOnly(SUBSTITUTE(J2,""0"",""""))),IF(M2=0,"""",LEN(M2)),IF(N2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(N2,""0"","""")))),IF(P2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(P2,""0"","""")))),IF(R2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(R2,""0"","""")))),IF(W2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(W2,""0"","""")))),IF(X2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(X2,""0"","""")))),IF(Y2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(Y2,""0"","""")))),IF(Z2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Z2,""-"",""1""),""."",""""),""0"","""")),IF(AD2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AD2,""-"",""1""),""."",""""),""0"",""""))))" 

现在你可以将公式填入任何范围。 例:

 Range("L2:L10").Formula = csFORMULA 'Range("L2:L10") = Range("L2:L10").Value 

第二个注释行是为了防止您想要从插入的公式返回值。 请注意,我正在使用.Formula而不是.FormulaR1C1