ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教数据汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-27 19:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=LET(s,TRIM(CLEAN(VSTACK(血常规!A2:C9999,生化!A2:C9999))),p,PIVOTBY(SCAN(,INDEX(s,,1),LAMBDA(x,y,IF(y="",x,y))),INDEX(s,,2),INDEX(s,,3),SINGLE,0,0,,0,,INDEX(s,,2)<>""),bt,TAKE(DROP(p,,1),1),numbt,XLOOKUP(bt,{"红细胞数目","血红蛋白浓度","血小板数目","白细胞数目","总胆红素","谷丙转氨酶"},SEQUENCE(,COLUMNS(bt))),ss,SORTBY(DROP(p,,1),numbt,1),dd,REDUCE({"病人信息","学校","班级","姓名","性别"},DROP(TAKE(p,,1),1),LAMBDA(x,y,VSTACK(x,XLOOKUP(y,名单!A2:A11,名单!A2:E11)))),HSTACK(dd,ss))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-27 20:46 | 显示全部楼层
quqiyuan 发表于 2024-10-27 18:46
不知道是不是这个意思,只要有第一列和第一行,然后把数据筛选出来,仅供参考。。。

谢谢老师,基本就是这个意思。不过筛选出数据后,删除了编号内容再运行的话,会有报错。删除编号中间某个内容再运行的话,最后一个编号也有点问题。老师你看看还能怎么处理一下。不过就现在这个,已经基本可以直接用起来了,非常感谢。

体检数据查询汇总.zip

12.91 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-10-27 21:35 | 显示全部楼层
本帖最后由 quqiyuan 于 2024-10-27 21:38 编辑
lshn2015 发表于 2024-10-27 20:46
谢谢老师,基本就是这个意思。不过筛选出数据后,删除了编号内容再运行的话,会有报错。删除编号中间某个 ...

基本按照你的意思修改了下,你测试一下。。。

image.png
image.png
image.png

体检数据查询汇总.zip

26.06 KB, 下载次数: 2

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-10-27 21:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
代码如下。。。
Sub test()
    Dim wb As Workbook, sht As Worksheet
    Application.ScreenUpdating = False
    Set wb = ThisWorkbook
    Set sh1 = wb.Sheets("血常规")
    Set sh2 = wb.Sheets("生化")
    Set sh3 = wb.Sheets("名单")
    Set sh4 = wb.Sheets("汇总")
    arr = sh1.[a1].CurrentRegion
    brr = sh2.[a1].CurrentRegion
    crr = sh3.[a1].CurrentRegion
    r = sh4.Cells(Rows.Count, 1).End(3).Row
    c = sh4.Cells(1, Columns.Count).End(1).Column
    frr = sh4.Range(sh4.[a1], sh4.Cells(r, c))
    grr = Application.Index(frr, 1)
    If r = 1 Then MsgBox "查询数据表格空白!!!": Exit Sub
    ReDim hrr(1 To UBound(frr) - 1, 1 To 2)
    n = UBound(frr) - 1
    Set d = CreateObject("scripting.dictionary")
    ReDim drr(1 To UBound(frr) - 1, 1 To UBound(frr, 2))
    For i = 2 To UBound(frr)
        d(frr(i, 1)) = i - 1: drr(i - 1, 1) = frr(i, 1)
        hrr(i - 1, 1) = i: hrr(i - 1, 2) = sh4.Cells(i, 1).Interior.Color
    Next
    For i = 2 To UBound(crr)
        If d.exists(crr(i, 1)) Then
            For j = 2 To UBound(crr, 2)
                drr(d(crr(i, 1)), j) = crr(i, j)
            Next
        End If
    Next
    For i = 2 To UBound(arr)
        If arr(i, 1) = Empty Then arr(i, 1) = arr(i - 1, 1)
        If d.exists(Trim(arr(i, 1))) And arr(i, 2) <> Empty Then
            x = d(Trim(arr(i, 1))): y = Application.Match(arr(i, 2), grr, 0)
            drr(x, y) = arr(i, 3)
        End If
    Next
    For i = 2 To UBound(brr)
        If brr(i, 1) = Empty Then brr(i, 1) = brr(i - 1, 1)
        If d.exists(Trim(brr(i, 1))) And brr(i, 2) <> Empty Then
            x = d(Trim(brr(i, 1))): y = Application.Match(brr(i, 2), grr, 0)
            drr(x, y) = brr(i, 3)
        End If
    Next
    With sh4
        .UsedRange.Clear
        .[a1].Resize(UBound(frr), UBound(frr, 2)) = frr
        .Cells(2, 1).Resize(UBound(drr), UBound(drr, 2)).NumberFormat = "@"
        .Cells(2, 1).Resize(n, UBound(drr, 2)) = drr
        .Cells(1, 1).Resize(n + 1, UBound(drr, 2)).Borders.LineStyle = 1
        .Cells(1, 1).Resize(n + 1, UBound(drr, 2)).HorizontalAlignment = xlCenter
        .Cells(1, 1).Resize(n + 1, UBound(drr, 2)).Columns.AutoFit
        For i = 1 To UBound(hrr)
            .Cells(i + 1, 1).Resize(, UBound(drr, 2)).Interior.Color = hrr(i, 2)
        Next
    End With
    Beep
    Set d = Nothing
    Application.ScreenUpdating = True
End Sub
   

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-27 22:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
quqiyuan 发表于 2024-10-27 21:35
代码如下。。。
Sub test()
    Dim wb As Workbook, sht As Worksheet

感谢老师帮助,干活效率大大提高了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 19:41 , Processed in 0.043996 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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