优选使用if / when样式条件自动化细胞运动


0

在此输入图像描述

我想完全自动化清理导出数据的过程。我想要:

  • 将溢出行中的数据移动到其预期列中。我在VB中尝试了以下代码。(这是尝试识别电子邮件中的@符号,并分别将所有电子邮件地址移动到右侧两个位置)。

QWERTY ()昏暗d 作为范围- [R 作为范围
     设定d = 相交ActiveSheet UsedRange 范围“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

  • 一旦数据在正确的列中,我需要自动移动到正确的行。我可以很容易地将它们向上移动,但如果一个联系人没有电子邮件地址(例如),那么当电子邮件向上移动时,电子邮件将排在错误的行中。

Answers:


0

使用此代码:

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)右侧的一列,始终检查代码的一致性。
  • “一旦数据在正确的列中,我需要自动移动到正确的行” - 我的代码在同一步骤中执行,除了更短的代码,它甚至更简单。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.