セルの移動を自動化するには、if/when スタイルの条件を使用するのが望ましい

セルの移動を自動化するには、if/when スタイルの条件を使用するのが望ましい

ここに画像の説明を入力してください

エクスポートされたデータのクリーンアッププロセスを完全に自動化したいと考えています。次のことを実現したいと考えています。

  • オーバーフロー行のデータを、その予定の列に移動します。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 列右にあるだけなので、常にコードの一貫性を確認してください。
  • 「データが正しい列に入ったら、正しい行への移動を自動化する必要があります」 - 私のコードは両方を同じステップで実行し、コードが短くなるだけでなく、さらにシンプルになります。

関連情報