У меня проблемы с анализом текста из таблицы. У меня есть электронная таблица с сотнями записей, которые похожи на приведенный ниже пример (это все в одной ячейке):

7431340 03 POOLS E TECHNOLOGIES INC 90 NEW ENGLAND DRIVE 16 0.00 6,900 7,060

Мне нужно разобрать каждое из следующего в отдельные ячейки:

[7431340] [03 POOLS E TECHNOLOGIES INC] [90 NEW ENGLAND DRIVE] [7,060]

или как это будет выглядеть в листе Excel

Конечный результат в Excel с указанием первого числа в столбце A, номера плюс название компании в столбце B, адреса улицы в столбце C и последнего номера в строке в столбце D

У меня проблема в том, что данные для каждой записи противоречивы. Больше примеров:

7170258 111 HARBOR POINT OWNER LLC 115 TOWNE STREET 16 0.00 189,200 196,730
4469000 4 KIDZ INC 62 SOUTHFIELD AVENUE 16 0.00 3,000 9,500
6369875 3 HERMANOS LLC 912 EAST MAIN STREET 16 0.00 4,640 4 640

Я хотел бы избежать как можно большего количества ручных манипуляций, но боюсь, что мне не повезет.

Как мне проанализировать данные, если их формат не соответствует?

2 ответа2

0

Поскольку вы имеете дело с несколькими разделителями, в таком случае я хотел бы предложить вам два возможных решения.

Решение 1 (VBA Macro):

Function ReplaceAndSplit(ByRef Text As String, ByRef DelimChars As String) As String()
    Dim DelimLen As Long, Delim As Long
    Dim strTemp As String, Delim1 As String, Arr() As String, ThisDelim As String
    strTemp = Text
    Delim1 = Left$(DelimChars, 1)
    DelimLen = Len(DelimChars)
    For Delim = 2 To DelimLen
        ThisDelim = Mid$(DelimChars, Delim, 1)
        If InStr(strTemp, ThisDelim) <> 0 Then _
            strTemp = Replace(strTemp, ThisDelim, Delim1)
    Next
    ReplaceAndSplit = Split(strTemp, Delim1)
End Function

Как это устроено:

  1. Введите этот код как Модуль вместе с Листом.
  2. Напишите эту формулу в ячейке желаний, затем заполните ее вправо, пока не понадобится, нажмите F2 и завершите с помощью Ctrl+Shift+Enter .

    {=ReplaceAndSplit(A2,",")}

Замечания:

  1. "," для Comma как разделитель.
  2. Это должно быть " " для Space .
  3. "[ ]" для Brackets .

Решение 2 (Формула Excel):

=SUBSTITUTE(TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",256)),(COLUMNS($A:A)-1)*255+1,255)),"]","")

Замечания:

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

  1. SUBSTITUTE($A1,"," для Comma качестве разделителя.
  2. SUBSTITUTE($A1," " для Space как Разделитель.
  3. SUBSTITUTE($A1,"[" для Bracket качестве разделителя.
0

Если ваши примеры действительно репрезентативны, то существует шаблон, который можно извлечь с помощью регулярных выражений. Это может быть реализовано в Excel с использованием VBA.

Шаблон:

  • Начало строки
  • Серия цифр с последующим пробелом
  • Подстрока, которая начинается с одной или нескольких цифр и не содержит других цифр
  • вторая подстрока, которая начинается с одной или нескольких цифр и не содержит других цифр
  • несколько разделенных пробелами групп с запятыми, с необязательной запятой (возврат последней)

Все ваши примеры показывают эту модель. Вот пользовательская функция, которая будет обрабатывать это:

Option Explicit
Function extrAddressPart(sAddr As String, lPart As Long)
    Dim RE As Object, MC As Object
    Const sPat As String = "^(\d+)\s+(\d+\D+)\s+(\d+\D+)\s+.*\s+([\d,]+)$"

Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = sPat
    .MultiLine = True
    .Global = False
    If .Test(sAddr) = True Then
        Set MC = .Execute(sAddr)
        extrAddressPart = MC(0).submatches(lPart - 1)
    End If
End With
End Function

Конечно, если ваш пример не является действительно представительным, то это решение не будет работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .