
エクスポートされたデータのクリーンアッププロセスを完全に自動化したいと考えています。次のことを実現したいと考えています。
- オーバーフロー行のデータを、その予定の列に移動します。VB で次のコードを試しました。(これは、電子メール内の @ 記号を識別し、すべての電子メール アドレスをそれぞれ 2 つ右に移動しようとしています)。
サブqwerty()
Dim 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 つに電子メール アドレスがない場合 (例)、上に移動したときに電子メールが間違った行に配置されることになります。
答え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)
文字列の最初の 2 文字を選択します。1 文字の文字列 ("@") と等しくなることはありません。(私のコードは [ の後の最初の文字に基づいて位置を決定します) - 「そして、それぞれすべての電子メール アドレスを 2 つ右に移動します」 - コードは で
OFFSET(0,1)
、これは 1 列右にあるだけなので、常にコードの一貫性を確認してください。 - 「データが正しい列に入ったら、正しい行への移動を自動化する必要があります」 - 私のコードは両方を同じステップで実行し、コードが短くなるだけでなく、さらにシンプルになります。