ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 搞了两天也没有搞出来,求助大神

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-3 14:33 | 显示全部楼层
字典嵌套可以解决

TA的精华主题

TA的得分主题

发表于 2023-7-3 15:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-3 16:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-3 16:12 | 显示全部楼层
XIHAUA 发表于 2023-7-2 20:31
来瓶6.8的红牛就可以了,不然没力气干活

            

TA的精华主题

TA的得分主题

发表于 2023-7-3 16:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-3 17:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 shinechou86 于 2023-7-3 18:53 编辑

数据处理为什么不用pandas,以前两个需求为例,绝对代码量最低
pandas.jpg

TA的精华主题

TA的得分主题

发表于 2023-7-3 20:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
吴中泉 发表于 2023-7-3 14:12
灵犀之声 发表于 2023-7-2 15:13
感谢大佬,能给附件吗?
有点烦了,应该可以优化的
  1. Sub ssjss() 'wzq 2023.7.3
  2. Dim arr, brr, d, i&, T
  3. Set d = CreateObject("scripting.dictionary")
  4. With Sheets("数据")
  5.     r = .Cells(Rows.Count, 1).End(xlUp).Row
  6.     arr = .Range("a1:i" & r)
  7. End With
  8. Sheet1.Activate
  9. [a7:K60000] = ""
  10. '问题一
  11. For i = 2 To UBound(arr)
  12.     If 0 < InStr(arr(i, 5), "血氧饱和度监测") Then
  13.         T = arr(i, 1)
  14.         If Not d.exists(T) Then
  15.             d(T) = Array(arr(i, 9), 1, 0)
  16.         Else
  17.             d(T) = Array(d(T)(0) + arr(i, 9), d(T)(1) + 1, d(T)(2))
  18.         End If
  19.     End If
  20.     If 0 < InStr(arr(i, 5), "指脉氧监测") Then
  21.         T = arr(i, 1)
  22.         If Not d.exists(T) Then
  23.             d(T) = Array(arr(i, 9), 0, 1)
  24.         Else
  25.             d(T) = Array(d(T)(0) + arr(i, 9), d(T)(1), d(T)(2) + 1)
  26.         End If
  27.     End If
  28. Next
  29. ReDim brr(1 To d.Count, 1 To 2)
  30. i = 0
  31. If d.Count > 0 Then
  32.     For Each T In d.keys
  33.         If d(T)(1) > 0 And d(T)(2) > 0 Then
  34.             i = i + 1
  35.             brr(i, 1) = T
  36.             brr(i, 2) = d(T)(0)
  37.         End If
  38.     Next
  39.     Sheet1.[A7].Resize(d.Count, 2) = brr
  40. End If
  41. d.RemoveAll
  42. '问题二
  43. For i = 2 To UBound(arr)
  44.     If 0 < InStr(arr(i, 5), "胃肠减压") Then
  45.         T = arr(i, 1) & "|" & arr(i, 4)
  46.         If Not d.exists(T) Then
  47.             d(T) = Array(1, arr(i, 9))
  48.         Else
  49.             d(T) = Array(d(T)(0) + 1, d(T)(1) + arr(i, 9))
  50.         End If
  51.     End If
  52. Next
  53. ReDim brr(1 To d.Count, 1 To 2)
  54. i = 0
  55. If d.Count > 0 Then
  56.     For Each T In d.keys
  57.         If d(T)(0) > 1 Then
  58.             i = i + 1
  59.             brr(i, 1) = Split(T, "|")(0)
  60.             brr(i, 2) = d(T)(1)
  61.         End If
  62.     Next
  63.     Sheet1.[d7].Resize(d.Count, 2) = brr
  64. End If
  65. d.RemoveAll
  66. '问题三
  67. For i = 2 To UBound(arr)
  68.     If 0 < InStr(arr(i, 5), "二级医院普通床位费") And arr(i, 7) > 40 Then
  69.         T = arr(i, 1) & " " & arr(i, 4)
  70.         If Not d.exists(T) Then
  71.             d(T) = Array(1, arr(i, 9))
  72.         Else
  73.             d(T) = Array(d(T)(0) + 1, d(T)(1) + arr(i, 9))
  74.         End If
  75.     End If
  76. Next
  77. ReDim brr(1 To d.Count, 1 To 2)
  78. i = 0
  79. If d.Count > 0 Then
  80.     For Each T In d.keys
  81.         If d(T)(0) > 1 Then
  82.             i = i + 1
  83.             brr(i, 1) = T 'Split(T, " ")(0)
  84.             brr(i, 2) = d(T)(1)
  85.         End If
  86.     Next
  87.     Sheet1.[G7].Resize(d.Count, 2) = brr
  88. End If
  89. d.RemoveAll
  90. '问题四
  91. Dim tian As Integer
  92. For i = 2 To UBound(arr)
  93.         T = arr(i, 1)
  94.         If Not d.exists(T) Then
  95.             tian = arr(i, 3) - arr(i, 2)
  96.             d(T) = Array(1, arr(i, 9), tian)
  97.         Else
  98.             d(T) = Array(d(T)(0) + 1, d(T)(1) + arr(i, 9), d(T)(2))
  99.         End If
  100. Next
  101. ReDim brr(1 To d.Count, 1 To 2)
  102. i = 0
  103. If d.Count > 0 Then
  104.     For Each T In d.keys
  105.         If d(T)(0) > d(T)(2) Then
  106.             i = i + 1
  107.             brr(i, 1) = T
  108.             brr(i, 2) = d(T)(1)
  109.         End If
  110.     Next
  111.     Sheet1.[J7].Resize(d.Count, 2) = brr
  112. End If

  113. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2023-7-3 23:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

时间问题,明天有时间弄一下

TA的精华主题

TA的得分主题

发表于 2023-7-4 00:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-4 11:33 | 显示全部楼层
负的算退费,可以减去。就是第4点,收费总次数超过住院的天数,这个不一定准确。如糖尿病患者1天4次测血糖监测血糖,加起来一定超过
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 22:00 , Processed in 0.046834 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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