如何使用vba将它们转换为标准格式1234567-01?

时间:2011-09-09 13:08:19

标签: vba excel-vba excel

如何格式化这些

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行,所以我需要比循环更好的性能。

我可能有数字以外的其他数字。

2 个答案:

答案 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)