Как извлечь в Excel определенные строки, начинающиеся со слова из строки, содержащей несколько строк, разделенных запятыми? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть следующая строка в Excel: ['молоко', 'молоко с медом', 'хлеб', 'молоко с хлебом', 'масло', 'молоко с маслом'] Я хочу иметь возможность извлечь все строки, начинающиеся со слова «молоко» либо в отдельных столбцах, либо в одном и том же столбце. Экстракт должен выглядеть так: молоко, молоко с медом, молоко с хлебом, молоко с маслом.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Для простоты предположу, что ваша начальная строка выглядит следующим образом:

молоко, молоко с медом, хлеб, молоко с хлебом, масло сливочное, молоко с маслом

... и что он хранится в cell A1 листа с именем Sheet1.

Первое, что я хотел бы сделать, чтобы облегчить свою жизнь, это использовать Text to Columns и определите comma как разделитель. Это разделит вашу исходную строку на столько ячеек, сколько потребуется, первая будет сохранена в A1.

Затем, чтобы найти, какая из отдельных строк начинается со слова milk, и объединить их в одна новая строка с именем output, я бы сделал следующее:

Option Explicit

Sub milk()
Dim output As String
Dim inputRng As Range, cell As Range
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("Sheet1")
output = ""
With sht
    Set inputRng = .Range(.Range("A1"), .Cells(1, .Columns.Count).End(xlToLeft))
End With
For Each cell In inputRng.Cells
    If InStr(1, cell.Value, "milk") = 1 Then
        output = output & cell.Value & ", "
    End If
Next cell
MsgBox output
End Sub
0 голосов
/ 17 февраля 2020

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

Sub extract_string()

Dim l As Long
Dim search_string As String
Dim next_item As Integer
Dim next_col As Integer

search_string = Cells(1, 1).Value

For l = 1 To Len(search_string) 'loop through string

    If (Mid(search_string, l, 4) = "milk") Then 'check, if milk

        On Error GoTo Last_Item
        next_item = WorksheetFunction.Find(",", search_string, l + 1)

        next_col = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column + 1 'find end

        If (next_item <> 0) Then

            Cells(1, next_col).Value = Mid(search_string, l, next_item - l)

        Else
Last_Item:
            Cells(1, next_col + 1).Value = Mid(search_string, l, Len(search_string) - l + 1) 'last item handling

        End If

    End If

next_item = 0

Next l

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...