ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 淘气的萝卜

[求助] 数据汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-4 23:12 | 显示全部楼层
按照模板全部填充了公式,但是修改了D3:L3的项目名称(因为与实际有出入),黄色与浅红色均为公式,绿色为输入条件(可不输入)。不知道理解的几个合格率对不对。
微信图片_20241204230948.png

数据汇总.zip

1.6 MB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-5 11:23 | 显示全部楼层
quqiyuan 发表于 2024-12-4 22:58
代码如下。。。
Sub test()
    Dim wb As Workbook, sht As Worksheet, sh As Worksheet

非常感谢大佬的回复,虽然看不懂,但程序非常的好用
另外,表头A2与A3会移到汇总数据的最下面,帮忙再调整下,感谢!
222.jpg

TA的精华主题

TA的得分主题

发表于 2024-12-5 12:16 | 显示全部楼层
淘气的萝卜 发表于 2024-12-5 11:23
非常感谢大佬的回复,虽然看不懂,但程序非常的好用
另外,表头A2与A3会移到汇总数据的最下面,帮忙再调 ...

我运行没问题哦,估计你是不是把你说的最后那两行去掉了?我这里有个判断最后一行位置,然后减5,所以造成这个问题。要不你保留最后两行,它不够空间会插入空行的。刚刚也修正了一下一个问题。。。
image.png

数据汇总1234.zip

1.9 MB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-12-5 12:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
代码如下。。。
如果你后面没有你说的那两行,这个直接在A4输入数据就可以了
看你的选择啦
Sub test()
    Dim wb As Workbook, sht As Worksheet, sh As Worksheet
    Set wb = ThisWorkbook
    Set sht = wb.Sheets("来料检验明细表")
    Set sh = wb.Sheets("查询表")
    r = sh.Cells(Rows.Count, 1).End(3).Row - 5
    xm = sh.[d1]: d = sh.[f1]
    s = xm & "|" & d
    arr = sht.[a1].CurrentRegion
    ReDim brr(1 To 10000, 1 To 100)
    Set d = CreateObject("scripting.dictionary")
'    n = 0: m = 3
'    brr(1, 1) = "供应商名称": brr(1, 2) = "交付总数": brr(1, 3) = "不合格数"
    biaoti = sh.[a3:o3]
    For i = 4 To 12
        d(biaoti(1, i)) = i
    Next
    For i = 2 To UBound(arr)
        ss = arr(i, 3) & "|" & Month(arr(i, 7))
        If InStr(ss, s) Then
            hang = hang + 1
            zong = zong + arr(i, 6)
            If Not d.exists(arr(i, 13)) Then
                n = n + 1
                d(arr(i, 13)) = n
                brr(n, 1) = arr(i, 13)
            End If
            If arr(i, 11) <> Empty Then
                If d.exists(arr(i, 11)) Then
'                    m = m + 1
'                    d(arr(i, 11)) = m
'                    brr(1, m) = arr(i, 11)
                    y = d(arr(i, 11))
                End If
            End If
            x = d(arr(i, 13))
'            y = d(arr(i, 11))
            brr(x, 100) = brr(x, 100) + 1
            brr(x, 2) = brr(x, 2) + arr(i, 6)
            brr(x, 3) = brr(x, 3) + arr(i, 9)
            If y <> Empty Then brr(x, y) = brr(x, y) + arr(i, 9): y = Empty: brr(x, 99) = brr(x, 99) + 1
        End If
    Next
    For i = 1 To n
         brr(i, 13) = Format(1 - brr(i, 3) / brr(i, 2), "0.00%")
         brr(i, 14) = Format(1 - brr(i, 99) / brr(i, 100), "0.00%")
         brr(i, 15) = "=VLOOKUP(" & brr(i, 13) & ",{0,""E级"";0.8,""D级"";0.85,""C级"";0.9,""B级"";0.95,""A级""},2)"
    Next
    If n <= r Then
        sh.[a4].Resize(r, UBound(biaoti, 2)) = ""
        sh.[a4].Resize(n, UBound(biaoti, 2)) = brr
    Else
        sh.Cells(r + 4, 1).Resize(n - r, UBound(biaoti, 2)).Insert xlShiftDown
        sh.[a4].Resize(r, UBound(biaoti, 2)) = ""
        sh.[a4].Resize(n, UBound(biaoti, 2)) = brr
    End If
    sh.[h1] = hang: sh.[j1] = zong
    Set d = Nothing
    Beep
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-5 13:37 | 显示全部楼层
quqiyuan 发表于 2024-12-5 12:18
代码如下。。。
如果你后面没有你说的那两行,这个直接在A4输入数据就可以了
看你的选择啦

完美!!!烦请大佬再帮忙完善下查询表中第二行数据统计
222.jpg

TA的精华主题

TA的得分主题

发表于 2024-12-5 14:24 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-5 14:40 | 显示全部楼层

感谢回复~~~~
公式很好用,就是打开有点慢,另外,没有数据的行不要显示出来,能优化吗?能用VBA就更好了
222.jpg

TA的精华主题

TA的得分主题

发表于 2024-12-5 15:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
淘气的萝卜 发表于 2024-12-5 13:37
完美!!!烦请大佬再帮忙完善下查询表中第二行数据统计

增加你这些需求,你测试一下咯,有可能对要求理解有偏差。仅供参考。。。

image.png
image.png

数据汇总1234.zip

1.9 MB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-5 15:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
代码如下。。。。
Sub test()
    Dim wb As Workbook, sht As Worksheet, sh As Worksheet
    Set wb = ThisWorkbook
    Set sht = wb.Sheets("来料检验明细表")
    Set sh = wb.Sheets("查询表")
    r = sh.Cells(Rows.Count, 1).End(3).Row - 5
    xm = sh.[d1]: d = sh.[f1]
    s = xm & "|" & d
    arr = sht.[a1].CurrentRegion
    ReDim brr(1 To 10000, 1 To 100)
    Set d = CreateObject("scripting.dictionary")
'    n = 0: m = 3
'    brr(1, 1) = "供应商名称": brr(1, 2) = "交付总数": brr(1, 3) = "不合格数"
    biaoti = sh.[a3:o3]
    For i = 4 To 12
        d(biaoti(1, i)) = i
    Next
    For i = 2 To UBound(arr)
        ss = arr(i, 3) & "|" & Month(arr(i, 7))
        If InStr(ss, s) Then
            hang = hang + 1
            zong = zong + arr(i, 6)
            buliang = buliang + arr(i, 9)
            If arr(i, 10) = "机加" Then
                jijia = jijia + arr(i, 6)
                jijia_buliang = jijia_buliang + arr(i, 9)
            ElseIf arr(i, 10) = "大板" Then
                daban = daban + arr(i, 6)
                daban_buliang = daban_buliang + arr(i, 9)
            ElseIf arr(i, 10) = "钣金" Then
                banjin = banjin + arr(i, 6)
                banjin_buliang = banjin_buliang + arr(i, 9)
            ElseIf arr(i, 10) = "亚克力" Then
                yakeli = yakeli + arr(i, 6)
                yakeli_buliang = yakeli_buliang + arr(i, 9)
            End If
            If Not d.exists(arr(i, 13)) Then
                n = n + 1
                d(arr(i, 13)) = n
                brr(n, 1) = arr(i, 13)
            End If
            If arr(i, 11) <> Empty Then
                If d.exists(arr(i, 11)) Then
'                    m = m + 1
'                    d(arr(i, 11)) = m
'                    brr(1, m) = arr(i, 11)
                    y = d(arr(i, 11))
                End If
            End If
            x = d(arr(i, 13))
'            y = d(arr(i, 11))
            brr(x, 100) = brr(x, 100) + 1
            brr(x, 2) = brr(x, 2) + arr(i, 6)
            brr(x, 3) = brr(x, 3) + arr(i, 9)
            If y <> Empty Then brr(x, y) = brr(x, y) + arr(i, 9): y = Empty: brr(x, 99) = brr(x, 99) + 1
        End If
    Next
    For i = 1 To n
         brr(i, 13) = Format(1 - brr(i, 3) / brr(i, 2), "0.00%")
         brr(i, 14) = Format(1 - brr(i, 99) / brr(i, 100), "0.00%")
         brr(i, 15) = "=VLOOKUP(" & brr(i, 13) & ",{0,""E级"";0.8,""D级"";0.85,""C级"";0.9,""B级"";0.95,""A级""},2)"
    Next
    If n <= r Then
        sh.[a4].Resize(r, UBound(biaoti, 2)) = ""
        sh.[a4].Resize(n, UBound(biaoti, 2)) = brr
    Else
        sh.Cells(r + 4, 1).Resize(n - r, UBound(biaoti, 2)).Insert xlShiftDown
        sh.[a4].Resize(r, UBound(biaoti, 2)) = ""
        sh.[a4].Resize(n, UBound(biaoti, 2)) = brr
    End If
    sh.[h1] = hang: sh.[j1] = zong
    sh.[b2] = 1 - jijia_buliang / jijia
    sh.[d2] = 1 - banjin_buliang / banjin
    sh.[f2] = 1 - yakeli_buliang / yakeli
    sh.[h2] = 1 - daban_buliang / daban
    sh.[j2] = 1 - buliang / zong
    Set d = Nothing
    Beep
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-5 16:33 | 显示全部楼层
quqiyuan 发表于 2024-12-5 15:38
增加你这些需求,你测试一下咯,有可能对要求理解有偏差。仅供参考。。。

~~~~~~完美完美~~~~~~~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 19:07 , Processed in 0.051580 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表