Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Vba制作汇总表_Arrays_Excel_Vba_Summary_Top N - Fatal编程技术网

Arrays Vba制作汇总表

Arrays Vba制作汇总表,arrays,excel,vba,summary,top-n,Arrays,Excel,Vba,Summary,Top N,我想讨论一个有关VBA代码的问题。我试图根据dpmo列检索每个班次的前5名工人,如数据所示: 并将其汇总到汇总表中: 我遇到的问题是,只有当每个组有5个或5个以上的值时,我的汇总表才能正确汇总这些值,否则它将取下一组值并将它们插入上一组。我希望以这样的方式组织表:如果一个组的值少于5个,则该组的剩余行应填充“-”(例如,如果该组在dataframe中只有两个值,则该组的其他三个值应为“-”) Sub-tgr() 将wsData设置为工作表 将wsDest设置为工作表 暗rngData As范

我想讨论一个有关VBA代码的问题。我试图根据dpmo列检索每个班次的前5名工人,如数据所示:

并将其汇总到汇总表中:

我遇到的问题是,只有当每个组有5个或5个以上的值时,我的汇总表才能正确汇总这些值,否则它将取下一组值并将它们插入上一组。我希望以这样的方式组织表:如果一个组的值少于5个,则该组的剩余行应填充“-”(例如,如果该组在dataframe中只有两个值,则该组的其他三个值应为“-”)

Sub-tgr()
将wsData设置为工作表
将wsDest设置为工作表
暗rngData As范围
暗淡的rngFound As范围
Dim rngUnqGroups As范围
Dim GroupCell作为范围
Dim lCalc As XLC计算
Dim aResults()作为变体
作为变体的原始名称
昏暗的lNumTopEntries如长
我长,J长,k长
lNumTopEntries=5
设置wsData=ThisWorkbook.Sheets(“概述”)
'Set wsDest=ActiveWorkbook.Sheets(“数据”)
设置rngData=wsData.Range(“A1”,wsData.Cells(Rows.Count,“F”).End(xlUp))
aooriginal=rngData.Value“存储原始值,以便以后可以将其设置回”
"有应用,
'lCalc=.Calculation
'.Calculation=xlCalculationManual
'.EnableEvents=False
'.ScreenUpdating=False
"以
返回CleanExit时出错
“和恩格达塔
'.sort.Resize(,6).Offset(,0),xlAscending,.Resize(,6).Offset(,0),xlAscending,Header:=xlYes
"以
使用rngData.Resize(,1).Offset(,0)
.AdvancedFilter XLFilterPlace,,真
设置rngUnqGroups=.Offset(1).调整大小(.Rows.Count-1).特殊单元格(xlCellTypeVisible)
.Parent.ShowAllData'删除筛选器
ReDim aResults(1到rngUnqGroups.Cells.Count*lNumTopEntries,1到7)
I=0
对于rngUnqGroups中的每个GroupCell
设置rngFound=.Find(GroupCell.Value、.Cells(.Cells.Count))
k=0
如果不是,那么rngFound什么都不是
对于J=I+1到I+lNumTopEntries
如果rngFound.Offset(J-I-1).Value=GroupCell.Value,那么
k=k+1
'aResults(j,1)=rngFound.Offset(j-i-1,-1).Value
aResults(J,2)=rngFound.Offset(J-I-1).Value
aResults(J,3)=rngFound.Offset(J-I-1,1).Value
aResults(J,4)=rngFound.Offset(J-I-1,2).值
aResults(J,5)=rngFound.Offset(J-I-1,3).值
aResults(J,6)=rngFound.Offset(J-I-1,4).值
aResults(J,7)=rngFound.Offset(J-I-1,5).值
如果结束
下一个J
I=I+k
如果结束
下一组细胞
以
wsData.Range(“G:Z”).Clear
wsData.Range(“K5”).Resize(UBound(aResults,1),UBound(aResults,2))。Value=aResults
清洁出口:
应用
.计算=lCalc
.EnableEvents=True
.ScreenUpdate=True
以
如果错误号为0,则
MsgBox错误描述,“错误:&错误号”
呃,明白了
如果结束
rngData.Value=a原始值
'调用汇总表
端接头

如果有人能帮我写代码,我将不胜感激。还请注意,原因列和顶部列是在检索顶部值后插入的。

Move
k=k+1

而不是这个

For J = I + 1 To I + lNumTopEntries
    If rngFound.Offset(J - I - 1).Value = GroupCell.Value Then
        k = k + 1
        'aResults(j, 1) = rngFound.Offset(j - i - 1, -1).Value
        aResults(J, 2) = rngFound.Offset(J - I - 1).Value
        aResults(J, 3) = rngFound.Offset(J - I - 1, 1).Value
        aResults(J, 4) = rngFound.Offset(J - I - 1, 2).Value
        aResults(J, 5) = rngFound.Offset(J - I - 1, 3).Value
        aResults(J, 6) = rngFound.Offset(J - I - 1, 4).Value
        aResults(J, 7) = rngFound.Offset(J - I - 1, 5).Value
    End If
Next J
使用以下命令:

For J = I + 1 To I + lNumTopEntries
    If rngFound.Offset(J - I - 1).Value = GroupCell.Value Then
        'aResults(j, 1) = rngFound.Offset(j - i - 1, -1).Value
        aResults(J, 2) = rngFound.Offset(J - I - 1).Value
        aResults(J, 3) = rngFound.Offset(J - I - 1, 1).Value
        aResults(J, 4) = rngFound.Offset(J - I - 1, 2).Value
        aResults(J, 5) = rngFound.Offset(J - I - 1, 3).Value
        aResults(J, 6) = rngFound.Offset(J - I - 1, 4).Value
        aResults(J, 7) = rngFound.Offset(J - I - 1, 5).Value
    End If
    k = k + 1
Next J

移动
k=k+1

而不是这个

For J = I + 1 To I + lNumTopEntries
    If rngFound.Offset(J - I - 1).Value = GroupCell.Value Then
        k = k + 1
        'aResults(j, 1) = rngFound.Offset(j - i - 1, -1).Value
        aResults(J, 2) = rngFound.Offset(J - I - 1).Value
        aResults(J, 3) = rngFound.Offset(J - I - 1, 1).Value
        aResults(J, 4) = rngFound.Offset(J - I - 1, 2).Value
        aResults(J, 5) = rngFound.Offset(J - I - 1, 3).Value
        aResults(J, 6) = rngFound.Offset(J - I - 1, 4).Value
        aResults(J, 7) = rngFound.Offset(J - I - 1, 5).Value
    End If
Next J
使用以下命令:

For J = I + 1 To I + lNumTopEntries
    If rngFound.Offset(J - I - 1).Value = GroupCell.Value Then
        'aResults(j, 1) = rngFound.Offset(j - i - 1, -1).Value
        aResults(J, 2) = rngFound.Offset(J - I - 1).Value
        aResults(J, 3) = rngFound.Offset(J - I - 1, 1).Value
        aResults(J, 4) = rngFound.Offset(J - I - 1, 2).Value
        aResults(J, 5) = rngFound.Offset(J - I - 1, 3).Value
        aResults(J, 6) = rngFound.Offset(J - I - 1, 4).Value
        aResults(J, 7) = rngFound.Offset(J - I - 1, 5).Value
    End If
    k = k + 1
Next J

如果答案有助于解决问题,请检查✓ 答案旁边的符号。顺便说一句,我非常喜欢你设计
CleanExit
部件的方式。非常感谢你的评论,但现在我在按照你的建议修改代码时跳过了其他组,我也想保留它们。如果答案有助于解决问题,请检查✓ 答案旁边的符号。顺便说一句,我非常喜欢您设计
CleanExit
部件的方式。非常感谢您的评论,但现在我在按照您的建议修改代码时跳过了其他组,我也想保留它们