VBA 删除或插入行列

Option Explicit

Sub Row_Column_1()
Dim r As Long, c As Long, i As Integer, num As Integer, str As String
Dim myRange As Range
Dim myFon As Font

Set myRange = ActiveSheet.UsedRange

'myRange.ClearFormats
r = myRange.Rows.Count
Debug.Print r
c = myRange.Columns.Count

'删除空白行

' '方法一:
' For i = 1 To r
' If myRange.Cells(i, 1) = "" Then
' Debug.Print "第" & i; "行为空白行"
' myRange.Cells(i, 1).EntireRow.Delete shift:=xlShiftUp 'xlShiftToLeft
' '同理,对象.EntireColumn.Delete/Insert
' '这里存在一个逻辑上的陷阱:
' '当空白行(A行)的下一行也为空白行(B行)时,就会出现A行被删除,B行却上移得到保留
' '的处理。对于这种情况,我们可以通过多次重复运行Sub()得到。
' End If
' Next

'方法二:
For i = r To 1 Step -1
If myRange.Cells(i, 1) = "" Then
Debug.Print "第" & i; "行为空白行"
myRange.Cells(i, 1).EntireRow.Delete shift:=xlShiftUp 'xlShiftToLeft
'方法二与方法一的差别在于,遍历循环的方向不同:既然每一次搜索到空白行就要删除
'那么,必然导致下一行会上移,如果采用从下至上的方式遍历,就会避免方法一中
'中的多次重复操作
End If
Next

'插入空白行
' '方法一:
' For i = 1 To r
' If myRange.Cells(i, 1) = "语文" Then
' myRange.Cells(i, 1).EntireRow.Insert shift:=xlShiftDown 'xlShiftToRight
' i = i + 1 '同理,这里进行行数上的计算,也是为了避免多出一空白行的情况
' End If
' Next

'方法二:
For i = r To 1 Step -1
If myRange.Cells(i, 1) = "99" Then
myRange.Cells(i, 1).EntireRow.Insert shift:=xlShiftDown 'xlShiftToRight
'综上,可以看出:在进行行列的删除或插入处理时,倒序遍历是一种更优的计算方式。
End If
Next

End Sub
————————————————
版权声明:本文为CSDN博主「l_iu_xing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/l_iu_xing/article/details/83140818

posted @ 2020-05-23 20:57  天涯海角路  阅读(1057)  评论(0)    收藏  举报