Удалить все символы после n-го символа - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над организацией данных, и мне нужно переместить информацию в форму. У меня есть столбец IP-адресов, а некоторые столбцы имеют более одного или даже нет. Желательно, чтобы я мог пройти через столбец и оставить первые 13 символов и удалить все после него, иметь 581 строку, которая мне нужна, чтобы можно было пробежаться. Я думаю, если бы я мог получить VBA, который будет проходить через столбец и найти первое "," и удалить это и все, что после этого будет работать. Я попробовал это, но ничего не получилось.

Sub cleanup()
    lastrow = Range("G581").End(xlUp).Row

    For i = 2 To lastrow
        If Len(Cells(i, 1)) > 13 Then
            Cells(i, 1) = Left(Cells(i, 1), 14)
        End If
    Next i

End Sub

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Честно говоря, может быть несколько причин, по которым у вас возникли проблемы. Самое главное, что когда вы используете функцию 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

Надеюсь, это решит вашу проблему!

0 голосов
/ 10 сентября 2018

Как упоминалось ранее, вы подсчитываете строки в столбце G, возможно, столбцы G и столбец A имеют одинаковое количество строк.Я думаю, что столбец G может быть проблемой.

lastrow = Range("A581").End(xlUp).Row

For i = 2 To lastrow
    If Len(Cells(i, 1)) > 13 Then
        Cells(i, 1) = Left(Cells(i, 1), 14)
    End If
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...