2011-09-09 25 views
1

我如何格式化這些如何使用vba將它們轉換爲標準格式1234567-01?

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行,所以我需要比循環更快的性能。請幫助我的緊迫和即時的壓力吧!幫助與10點到每一個人,25大爲讚賞,以最有效的

我可能比其他數字號碼

+0

所有的字符都是數字嗎? – JNK

回答

2

如果您正在尋找快速性能,您可以使用Excel工作表函數而不是VBA來滿足您的要求。

=LEFT(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""),LEN(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""))-2)&"-"&RIGHT(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""),2) 

假設您的目標範圍從單元格A1開始,請在第一行中輸入此值並複製整個範圍。我的電腦上的Excel做了c。在< 1秒內有45,000行。 (注:我只是建議這種方法,因爲你已經將你的問題標記爲excel-vba)

+0

nyc我喜歡它盧克+1讓我看到更多的答案,然後接受最好的! – niko

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 
相關問題