Excel VBA7.70間隔插入空行,VBA快又准!職場生存效率高於一切

2019-07-29   VBA雜談

前景提要(文末提供源碼下載)

昨天我們學習了通過VBA來一次性插入多列的操作,當然有很多的小夥伴對於這個方法並不是很感冒,畢竟插入多列的操作,其實我們也可以通過滑鼠來完成的,雖然並不是很快,但是肯定比寫代碼要快,既然如此,我今天就放個大招吧,來一個通過滑鼠無法一次實現的功能,批量間隔插入空行。

場景說明

這是我們今天的工作表,我們現在需要在其中間隔插入幾行,隨我們自己心情的輸入的, 非常的靈活

代碼區

Sub Sss()
Dim rng As Range, trng As Range
Set rng = Application.InputBox("請選擇要插入空行的單元格區域", "區域的確定", , , , , , 8)
CountR = rng.Rows.Count
FirstR = rng.Row
FirstC = rng.Column
k = 0
num = Application.InputBox("請輸入間隔的行數", "間隔行數的確定", , , , , , 1)
If num <> 1 Then
For i = 1 To CountR Step num
If i <> 1 Then
k = k + 1
If k = 1 Then
Set trng = Cells(FirstR + i - 1, FirstC)
Else
Set trng = Union(trng, Cells(FirstR + i - 1, FirstC))
End If
End If
Next i
Else
For i = 1 To CountR Step num
If i <> 1 Then
k = k + 1
If k = 1 Then
Set trng = Cells(FirstR + k, FirstC)
trng.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
j = j + 1
Else
Set trng = Cells(FirstR + k + j, FirstC)
trng.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
j = j + 1
End If
End If
Next i
Exit Sub
End If
trng.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

雖然代碼看起來很長,但是走到現在,大家應該都能夠看出其中不過就是兩個循環而已的事情了吧

先來看看代碼執行的最終成果

相信上面的動圖已經非常清晰的展示了最終的效果了,不管我們的工作表的數據在什麼區域,又或者我們想要插入的間隔並不是一個平均的數據,都可以通過這個代碼插入,非常的方便簡單。

代碼解析

來看看今天的代碼解析

其實間隔插入行的關鍵核心所在,就是你要判斷你要插入的行的位置,然後執行插入的操作,但是我們又不能和普通的插入採用一樣的方式,選擇一行我插入一行

為什麼不能呢?

因為你在插入的過程中,導致工作表的總行數就出現了變化,但是代碼讀數的行數是一個固定的狀態,他不會隨著你增加行數而增加,

所以這裡我們要明確,我們不能夠通過循環遍歷所有行數,然後間隔插入的方式來實現了,那麼我們要如何實現呢?

這裡我們採用選中單元格之後, 在直接插入空行的方式來進行。

所以我們的重點就變成了如何選擇多個單元格了。

單元格的選擇應該是我們洗一個系列的重點,而不是這個系列的,但是工作表的部分操作有不可避免的會涉及到部分單元格的操作,這裡我們就先大致的了解下

Union(trng, Cells(FirstR + i - 1, FirstC))

union(range1,range2,......)這個就是用來組合多個單元格區域的,相當於將range1,range2,即括號裡面的單元格都組合在一起,形成一個整體

可以同事被選擇,也可以同時備操作,有點類似於我們按照CTRL,然後滑鼠選擇單元格的效果

我們在代碼中加上選擇的按鈕,我們來看看

當然我們可以看到每隔兩列,每行的首個單元格點就已經被選中了,然後我們就可以執行後面的代碼執行一次性插入空行了。

trng.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

這句代碼就是執行插入空行的操作的。

上面這一段講述的就是我們第一個循環的內容,那麼很明顯,我們這裡有兩個循環,那第二個循環的作用是幹嘛的呢?

還有一種特殊情況,那就是當我們是需要隔行就是每隔一行插入一個空行的時候,我們就不能一次性全部選中再插入了,這就樣變成了我們之前批量插入多個空行的效果了

所以如果是之間隔一行的話,我們就需要用另外一種方法了,就是第二個循環,每找到一個單元格就執行一次插入

================================

案例源碼已上傳,需要的小夥伴後台私信「7-70」,感謝大家的支持

好了,明晚19:00,準時再見!