В основном у меня есть очень длинный текст, содержащий несколько пробелов, специальных символов и т. д. В одной ячейке в файле 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-значным символом и 9-значным символом Только в тексте? Какие правила определяют, как символ может быть идентифицирован в текстовой строке?
Значит, в число 9 можно включить специальные символы? например * или (или%? Имеется ли определенный набор «специальных» символов? Вы произносите слова в одной точке, а символы - в другой.
Извините, чтобы уточнить: строка из 9 символов может быть где угодно, нет правила, что находится до или после них, они могут быть рядом друг с другом или просто в начале и в конце этой стены текста, здесь нет правил, текст случайный, взят из какой-то системы, может содержать даты и т. д. что угодно ... Символы всегда состоят из 9 символов, и это не единственные 9 символьных символов в тексте. Я называю их символами, но они должны состоять только из цифр и букв. Могут быть только цифры, но не только буквы. Надеюсь, это поможет.
Попробуйте этот код
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 Ничего не получил. Между словами и цифрами несколько пробелов
Каков ожидаемый результат? Вы должны поместить больше примеров с желаемым результатом. Код будет таким же, просто изменим шаблон регулярного выражения.
Да! Выглядит очень хорошо, спасибо! По-прежнему есть две незначительные проблемы: когда есть более одного результата, например, в A1, каждый из них идет отдельно к B1, затем к C1, затем к D1 вместо B1> B2> B3. И тогда я бы хотел, чтобы в столбце B не было пробелов, когда нет совпадения, только следующий результат из другой строки, если это возможно? Еще раз спасибо!
Test2 имеет только один правильный вывод в B1, и все, на этом он останавливается, поэтому он не работает.
Я протестировал на ваших примерах и смог извлечь все правильные результаты .. Работает на меня. Пожалуйста, поместите несколько снимков ввода и вывода после выполнения кода
Вы должны поместить весь свой ввод в A1, если вы будете иметь дело с Test2
Вы правы, спасибо. Есть ли возможность совмещения Test1 и Test2? Ввод в нескольких ячейках А, вывод только в ячейках В, одна под другой?
Я обновил код в соответствии с вашими потребностями .. Я не получил балла за все эти изменения :)
Работает как шарм, спасибо! У меня недостаточно репутации, чтобы мои голоса были опубликованы, но это должно быть записано, еще раз спасибо! :)
Этот фрагмент кода почти готов ... просто нужно проверить строки ... но 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
Если бы кто-то мог помочь установить проверку строки ... я думаю, это сработало бы.
Всегда ли есть дата прямо перед первой строкой из 9 символов? Всегда ли вторая строка идет на две строки после первой? Еще примеры, пожалуйста.