Как мне перевести их в стандартный формат 1234567-01 с помощью VBA? - PullRequest
0 голосов
/ 09 сентября 2011

Как мне отформатировать эти

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 ]

3 голосов
/ 09 сентября 2011

В VBA просто замените хитроумные _ & - символы & reformat;

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
2 голосов
/ 09 сентября 2011

Если вы ищете высокую производительность, вы можете удовлетворить свои требования, используя функцию листа Excel, а не VBA.

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

Предполагая, что целевой диапазон начинается в ячейке A1, введите его в первую строку ископировать весь диапазон.Excel на моем компьютере сделал c.45 000 строк за <1 секунду. </p>

(Примечание: я предлагаю этот подход только потому, что вы пометили свой вопрос как excel-vba)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...