Вот альтернативный способ сделать то, что вы пытаетесь достичь. Я считаю, что это дает вам больше контроля, чем Find
и Replace
.
' Get the contents of the cell
Dim s As String
s = Range("A1").Value
' Now write back only what precedes the double space
Range("A1").Value = Left(s, InStr(s, " ") - 1)
Вышеуказанное действует только на одну ячейку. Чтобы сделать то же самое для многих ячеек, вы можете сделать это:
Dim cell As Range
For Each cell In Range("A1:A3")
cell.Value = Left(cell.Value, InStr(cell.Value, " ") - 1)
Next cell
Как указывалось в других ответах, вы должны заменить любые проблемные неразрывные пробелы (Chr(160)
) на обычные пробелы, прежде чем искать двойные пробелы:
Dim cell As Range
For Each cell In Range("A1:A3")
cell.Value = Left(cell.Value, _
InStr(Replace(cell.Value, Chr(160), " "), " ") - 1)
Next cell
РЕДАКТИРОВАТЬ Обращаясь к комментарию @chris neilsen:
Если в некоторых ваших целевых клетках отсутствуют двойные пробелы, вам следует проверить это перед использованием функции Left
, чтобы она не вызвала ошибку:
Dim cell As Range
Dim i As Long
For Each cell In Range("A1:A5")
i = InStr(Replace(cell.Value, Chr(160), " "), " ")
If i > 0 Then
cell.Value = Left(cell.Value, i - 1)
End If
Next cell
Теперь, при очень малой вероятности того, что некоторые ячейки назначения содержат формулы, содержащие двойные пробелы (например, =A1 & "<space><space>" & A2
), эти формулы будут заменены значениями. Чтобы избежать этого, измените условное на If i > 0 And Not cell.HasFormula Then
.