Excel VBA/Macro:如何删除行并删除点和破折号?

Excel VBA/Macro:如何删除行并删除点和破折号?

最近有人给我一个 Excel 文件,要我格式化它,有 100 多行。下图显示了它的状态。如果我手动处理它,这可能是一项非常漫长的工作,所以我想知道宏是否有帮助。

我的工作是:

  1. 删除以下行点&点&划一起使用。然后;

  2. 再次浏览列表并删除剩余的点与划字符而不删除行。

我希望这会使我的新格式列表左对齐。

无论如何,如果你们中的任何一个人可以指出正确的东西放入合适的宏中,那么我将非常感激(并节省了我数小时的工作时间,因为我觉得这不是他们以这种方式格式化的唯一表格)。

该文件有 600 多行

答案1

当你在循环中删除行时,最好向后循环。这样内部循环计数器就不会混淆。在运行互联网上删除内容的代码之前,一定要备份你的数据。

Sub DeleteRows()

    Dim i As Long
    Dim rng As Range

    Set rng = Intersect(ActiveSheet.UsedRange, ActiveSheet.Columns(1))

    For i = rng.Count To 1 Step -1
        If rng.Cells(i).Value Like "..-*" Then
            rng.Cells(i).EntireRow.Delete
        ElseIf rng.Cells(i).Value Like ".-*" Then
            rng.Cells(i).Value = Replace(rng.Cells(i).Value, ".-", "", 1, 1)
        End If
    Next i

End Sub

答案2

代替宏,您可以:

  1. 使用排序功能
  2. 杀死你的..-行
  3. 对“.-”使用查找/替换(不包含任何替换选项),然后
  4. 重新排序您的数据。

这比宏稍微费力一些,但无论如何它是一种替代方法。dkusleika 的解决方案看起来应该可行。

答案3

我会这样处理:

For Each Cell In ActiveSheet.Range("A:A")
    If Left(Cell.Value, 3) = "..-" Then
        Cell.EntireRow.Delete
    ElseIf Left(Cell.Value, 2) = ".-" Then
        Cell.Value = Right(Cell.Value, (Len(Cell.Value) - 2))
    End If
Next

唯一的问题是删除后无法看到该行,因此最好执行以下操作:

For Each Cell In ActiveSheet.Range("A:A")
    If Left(Cell.Value, 3) = "..-" Then
        Cell.EntireRow.Delete
    ElseIf Cell.Value = "" Then
        Exit For
    End If
Next
For Each Cell In ActiveSheet.Range("A:A")
    If Left(Cell.Value, 2) = ".-" Then
        Cell.Value = Right(Cell.Value, (Len(Cell.Value) - 2))
    ElseIf Left(Cell.Value, 1) = "-" Then
        Cell.Value = Right(Cell.Value, (Len(Cell.Value) - 1))
    ElseIf Cell.Value = "" Then
        Exit For
    End If
Next

您最终对该批单元格进行了两次迭代,但它实际上捕获了所有内容......

如果需要对齐特定列,请尝试

With ActiveSheet.Columns("A")
    .HorizontalAlignment = xlLeft
End With

相关内容