
最近有人给我一个 Excel 文件,要我格式化它,有 100 多行。下图显示了它的状态。如果我手动处理它,这可能是一项非常漫长的工作,所以我想知道宏是否有帮助。
我的工作是:
删除以下行点&点&划一起使用。然后;
再次浏览列表并删除剩余的点与划字符而不删除行。
我希望这会使我的新格式列表左对齐。
无论如何,如果你们中的任何一个人可以指出正确的东西放入合适的宏中,那么我将非常感激(并节省了我数小时的工作时间,因为我觉得这不是他们以这种方式格式化的唯一表格)。
答案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
代替宏,您可以:
- 使用排序功能
- 杀死你的..-行
- 对“.-”使用查找/替换(不包含任何替换选项),然后
- 重新排序您的数据。
这比宏稍微费力一些,但无论如何它是一种替代方法。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