寻求Excel宏代码开发支持:条件格式、重复项、仪表盘数据
现成解决方案:患者离房数据处理宏+透视表适配设置
嘿,我刚好处理过类似的医疗数据分析场景,给你一套现成的方案,直接就能用,不用再去拼凑零散的代码片段了:
一、现成VBA宏(处理结构化+非结构化数据)
这个宏会自动扫描你的非结构化文本列(假设列名为离房备注),提取关键信息生成结构化字段,完美适配你已有的数据透视表:
Sub ProcessPatientLeaveData() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim noteText As String Dim leaveType As String Dim leaveDuration As String ' 替换成你的数据工作表名称 Set ws = ThisWorkbook.Worksheets("患者离房数据") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 添加新的结构化字段列标题 ws.Cells(1, "D").Value = "离房类型" ws.Cells(1, "E").Value = "离房时长" ' 遍历处理每一行数据 For i = 2 To lastRow noteText = ws.Cells(i, "C").Value ' 假设非结构化数据在C列 leaveType = "其他" leaveDuration = "未知" ' 匹配常见离房类型(可根据你的数据调整关键词) If InStr(1, noteText, "请假", vbTextCompare) > 0 Then leaveType = "请假" ElseIf InStr(1, noteText, "检查", vbTextCompare) > 0 Then leaveType = "检查" ElseIf InStr(1, noteText, "转科", vbTextCompare) > 0 Then leaveType = "转科" ElseIf InStr(1, noteText, "出院", vbTextCompare) > 0 Then leaveType = "出院" End If ' 提取离房时长(匹配数字+小时/分钟的格式) Dim regex As Object Set regex = CreateObject("VBScript.RegExp") regex.Pattern = "\d+小时|\d+分钟" Dim matches As Object Set matches = regex.Execute(noteText) If matches.Count > 0 Then leaveDuration = matches(0).Value End If ' 写入结构化字段 ws.Cells(i, "D").Value = leaveType ws.Cells(i, "E").Value = leaveDuration Next i ' 自动调整列宽 ws.Columns("D:E").AutoFit MsgBox "数据处理完成!已生成结构化字段适配透视表。", vbInformation End Sub
二、数据透视表适配设置(允许调整)
运行完宏之后,按照以下步骤调整你的透视表即可实现分层分析:
- 刷新数据透视表,将新生成的
离房类型字段拖到行区域,离房时长拖到值区域(可设置为计数或平均值) - 如果需要区分更细的层级,可以把原有的结构化字段(比如
患者科室、离房日期)拖到列区域或筛选器 - 若想保留非结构化数据的细节,可以将
离房备注字段添加到值区域,设置为“值显示方式”里的“计数”或“最大值”(用于查看样本内容)
补充说明
如果你的非结构化数据有特殊的关键词或格式,只需要修改宏里的匹配常见离房类型部分,添加或调整对应的关键词即可,完全不影响原有数据结构。
内容的提问来源于stack exchange,提问作者mullins7009
相关产品推荐
相关产品推荐

