我收到了以下代码
=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)
我有这个代码和其他一些代码,但是如何将它变成适用于我整个工作簿的宏?我知道它在时间上可能与宏相同,但我最终希望在整个目录中循环它并有助于自动化进程。有没有办法让这个宏成为我的工作簿?
答案 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("_", "+", "-")