Excel VBA 實現數字統計-常規方法

在網上看到有網友求助:

1:根據單元格內的數字,自動分配到指定的後續單元格中用“1”顯示並動態擴展,如下圖:

2:對所有行進行彙總,並根據數據源進行動態擴展

3:對以上最後10行進行彙總,並根據數據源進行動態擴展

Excel VBA 實現數字統計-常規方法

VBA 解決思路

1:根據第一條要求,先用for……next……函數調取A3到I22(動態)區域內的數值,用if函數與J2到AK2變革數字進行對比,當數值相等的時候,在相應的行列填 "1"。

2:第二個要求,用for循環對所有的列進行求和(調用sum函數)

3:第三個要求,用獲取最後一行的行數與最後一行的行數減去9,得出最後10行區域,然後進行求和。

代碼如下:

Sub 自動填數()

Application.ScreenUpdating = False

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim n As Integer

Dim rng As Range

Range("j3:ak1000").Clear

For i = 3 To Range("a3").End(xlDown).Row

For j = 1 To 9

For k = 10 To 37

If Cells(i, j).Value = Cells(2, k).Value Then

Cells(i, k).Value = 1

End If

Next

Next

Next

n = Range("a3").End(xlDown).Row + 3

For k = 10 To 37

' For i = 3 To Range("a3").End(xlDown).Row

Set rng = Range(Cells(3, k), Cells(Range("a3").End(xlDown).Row, k))Cells(n, k) = Application.WorksheetFunction.Sum(rng)Set rng = Range(Cells(Range("a3").End(xlDown).Row - 9, k), Cells(Range("a3").End(xlDown).Row, k))Cells(n + 2, k) = Application.WorksheetFunction.Sum(rng)Next

Application.ScreenUpdating = True

End Sub

代碼的結果演示如下:

Excel VBA 實現數字統計-常規方法

涉及知識點:

1:for next 循環

2:if 循環

3:調用sum函數

PS:1:此方法是常規解法,雖然也能解決問題,但是程序運行速度慢。另外還有可以數組的解決方法(下期用數組),運行速度快。

2:Application.ScreenUpdating = False 表示關閉屏幕刷新,本文章展示的GIF,是沒有關閉屏幕刷新的,有興趣的人,可以複製一下代碼,重新運行一下。看看效果,並體驗一下,運行速度是否有提升。


分享到:


相關文章: