使公式成为VBA宏

时间:2015-08-10 20:11:21

标签: excel vba excel-vba

我收到了以下代码

    =LEFT(A2, MIN(ROW(INDIRECT("1:"&LEN(A2)))+(((CODE(MID(UPPER(A2),
         ROW(INDIRECT("1:"&LEN(A2))), 1))>64)*(CODE(MID(UPPER(A2), 
         ROW(INDIRECT("1:"&LEN(A2))), 1))<91))+
         ((CODE(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1))>47)*
         (CODE(MID(A2,  ROW(INDIRECT("1:"&LEN(A2))), 1))<58)))*1E+99)-1) 

我有这个代码和其他一些代码,但是如何将它变成适用于我整个工作簿的宏?我知道它在时间上可能与宏相同,但我最终希望在整个目录中循环它并有助于自动化进程。有没有办法让这个宏成为我​​的工作簿?

1 个答案:

答案 0 :(得分:1)

最粗暴的方式是:

    Range("J2:J5000").Formula = "=LEFT(A2, MIN(ROW(INDIRECT(""1:""&LEN(A2)))+(((CODE(MID(UPPER(A2), ROW(INDIRECT(""1:""&LEN(A2))), 1))>64)*(CODE(MID(UPPER(A2), ROW(INDIRECT(""1:""&LEN(A2))), 1))<91))+((CODE(MID(A2, ROW(INDIRECT(""1:""&LEN(A2))), 1))>47)*(CODE(MID(A2,  ROW(INDIRECT(""1:""&LEN(A2))), 1))<58)))*1E+99)-1)"

将您的确切公式放在范围内(并根据行参考更新自身)。显然,可以更改对列J的引用,并且可以使用rows.count).end(xlup).row使5000动态化,但不知道要使用哪些列,我只需要采用原始解决方案。

然而,根据您的“符号”可能是使用split命令的解决方案,很可能是更好的选择。你可以发布更多方向吗?然后我可以编辑这个答案并为你添加一个代码解决方案。

还包括一些样本数据和预期结果,可能需要10行才能为测试提供良好的设置

有关split命令如何工作的示例,请选择其中一个包含数据的单元格,您需要在下划线上拆分并转到VBE中的调试窗口(CTRL-G)并输入(包括问题)马克)然后按回车。

?split(Activecell.text,"_")(0)

现在将0更新为1并按Enter键。这将向您展示此命令的工作原理,它根据您提供的分隔符将字符串拆分为数组。

编辑:

此代码将执行您想要的操作,请注意如何使用Split。

Function GetFirstPart(SplitString As String)
Dim PosibleSplits As Variant, X As Long
PossibleSplits = Array("_", "+", "-")
For X = LBound(PossibleSplits) To UBound(PossibleSplits)
    If Len(SplitString) <> Len(Split(SplitString, PossibleSplits(X))(0)) Then
        GetFirstPart = Split(SplitString, PossibleSplits(X))(0)
        Exit For
    End If
Next
End Function

通过将代码粘贴到模块中来使用它,然后在工作表中使用它与任何其他公式=GetFirstPart(A1)相同,其中A1具有要拆分的字符串,向下拖动数据。

您可以在此行PossibleSplits = Array("_", "+", "-")

中添加其他分隔符