Как добавить строку в ячейку, если она соответствует определенному условию?

#vba

Вопрос:

Я пытаюсь написать код, который добавляет строку в начало/середину/конец, если она сначала не существует в ячейке.

В ячейке содержится исходный текст:

 T - xxxxx
O - xxxxx
P - xxxxx
 

В некоторых ячейках у него нет T/O/P, и поэтому я должен написать:

 T - xxxxx
O - None
P - None
 

Есть ли способ проверить, нет ли в нем сначала инструкции, а затем добавить строку спереди/посередине/в конце?

 For i = 5 To Cells(Rows.Count, "F").End(xlUp).Row

If InStr(Cells(i, "F").Value, "T -") Then
    Cells(i, "F").Value = Cells(i, "F").Value
Else
    Cells(i, "F").Value = "T - None" amp; vbCrLf amp; Cells(i, "F")
End If

If InStr(Cells(i, "F").Value, "O -") Then
    Cells(i, "F").Value = Cells(i, "F").Value
Else
    Cells(i, "F").Value = Cells(i, "F") amp; vbCrLf amp; "O - None"
End If

If InStr(Cells(i, "F").Value, "P -") Then
    Cells(i, "F").Value = Cells(i, "F").Value
Else
    Cells(i, "F").Value = Cells(i, "F") amp; vbCrLf amp; "P - None"
End If

Next i

End Sub
 

Хотя я не уверен, что делает InStr.

Ответ №1:

InStr функция находит позицию указанной подстроки в строке и возвращает первую позицию ее вхождения. Если вхождение данной строки не найдено, то оно возвращает ноль. Поэтому, если мы хотим проверить, находится ли String2 он внутри String1 , нам нужно оценить InStr(String1, String2) > 0

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

 Sub test()

Dim text As String
text = "T - xxxxx" amp; vbNewLine amp; "O - xxxxx"
Dim Components(3) As String
Components(0) = "T -"
Components(1) = "O -"
Components(2) = "P -"

text = WorksheetFunction.Trim(text)
For Each comp In Components
    If InStr(text, comp) <= 0 Then 'If component is not present
        text = text amp; vbNewLine amp; comp amp; " None"
    End If
Next

Debug.Print text
'prints
'T - xxxxx
'O - xxxxx
'P - None
End Sub