Извлечение определенных слов из одной ячейки, содержащей текстовую строку

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

Я ищу: символы, которые всегда имеют длину 9 знаков и всегда содержат хотя бы одно число (до 9).

Итак, для примера в A1 у меня есть:

 euhe: djj33 dkdakofja.   kaowdk ---------- jffjbrjjjj j jrjj 08/01/2222 999ABC123   
 fjfjfj 321XXX888 .... ........ 123456789AA

И в итоге хочу иметь:

999ABC123 in B1

и

321XXX888 in B2.

Прямо сейчас я делаю это, используя функцию Text to columns, а затем просто ищу определенные слова вручную, но иногда объем настолько велик, что требуется слишком много времени, и было бы круто автоматизировать это.

Может кто-нибудь помочь с этим? Спасибо!

Обновлено: Еще примеры:

INPUT: '10/01/2016 1,060X 8.999%!!! 1.33 0.666 928888XE0'
OUTPUT: '928888XE0'

INPUT: 'ABCDEBATX ..... ,,00,001% 20///^^ addcA7 7777a 123456789 djaoij8888888 0.000001 12@'
OUTPUT: '123456789'

INPUT: 'FAR687465 B22222222 __ djj^66 20/20/20/20 1:'
OUTPUT: 'FAR687465' in B1 'B22222222' in B2

INPUT: 'fil476 .00 20/.. BUT AAAAAAAAA k98776 000.0001'
OUTPUT: 'blank'

Чтобы уточнить: строка из 9 символов может быть где угодно, нет правила, что находится до или после них, они могут быть рядом друг с другом или просто в начале и в конце этой стены текста, здесь нет правил, текст random, взятый из какой-либо системы, может содержать даты и т.д. что угодно ... Символы всегда состоят из 9 символов, и это не единственные 9 символьных символов в тексте. Я называю их символами, но они должны состоять только из цифр и букв. Могут быть только цифры, но не только буквы. Ячейка A1 может содержать несколько пробелов / табуляции между словами / символами.

Также, если возможно, сделать это не только для A1, но и для всего столбца A, пока не будет найдена первая пустая ячейка.

Всегда ли есть дата прямо перед первой строкой из 9 символов? Всегда ли вторая строка идет на две строки после первой? Еще примеры, пожалуйста.

dwirony 08.08.2018 22:12

Являются ли символы всегда 9-значным символом и 9-значным символом Только в тексте? Какие правила определяют, как символ может быть идентифицирован в текстовой строке?

PeterT 08.08.2018 22:24

Значит, в число 9 можно включить специальные символы? например * или (или%? Имеется ли определенный набор «специальных» символов? Вы произносите слова в одной точке, а символы - в другой.

QHarr 08.08.2018 22:32

Извините, чтобы уточнить: строка из 9 символов может быть где угодно, нет правила, что находится до или после них, они могут быть рядом друг с другом или просто в начале и в конце этой стены текста, здесь нет правил, текст случайный, взят из какой-то системы, может содержать даты и т. д. что угодно ... Символы всегда состоят из 9 символов, и это не единственные 9 символьных символов в тексте. Я называю их символами, но они должны состоять только из цифр и букв. Могут быть только цифры, но не только буквы. Надеюсь, это поможет.

samadam 08.08.2018 23:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
290
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте этот код

Sub Test()
Dim r           As Range
Dim i           As Long
Dim m           As Long

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "\b[a-zA-Z\d]{9}\b"

    For Each r In Range("A1", Range("A" & Rows.Count).End(xlUp))
        If .Test(r.Value) Then
            For i = 0 To .Execute(r.Value).Count - 1
                If CBool(.Execute(r.Value)(i) Like "*[0-9]*") Then
                    m = IIf(Cells(1, 2).Value = "", 1, Cells(Rows.Count, 2).End(xlUp).Row + 1)
                    Cells(m, 2).Value = .Execute(r.Value)(i)
                End If
            Next i
        End If
    Next r
End With
End Sub

Спасибо, но это не сработало. Пытался запустить его с помощью приведенного ниже примера в A1: 10/01/2016 1,060X 8,999% !!! 1.33 0.666 928888XE0 Ничего не получил. Между словами и цифрами несколько пробелов

samadam 08.08.2018 23:43

Каков ожидаемый результат? Вы должны поместить больше примеров с желаемым результатом. Код будет таким же, просто изменим шаблон регулярного выражения.

YasserKhalil 09.08.2018 00:00

Да! Выглядит очень хорошо, спасибо! По-прежнему есть две незначительные проблемы: когда есть более одного результата, например, в A1, каждый из них идет отдельно к B1, затем к C1, затем к D1 вместо B1> B2> B3. И тогда я бы хотел, чтобы в столбце B не было пробелов, когда нет совпадения, только следующий результат из другой строки, если это возможно? Еще раз спасибо!

samadam 09.08.2018 21:34

Test2 имеет только один правильный вывод в B1, и все, на этом он останавливается, поэтому он не работает.

samadam 10.08.2018 22:00

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

YasserKhalil 11.08.2018 06:24

Вы должны поместить весь свой ввод в A1, если вы будете иметь дело с Test2

YasserKhalil 11.08.2018 06:26

Вы правы, спасибо. Есть ли возможность совмещения Test1 и Test2? Ввод в нескольких ячейках А, вывод только в ячейках В, одна под другой?

samadam 11.08.2018 21:40

Я обновил код в соответствии с вашими потребностями .. Я не получил балла за все эти изменения :)

YasserKhalil 12.08.2018 00:36

Работает как шарм, спасибо! У меня недостаточно репутации, чтобы мои голоса были опубликованы, но это должно быть записано, еще раз спасибо! :)

samadam 13.08.2018 21:25

Этот фрагмент кода почти готов ... просто нужно проверить строки ... но Excel вылетает в строке кода Str

Sub Test()
    Dim Outputs, i As Integer, LastRow As Long, Prueba, Prueba2
    Outputs = Split(Range("A1"), " ")
    For i = 0 To UBound(Outputs)
        If Len(Outputs(i)) = 9 Then
            Prueba = 0
            Prueba2 = 0
            On Error Resume Next
            Prueba = Val(Outputs(i))
            Prueba2 = Str(Outputs(i))
            On Error GoTo 0
            If Prueba <> 0 And Prueba2 <> 0 Then
                LastRow = Range("B10000").End(xlUp).Row + 1
                Cells(LastRow, 2) = Outputs(i)
            End If
        End If
    Next i

End Sub

Если бы кто-то мог помочь установить проверку строки ... я думаю, это сработало бы.

Другие вопросы по теме