Прежде всего, вы можете показать столбец с вашими данными и столбец с желаемым результатом, чтобы я мог попробовать?
Второй:
ws.range("I7:I500").Select
замедлит ваш макросвместо этого вы можете использовать:
ws.range("I7:I500").TextToColumns _
Destination:=range("L7:L500"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=True, _
Semicolon:=False, _
comma:=False, _
Space:=True, _
Other:=True, _
OtherChar:=":"
Но в любом случае, если вы хотите поместить некоторые слова с "_" в диапазон, а другие в другой диапазон, вы можете использовать цикл, это легче сделать и понять.
Например, если вы хотите разделить слова на "_", вы можете использовать что-то вроде этого
Dim cell As Range
For Each cell In Range("L7:L500").Cells
If InStr(cell, "_") > 0 Then
cell.Offset(0, 1) = Left(cell, WorksheetFunction.Find("_", cell))
cell.Offset(0, 2) = Right(cell, Len(cell) -WorksheetFunction.Find("_",cell))
Else
cell.Offset(0, 3) = cell
End If
Next cell
, и если мы предположим, что столбец L содержит слово типа "Hello_World ", тогда в столбце M у вас будет" Hello_ ", а в столбце N у вас будет" World ", в следующем столбце будут все те слова, которые не имеют" _ "