Автоматизация перемещения ячеек, предпочтительно с использованием условий стиля «если/когда»

Автоматизация перемещения ячеек, предпочтительно с использованием условий стиля «если/когда»

введите описание изображения здесь

Я хочу полностью автоматизировать процесс очистки экспортированных данных. Я хочу:

  • Переместить данные в переполненных строках в их перспективный столбец. Я попробовал следующий код в 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), который находится всего на один столбец вправо, всегда проверяйте согласованность вашего кода.
  • «Как только данные окажутся в нужном столбце, мне нужно автоматизировать перемещение в нужную строку» — мой код делает и то, и другое за один шаг, к тому же код короче, и он еще проще.

Связанный контент