#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