在網上看到有網友求助:
1:根據單元格內的數字,自動分配到指定的後續單元格中用“1”顯示並動態擴展,如下圖:
2:對所有行進行彙總,並根據數據源進行動態擴展
3:對以上最後10行進行彙總,並根據數據源進行動態擴展
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
代碼的結果演示如下:
涉及知識點:
1:for next 循環
2:if 循環
3:調用sum函數
PS:1:此方法是常規解法,雖然也能解決問題,但是程序運行速度慢。另外還有可以數組的解決方法(下期用數組),運行速度快。
2:Application.ScreenUpdating = False 表示關閉屏幕刷新,本文章展示的GIF,是沒有關閉屏幕刷新的,有興趣的人,可以複製一下代碼,重新運行一下。看看效果,並體驗一下,運行速度是否有提升。
閱讀更多 浮雲Excel分享 的文章