
Я хочу полностью автоматизировать процесс очистки экспортированных данных. Я хочу:
- Переместить данные в переполненных строках в их перспективный столбец. Я попробовал следующий код в VB. (Это попытка идентифицировать символ @ в электронных письмах и соответственно переместить все адреса электронной почты на две позиции вправо).
Суб qwerty()
Размер D как диапазон, r как диапазон
Установить D = Intersect(ActiveSheet.UsedRange, Range("D:D"))
For Each r In D
If Left(r.Text, 2) = "@" Then
r.Copy r.Offset(0, 1)
r.Clear
End If
Next r End Sub
- Как только данные окажутся в правильном столбце, мне нужно автоматизировать перемещение в правильную строку. Я могу легко заставить их сместиться вверх, но если у одного контакта нет адреса электронной почты (например), то адреса электронной почты будут в неправильных строках, когда они сместятся вверх.
решение1
Используйте этот код:
Sub qwerty()
Dim y As Integer, x As Integer
y = 2
Do Until Cells(y, 4) = ""
If Cells(y, 3) = "" Then
Select Case Left(Cells(y, 4))
Case "[E": x = 6
Case "[H": x = 7
Case "[M": x = 8
Case "[A": x = 9
Else: x = 10
End Select
Cells(y - 1, x) = Cells(y, 4)
Rows(y).EntireRow.Delete
Else
y = y + 1
End If
Loop
End Sub
Некоторые замечания по вашему исходному коду VBA:
- «Это попытка идентифицировать символ @ в электронных письмах ...»:
left(r.Text,2)
выбирает первые два символа строки, она никогда не будет равна строке длиной в один символ («@»)! (мой код определяет местоположение на основе первого символа после [) - «и соответственно переместить все адреса электронной почты на две позиции вправо» - ваш код
OFFSET(0,1)
, который находится всего на один столбец вправо, всегда проверяйте согласованность вашего кода. - «Как только данные окажутся в нужном столбце, мне нужно автоматизировать перемещение в нужную строку» — мой код делает и то, и другое за один шаг, к тому же код короче, и он еще проще.