Як я можу дивитися в комірку з VBA, щоб знайти конкретний текст, а потім витягти його?


0

У мене є стовпець, який може містити клітини, які мають дані, які розділені на | роздільник. Мені потрібно вміти переглядати кожну клітинку і знаходити конкретний текст, а якщо знайдений - витягти весь текст між |

Наприклад: клітинка A2 має blue story 1|red tree 2|orange flower 3|green car 4

Я хочу бути в змозі витягти red tree 2 за допомогою функції InStr (Якщо є краща функція, будь ласка, порадьте!)

Ось код, який я наразі маю:

Sub test()

Dim Field As Variant, rng As Range, cell As Range
Set rng = Range("A1:A5")

For Each cell In rng.Cells
    If InStr(cell.Value, "Red") > 0 Then
    Field = Split(cell.Value, "|")
    Cells(cell.Row, 2).Value = Field
    End If
Next

End Sub

Існує явна логічна помилка, оскільки вона виводить перші тексти | в масиві, а не фактичний, що містить "Червоний".

Редагувати: мені потрібно, щоб він міг знайти "Червоний" у будь-якому масиві, і якщо він виведе цей масив у стовпці поруч з ним.

Відповіді:


2

Ви не надто далеко: Split () повертає масив рядків на основі 0:

Split Array (0): blue story 1
Split Array (1): red tree 2
Split Array (2): orange flower 3
Split Array (3): green car 6

щоб виправити код, потрібно перевірити кожне значення в масиві:

Public Sub test()
    Dim fld As Variant, rng As Range, cell As Range, i As Long

    Set rng = Range("A1:A5")

    For Each cell In rng.Cells
        If InStr(1, cell.Value, "Red", vbTextCompare) > 0 Then
            fld = Split(cell.Value, "|")
            For i = 0 To UBound(fld)
                If InStr(1, fld(i), "Red", vbTextCompare) > 0 Then
                    Cells(cell.Row, 2).Value = fld(i)
                    Exit For
                End If
            Next
        End If
    Next
End Sub

Можна також використовувати текст у стовпці або формулу, подібну до цієї

=MID(A2,SEARCH("Red",A2,1),SEARCH("|",A2,SEARCH("Red",A2,1))-SEARCH("Red",A2,1))

Дякую, але що, якщо червоний не в масиві 1? Я тільки привела приклад, але, скажімо, червоний може бути в будь-якому місці масиву.
NuWin

Крім того, THX ви для альтернатив, однак, при використанні цього в реальному середовищі для того, що я намагаюся зробити, на відміну від прикладу, текст у стовпці б більше головного болю, тому що я буду використовувати це на даних, які містять дуже довгий текст і 8 + роздільники.
NuWin

Якщо червоний не знайдено, код не виведе нічого. Щоб отримати більше альтернатив, потрібно надати більше контексту: як виглядає весь аркуш раніше і як ви очікуєте, щоб він виглядав після . Наприклад, якщо ви змушені перебирати кожну клітинку, ви можете копіювати кожен стовпець в масив і виконувати порівняння в пам'яті (набагато більше), але де ви хочете розмістити результати? (інший аркуш?). Також можна використовувати автофільтр: ActiveSheet.UsedRange.Columns(1).AutoFilter Field:=1, Criteria1:="=*Red*", (багато варіантів залежно від того, що ви намагаєтеся виконати)
paul bica

Але в контексті вашого первинного питання (приклад) - чи вирішує проблема?
paul bica

Технічно це, однак, мені потрібно, щоб він міг переглядати список масивів і знаходити, наприклад, "Червоний", і, якщо знайдений, вивести на стовпець поруч з ним. Червоний не завжди буде в масиві, який відомий як у наведеному вами прикладі.
NuWin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.