如何格式化这些
123-4267-01
12-34-56-701
1234567-01
1-2345-6701
12345670-1
123456701
1234567_01
and more fromats, note it may have - or may be _ in between
现在我必须将上述类型转换为这些标准
1234567-01
可能我认为我应该去寻找但是我必须使用xlatwhole或xlat?或者有没有比找到更好的解决方案,因为我有4000行,所以我需要比循环更好的性能。
我可能有数字以外的其他数字。
答案 0 :(得分:3)
使用VBA,只需更换狡猾的_
& -
字符&重新格式化;
Public Function fixup(sValue As String) As String
fixup = Replace$(sValue, "_", "")
fixup = Replace$(fixup, "-", "")
fixup = Left$(fixup, Len(fixup) - 2) & "-" & Right$(fixup, 2)
End Function
或者删除任何非数字;
Public Function fixup(sValue As String) As String
Dim i As Long
For i = 1 To Len(sValue)
If Not IsNumeric(Mid$(sValue, i, 1)) Then Mid$(sValue, i, 1) = "!"
Next
fixup = Replace$(sValue, "!", "")
fixup = Left$(fixup, Len(fixup) - 2) & "-" & Right$(fixup, 2)
End Function
答案 1 :(得分:2)
如果您正在寻找快速性能,您可以使用Excel工作表功能而不是VBA来满足您的要求。
=LEFT(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""),LEN(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""))-2)&"-"&RIGHT(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""),2)
假设您的目标范围在单元格A1中开始,请将其键入第一行并向下复制整个范围。我的电脑上的Excel做了c。 < 45,000行< 1秒。
(注意:我只建议采用这种方法,因为您已将问题标记为excel-vba)