求助,如何实现行列同时循环,统计用
vba吧
全部回复
仅看楼主
level 1
诸葛击破 楼主
如图,C74填写(D2:D51)中 ≥ D54数据的个数
C75填写(L2:L51) 中 ≥ D54数据的个数
C76填写(T2:T51) 中 ≥ D54数据的个数
C77填写(AB2:AB51) 中 ≥ D54数据的个数
C78填写(AJ2:AJ51) 中 ≥ D54数据的个数
C79填写(AR2:AR51) 中 ≥ D54数据的个数
然后:C85填写(E2:E51)中 ≥ E54数据的个数
C86填写(M2:M51)中 ≥ E54数据的个数
C87填写(O2:O51)中 ≥ E54数据的个数
C88填写(AC2:AC51)中 ≥ E54数据的个数
C89填写(AK2:AK51)中 ≥ E54数据的个数
C90填写(AS2:AS51)中 ≥ E54数据的个数
需要解决的难点:
填下格属于行循环,引用判断的两个数据源都是列号循环
我目前的代码:
Dim i As Double
Dim k As Double
For k = 1 To 5
i = 63 + 11 * k
'所有C列
ws3.Range("C" & i).Value = Application.WorksheetFunction.CountIf([D2:C51], ">= " & Cells(54, k + 3).Value)
ws3.Range("C" & i + 1).Value = Application.WorksheetFunction.CountIf([L2:L51], ">= " & Cells(54, k + 3).Value)
ws3.Range("C" & i + 2).Value = Application.WorksheetFunction.CountIf([T2:T51], ">= " & Cells(54, k + 3).Value)
ws3.Range("C" & i + 3).Value = Application.WorksheetFunction.CountIf([AB2:AB51], ">= " & Cells(54, k + 3).Value)
ws3.Range("C" & i + 4).Value = Application.WorksheetFunction.CountIf([AJ2:AJ51], ">= " & Cells(54, k + 3).Value)
ws3.Range("C" & i + 5).Value = Application.WorksheetFunction.CountIf([AR2:AR51], ">= " & Cells(54, k + 3).Value)
next k
可以运行,但是显示统计出来的数量不对,不知道哪里有问题,请大神帮忙看看
2024年11月19日 06点11分 1
level 1
打一堆真不如上传个源文件有用,代码一直在调用Excel自带的countif函数,是为了写VBA写VBA吗?
2024年11月20日 01点11分 3
level 12
你这原始表格设计的不规范吧?哪有一个数学从D列搞到AB列去了?
2024年11月20日 12点11分 4
就不能原始数据一个表格,代码的数据一个表格?
2024年11月20日 12点11分
原始数据要是按照数据库设计方式来,多舒服
2024年11月20日 12点11分
之所以你代码出来的数据不对,是因为你那个i行号在循环,但是你那个列又是写的固定的,比如说L,这样就是乱套的,只是在把那个。最后一次的数据复制到的这一行,也就是说实际上你最终弄的都是ar2:ar51列的的数据,所以你C74到C 79得到的是同一个数据吧
2024年11月20日 13点11分
258000768企鹅油箱,发来我看看原始数据布局
2024年11月20日 13点11分
level 12
我分析了一下你的数学列,应该是每8列一个单元循环
2024年11月20日 13点11分 5
level 12
Option Explicit
Sub 各科成绩过线人数统计()
Dim i&, j&, k%
Dim ws As Worksheet
'Const UNIT_COLUMN_NUM As Integer = 8 '每8列一个轮回
Set ws = ws3 '你的代码名是ws3?
'Set ws = ThisWorkbook.Worksheets("你的表名") '我的建议,写表名
With ws
''For i = 74 To 79
'下面这次循环只做数学的人数统计(若是各学科都要,那就要三层循环,没有原始表,我不好写代码):
' For k = 1 To 5 '各学科循环 但学科行不是连着的,比如74和85,不好循环了,估计要每个学科写一次二层循环
For j = 0 To 5 '6列填数区 ,列循环,也就是我猜的原始数据每8列一个班级循环
For i = 0 To 5 '6行,6*8=48列, 6个级别的分数线
'下面这句循环真伤脑筋:74到79行,i变化,班级列4+i*8变化,分数线不变 ,学科k不变
.Cells(i + 74, 3 + j * 2).Value = Application.WorksheetFunction.CountIf(.Cells(2, 4 + i * 8).Resize(50, 1), ">=" & Cells(54 + j, 4).Value)
Next
Next
' Next
End With
End Sub
2024年11月20日 14点11分 6
没有数据,没测试过
2024年11月20日 14点11分
level 12
Sub 各科成绩过线人数统计and把学科循环加进来了()
Dim i&, j&, k%
Dim ws As Worksheet
'Const UNIT_COLUMN_NUM As Integer = 8 '每8列一个轮回
Set ws = ws3 '你的代码名是ws3?
'Set ws = ThisWorkbook.Worksheets("你的表名") '我的建议,写表名
With ws
'下面这次循环只做数学的人数统计(若是各学科都要,那就要三层循环,没有原始表,我不好写代码):
For k = 0 To 5 '学科偏移
For j = 0 To 5 '分数线偏移
For i = 0 To 5 '班级偏移
'
.Cells(i + 63 + k * 11, 3 + j * 2).Value = Application.WorksheetFunction.CountIf(.Cells(2, 3 + i * 8 + k).Resize(50, 1), ">=" & Cells(54 + j, 3 + k).Value)
Next
Next
'' Next
End With
End Sub
2024年11月20日 14点11分 7
这回把学科分数线和班级三层循环都套一起了,在内部用一句代码赋值了
2024年11月20日 14点11分
@烟雨江南ooo 刚看了一下最后一个next,倒数第三行,没去掉注释,你把它注释去掉
2024年11月20日 14点11分
另外就是后30%人数,这个再用>=就不合适了吧,可能是要<=,那这还要修改代码
2024年11月20日 14点11分
level 6
你用vbap完美呈现了函数的功能,这....
至于行列同时循环如下图
2024年11月23日 03点11分 8
level 12
楼主人呢,问题一丢这也没后续回应了
2024年11月23日 04点11分 9
1