Честно говоря, может быть несколько причин, по которым у вас возникли проблемы. Самое главное, что когда вы используете функцию Left()
, вы говорите ей, чтобы она сохраняла 14 символов вместо 13, которые вы сказали, что вы хотите!
Другим вариантом может быть то, что Excel думает, что вы пытаетесь выполнить эту операцию на другом листе. Чтобы бороться с этим, я создал объект worksheet
и уточнил все упомянутые диапазоны, чтобы быть уверенным, что Excel знает, о каком месте вы говорите.
(вряд ли, исходя из вашего описания, но возможно), проблема может быть связана с тем, как вы указали lastrow
. Если у вас есть столбец смежных значений (хотя ваше описание предполагает, что вы этого не делаете), и вы указываете последнюю строку этого столбца со значением, .End(xlUp)
будет фактически прослеживать до последней ячейки без значения, которое может быть первый ряд - так что цикл никогда даже не запускается! Вы можете избежать этого, просто изменив его на lastrow = Range("G582").End(xlUp).Row
(на одну строку ниже того, что, как вы знаете, будет последней полной строкой), но зачем беспокоиться, когда вы можете просто позволить Excel выполнить работу за вас, как в моем ответе ниже.
Sub cleanup()
Dim ws As Worksheet
Set ws = sheets("Sheet1")
Dim lastRow As Long
lastRow = ws.Range("G" & rows.count).End(xlUp).row
Dim i As Long
For i = 2 To lastRow
If Len(ws.Cells(i, 1)) > 13 Then
ws.Cells(i, 1) = Left(ws.Cells(i, 1), 13)
End If
Next i
End Sub
Я также сделал версию со вторым вариантом, который вы упомянули в вопросе о разбиении каждой строки запятой ","
.
Sub cleanup2()
Dim ws As Worksheet
Set ws = sheets("Sheet1")
Dim lastRow As Long
lastRow = ws.Range("G" & rows.count).End(xlUp).row
Dim i As Long
For i = 2 To lastRow
ws.Cells(i, 1) = Split(ws.Cells(i, 1), ",")(0) 'option 2
Next i
End Sub
Надеюсь, это решит вашу проблему!