
我想完全自動化清理導出資料的過程。我想要:
- 將溢出行中的資料移至其預期列中。我在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)
,它只是右側的一列,請始終檢查程式碼的一致性。 - 「一旦資料位於正確的列中,我需要自動移動到正確的行中」 - 我的程式碼在同一步驟中完成這兩項操作,除了更短的程式碼之外,它甚至更簡單。