Преобразование данных в Excel - PullRequest
0 голосов
/ 24 февраля 2019

Скажем, у меня есть эта большая база данных с данными различного типа, такими как 567, 6788, 456, смешанными с данными другого типа, такими как: 45,67;78,78;и т. д. Я пытаюсь преобразовать все значения, между которыми нет точки, например 567 в 56,7, 6788 в 67,88 и т. д. Я попробовал метод: разбить данные на два столбца и затем использовать формулу concat в Excel,но он не удерживает ведущий ноль, если встречает его.Кто-нибудь знает, что формула делает это автоматически, так как моя база данных очень большая?спасибо

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019
'45.67   --->    45.67
'78.78   --->    78.78
'567     --->    56.7
'6788    --->    67.88

Option Explicit
Public Function add_dot(actRange As Range) As String
    If actRange.Value Like "*.*" Then
        add_dot = actRange.Value
    Else
        add_dot = Left(actRange.Value, 2) & "." & Mid(actRange.Value, 2) ', Len(actRange.Value) - 2)
    End If
End Function
0 голосов
/ 24 февраля 2019

В VBA вы можете использовать для этого регулярное выражение -> Использовать выражение регулярного выражения: "(\ d +)"

Вот функция, которая может использоваться для этого.

Public Function RegexExtractAll(ByVal text As String, _
                      ByVal extract_what As String, _
                      Optional separator As String = "") As String()

    ' This function takes a text, a regex expression and an optional separator character (default is "").
    ' It uses vbscript.regexp to delivers all matches and sub matches of the regex as a string array.

    Dim allMatches As Variant
    Dim RE As Object
    Set RE = CreateObject("vbscript.regexp")
    Dim i As Long, j As Long
    Dim result() As String

    RE.Pattern = extract_what
    RE.Global = True

    On Error Resume Next
    Set allMatches = RE.Execute(text)

    If Not (IsEmpty(allMatches) Or (allMatches.Count = 0)) Then

        ReDim result(allMatches.Count - 1)

        For i = 0 To allMatches.Count - 1
            For j = 0 To allMatches.Item(i).submatches.Count - 1
                result(i) = result(i) & (separator & allMatches.Item(i).submatches.Item(j))
            Next
        Next

    End If

    RegexExtractAll = result

End Function 'RegexExtractAll

Дляпроверить, что это работает:

Sub SomeTest()

    ' The RegexExtractAll will return an array with the matches.
    ' By using Join() we merge them to one string.
    Debug.Print Join(RegexExtractAll("655.44,32", "(\d+)"), "")

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