在网上看到有网友求助:
1:根据单元格内的数字,自动分配到指定的后续单元格中用“1”显示并动态扩展,如下图:
2:对所有行进行汇总,并根据数据源进行动态扩展
3:对以上最后10行进行汇总,并根据数据源进行动态扩展
VBA 解决思路
1:根据第一条要求,先用for……next……函数调取A3到I22(动态)区域内的数值,用if函数与J2到AK2变革数字进行对比,当数值相等的时候,在相应的行列填 "1"。
2:第二个要求,用for循环对所有的列进行求和(调用Sum函数)
3:第三个要求,用获取最后一行的行数与最后一行的行数减去9,得出最后10行区域,然后进行求和。
代码如下:
Set rng = Range(Cells(3, k), Cells(Range("a3").End(xlDown).Row, k))</BR> Cells(n, k) = A(rng)</BR> Set rng = Range(Cells(Range("a3").End(xlDown).Row - 9, k), Cells(Range("a3").End(xlDown).Row, k))</BR> Cells(n + 2, k) = A(rng)</BR> Next</BR>Sub 自动填数()
A = 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
A = True
End Sub
代码的结果演示如下:
涉及知识点:
1:for next 循环
2:if 循环
3:调用sum函数
PS:1:此方法是常规解法,虽然也能解决问题,但是程序运行速度慢。另外还有可以数组的解决方法(下期用数组),运行速度快。
2:A = False 表示关闭屏幕刷新,本文章展示的GIF,是没有关闭屏幕刷新的,有兴趣的人,可以复制一下代码,重新运行一下。看看效果,并体验一下,运行速度是否有提升。