最好使用 if/when 樣式條件自動執行儲存格移動

最好使用 if/when 樣式條件自動執行儲存格移動

在此輸入影像描述

我想完全自動化清理導出資料的過程。我想要:

  • 將溢出行中的資料移至其預期列中。我在VB中嘗試過以下程式碼。 (這是試圖識別電子郵件中的@符號,並將所有電子郵件地址分別向右移動兩位)。

子 qwerty()
    Dim D 作為範圍,r 作為範圍
    設定 D = 相交(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),它只是右側的一列,請始終檢查程式碼的一致性。
  • 「一旦資料位於正確的列中,我需要自動移動到正確的行中」 - 我的程式碼在同一步驟中完成這兩項操作,除了更短的程式碼之外,它甚至更簡單。

相關內容