#excel #vba
#excel #vba
Вопрос:
Я пытаюсь создать функцию типа =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) amp; getStr
Else
Exit For
End If
Next
getStr = getStr amp; "@"
For p = Index1 1 To Len(extractStr)
If Mid(extractStr, p, 1) Like CheckStr Then
getStr = getStr amp; Mid(extractStr, p, 1)
Else
Exit For
End If
Next
Index = Index1 1
If OutStr = "" Then
OutStr = getStr
Else
OutStr = OutStr amp; Chr(10) amp; getStr
End If
Else
Exit Do
End If
Loop
ExtractEmailFun = OutStr
End Function
Комментарии:
1. Какова ваша общая цель и каков источник данных? Если ваша цель — создать таблицу, то
Power Query
вы можете сделать это довольно легко. Если вам нужно, чтобы элементы были разделены по какой-либо другой причине, одним из способов является использование регулярных выражений.2. Если ваши данные в формате JSON, то есть лучшие способы приблизиться к этому.
3. Находятся ли эти строки в ячейке? И все ли записи имеют форму «Имя»: «Оперативная память», «Телефон»: «9898989898», «Электронная почта»: «abcd@gmail.com »
4. Да, это формат JSON, и он находится в одной ячейке, из которой я пытаюсь извлечь
Ответ №1:
Ваши НЕОБРАБОТАННЫЕ данные, похоже, соответствуют формату 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
Этот пример кода чрезмерно упрощен (не имеет никакой обработки ошибок), но это должно помочь вам начать.
Ответ №2:
Как насчет:
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
Это предполагает, что все ваши данные соответствуют одной и той же схеме. Варианты будут:
=extractinfo(A1,"Name")
=extractinfo(A1,"Phone")
=extractinfo(A1,"Email")
Вы также можете использовать Case
для этого.
Комментарии:
1. это работает отлично, это то, что я искал, чем вы так много