UDF для извлечения определенных данных из общей строки - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь создать функцию, подобную = Extractinfo ("A2", "Name"), которая может извлекать имя, телефон и идентификатор электронной почты из необработанных данных, одну функцию для всех 3 извлечений, у меня уже есть функция дляизвлечь идентификатор электронной почты

 Raw Data

"Name":"Ram","Phone":"9898989898","Email":"abcd@gmail.com"
"Name":"Raju","Phone":"2323232323","Email":"xyz123@gmail.com"
"Name":"Rameshsing","Phone":"555999999","Email":"rameshsing@gmail.com"

(Function to extract)          (Expected Result)
=Extractinfo("A2","Name")      Ram
=Extractinfo("A2","Name")      Raju
=Extractinfo("A4","Name")      Rameshsing


Function ExtractEmailFun(extractStr As String) As String

 Dim CharList As String
 On Error Resume Next
CheckStr = "[A-Za-z0-9._-]"
OutStr = ""
Index = 1
Do While True
Index1 = VBA.InStr(Index, extractStr, "@")
getStr = ""
If Index1 > 0 Then
    For p = Index1 - 1 To 1 Step -1
        If Mid(extractStr, p, 1) Like CheckStr Then
            getStr = Mid(extractStr, p, 1) & getStr
        Else
            Exit For
        End If
    Next
    getStr = getStr & "@"
    For p = Index1 + 1 To Len(extractStr)
        If Mid(extractStr, p, 1) Like CheckStr Then
            getStr = getStr & Mid(extractStr, p, 1)
        Else
            Exit For
        End If
    Next
    Index = Index1 + 1
    If OutStr = "" Then
        OutStr = getStr
    Else
        OutStr = OutStr & Chr(10) & getStr
    End If
Else
      Exit Do
End If
Loop
ExtractEmailFun = OutStr
End Function

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Ваши RAW-данные, похоже, соответствуют формату JSON. Одна вещь, которую можно сделать, - это использовать модуль (например, этот , который работал очень хорошо для меня), чтобы проанализировать его (т.е. навести в нем какой-то порядок, чтобы вы могли легко получить искомый результат ).

Следуйте простым инструкциям , чтобы добавить этот модуль в проект VBA (не забудьте добавить справочник по Microsoft.Scripting!). Тогда ваша функция будет выглядеть так:

Public Function Extractinfo(byval CompleteString as String, byval FieldName as String) as String

    Dim JSON as Object
    Set JSON = JsonConverter.ParseJson(CompleteString)

    ExtractInfo = JSON(FieldName)

End Function

Этот пример кода чрезмерно упрощен (не имеет обработки ошибок), но с этого следует начать.

1 голос
/ 17 апреля 2019

Как насчет:

Public Function ExtractInfo(s As String, choice As String) As String

    dq = Chr(34)
    arr = Split(s, dq)

    If choice = "Name" Then
        ExtractInfo = arr(3)
        Exit Function
    End If

    If choice = "Phone" Then
        ExtractInfo = arr(7)
        Exit Function
    End If

    If choice = "Email" Then
        ExtractInfo = arr(11)
        Exit Function
    End If

    ExtractInfo = "bad data"
End Function

enter image description here

Предполагается, что все ваши данные соответствуют одной и той же схеме.Возможные варианты:

=extractinfo(A1,"Name")
=extractinfo(A1,"Phone")
=extractinfo(A1,"Email")

Для этого вы также можете использовать Case.

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