加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS

您的位置:首页 > 社会 > 医疗卫生 > 医卫综合 医卫综合

扫码关注

VBA 自定义宏按钮在医院信息处理上应用探讨

作者:深圳市卫生健康发展研究和数据管理中心 来源:深圳市卫生健康发展研究(第一期) 责任编辑:manman 2023-01-04 人已围观

摘要目的 探讨 VBA 自定义宏按钮在医院信息处理上的应用。方法 通过设计VBA 自定义宏按钮的方式实现填充选择区域中空单元格 , 根据某列单元格的内容拆分成不同的工作表 , 把选择区域的文本格式数字转换为数值格式。结果 通过使用 ExcelVBA 自定义宏按钮的方式,统计人员实现对医疗质量公示数据中选择区域的空单元格进行快速填充为一字线 , 质控人员实现把全院整理后的 DRG 数据根据出院科室自动拆分成 40 个工作表 , 财务人员实现把科室各项收入明细中文本格式的数字快速转换为数值格式。结论 通过制作 VBA 自定义宏按钮的方式,可以快速处理日常重复的工作任务,提高数据处理效率和可靠性,且可在电脑上其他 Excel 表中重复调用,亦可复制到其他电脑上使用,再加上此方法不需要额外的经费投入,从而能帮助更多医院工作人员从日常重复烦琐的工作中摆脱出来,专注于更高质量的脑力劳动。

关键词:自定义;宏按钮;Excel;VBA
 
Abstract: Objective To explore the application of VBA custom macro button inthe field of hospital. Methods By designing VBA custom macro buttons, we can fill theempty cells in the selection area, split them into different worksheets according to thecontents of a column of cells, and convert the text format and number of the selectionarea into numerical format. Results By using Excel VBA to customize the macro button,the statistician can quickly fill the empty cells in the selected area in the medical  qualitypublicity data into horizontal bars, and the quality control personnel can automatically splitthe DRG data sorted by the whole hospital into 40 worksheets according to the dischargedepartment, and the financial personnel can quickly convert the figures in text format intonumerical format. Conclusions By making VBA custom macro buttons, you can quicklydeal with daily repeated work tasks, improve data processing efficiency and reliability, andcan be repeatedly called in other excel tables on the computer or copied to other computers.In addition, this method does not need additional investment. Thus, it can help morehospital staff get rid of daily repetitive and cumbersome work and focus on mental work ofhigher quality.

Keywords: Custom; Macro Button; Excel; VBA

 
VBA(Visual Basic for Applications)是 Visual Basic 的一种宏语言,是基于Visual Basic for Windows 发展而来的。它提供了面向对象的程序设计方法,也提供了相当完整的程序设计语言 [1],具有直接应用 Excel 软件的各项强大功能,且其宏记录器可以很容易地将日常工作转换为 VBA。随着微软办公软件的普遍化,灵活掌握 VBA 语言的使用,可以让复杂的工作简易化,减少不必要的重复性工作,提高工作效率[2-3]。
 
本文将从填充选择区域空单元格,根据某列单元格的内容拆分成不同的工作表,快速把选择区域中的文本格式数字转换为数值格式 3 个 VBA 自定义宏按钮阐述 VBA 在医院信息处理上的应用。因 VBA 自定义宏按钮须建立在 Excel 个人宏工作簿上,才能在电脑任何表格上重复调用,所以在介绍这 3 个 VBA 自定义宏按钮项目前,先对 Excel 个人宏工作簿进行介绍。

1  Excel 个人宏工作簿详细介绍
 
1.1  Excel 个人宏工作簿的名称和位置
2013 版及以上 Excel 个人宏工作簿的名称为:PERSONAL.XLSB。默认保存路 径 在:C:\Users\Xinon\AppData\Roaming\Microsoft\Excel\XLSTART 文 件 夹下面。

1.2  Excel 个人宏工作簿的作用
可以保存一些平时我们经常使用到的宏命令以及一些自定义函数等。保存在个人宏工作簿中的宏,所有的本地 Excel 工作簿都可以使用该宏。

1.3  如何录制宏和使用 Excel 个人宏工作簿
1.3.1 单击开发工具——录制宏,弹出的“录制宏”对话框,宏名输入“填充单元格颜色”,保存在选择“个人宏工作簿”,单击“确定”。如图 1 所示。
 
▲图 1 弹出的“录制宏”对话框

1.3.2 选择默认单元格,将单元格填充色设为黄色。再单击“停止录制”。
 
1.3.3 在 Excel 选中任意单元格或区域,单击开发工具——“宏”,或者 ALT+F8快捷键,打开“宏”对话框,选择刚才录制的宏,然后单击“执行”。这样选中的单元格将会执行刚才录制的效果,单元格填充为黄色。以后打开或者新建其余工作簿,按 ALT+F8 执行宏,都可以快速填充单元格为黄色。

1.4  把新建 VBA 代码或者自定义函数保存在个人宏工作簿中
按下 ALT+F11,打开 VBA 编辑器,找到如图 2 所示的 PERSONAL.XLSB,双击,右击选择插入“模块”,然后将相应的代码粘贴到右边的代码窗口即可。
 
▲图 2 VBA 编辑器
 
1.5  如何删除个人宏工作簿
当不需要使用该文件,可以在默认路径中找到 PERSONAL.XLSB 文件进行删除。如果只是删除其中的一个模块,可选中对应的模块,右键删除即可。


2  VBA 自定义宏按钮项目
 
2.1  填充选择区域空单元格
2.1.1 项目意义
医院统计和财务等部门平时免不了与数字打交道,无论是统计医院各临床科室的业务量,还是统计各科室收入等数据时,Excel 都是一个很好的辅助工具。统计室每月在整理各临床科室近 90 个医疗质量公示数据的时候,时常发现个别科室不是每个医疗质量指标都有数据,况且个别科室的某些医疗质量指标不能存在数据,所以不能存在数据的单元格不能留空或用 0 显示,而需要把这些空单元格填充为横杆,代表无统计意义。因此类情况时常出现,且需要填充的单元格较多,如果手工填充会导致效率低下,所以根据实际工作需求制作了“填充选择区域空单元格”VBA 自定义宏按钮。

2.1.2 制作流程
2.1.2.1 首先把“填充选择区域空单元格”的 VBA 代码写在个人宏工作簿。代码如下所示:
Sub A_ 填充空白单元格()
Application.ScreenUpdating = False
Dim iAs Long, j As Long, a As Long, b As Long
Dim arr, rng As Range, AllRng As Range,txt As String
txt = InputBox(" 请输入填充空白单元格的内容:", " 提示 ", , 2500, 3500)
i = Selection.Cells(1, 1).Row
j = Selection.Cells(1, 1).Column
a = Selection.Rows.Count
b = Selection.Columns.Count
Set AllRng = Cells(i, j).Resize(a, b)
For Each rngInAllRng
If rng.Value = "" Then
rng.Value = txt
Else
End If
Next
Application.ScreenUpdating = True
MsgBox " 处理完成! "
End Sub

2.1.2.2 右击开发工具,点击自定义功能区,选中主选项卡中的开发工具,点击下面的新建选项卡,再点击重命名为“快捷键”,如下图图 3 所示。
 

▲图 3 新建选项卡
 
2.1.2.3 从左边的选择命令框中选中宏,再选中“填充空白单元格”的宏,点击添加至快捷键下方,点击重命名为“填充区域空单元格的内容”和选择一个符号标识,再点击确定,如下图图 4 所示。功能区新建自定义宏按钮,如下图图 5 所示:
 

▲图 4 新建自定义宏按钮

▲图 5 功能区新建自定义宏按钮

2.1.3 效果展示
如图 6 所示,需要填充的空白单元格有 38 个。首先选中需要填充的区域,点击“填充区域空单元格的内容”宏快捷按钮,输入需要填充空白单元格的内容为横杆,再点击确定,待程序运行结束,空白单元格已全部填充为横杆,如下图图 7所示。
 

▲图 6 待填充空白单元格的区域
 

▲图 7 填充为横杆的效果图
 
2.2  根据某列单元格的内容拆分成不同的工作表
2.2.1 项目意义
医院质量控制科每年需要把省平台反馈的全院 DRG 数据进行清洗整理,先把每个出院患者的相关指标数据补齐,再把全院的病例根据出院科室拆分成单独的表,最后下发给各临床科室进行质控。如果人工拆分操作,需要重复复制粘贴近 40 个表格,这会耗时耗力,且时常出错。如果通过傻瓜式的点击按钮就能高效精准拆分表格,那将会很大程度地减轻质控人员工作量。所以根据实际工作需求制作了“根据某列单元格的内容拆分成不同的工作表”VBA 自定义宏按钮。
 
2.2.2 制作流程
2.2.2.1 首先把“根据某列单元格的内容拆分成不同的工作表”的 VBA 代码写在个人宏工作簿。代码如下所示:
Sub A_ 根据某列分出不同的工作表()
Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x&
Dim rngAs Range, Rg As Range, tRow&, tCol&, aCol&, pd&, hangshu&
On Error Resume Next
Application.ScreenUpdating = False ' 关闭屏幕更新
Application.DisplayAlerts = False ' 关闭警告信息提示
Set d = CreateObject("scripting.dictionary") 'set 字典
Set Rg = Application.InputBox(" 请框选拆分依据列!只能选择单列单元
格区域! ", Title:=" 提示 ", Type:=8)
' 用户选择的拆分依据列
tCol = Rg.Column ' 取拆分依据列列标
tRow = Val(Application.InputBox(" 请输入总表标题行的行数? "))
' 用户设置总表的标题行数
If tRow = 0 Then MsgBox " 你未输入标题行行数,程序退出。": Exit Sub
ActiveSheet.Range("A1:V1").AutoFilter
ActiveSheet.Range("A1:V1").AutoFilter
Set rng = ActiveSheet.UsedRange ' 总表的数据区域
arr = rng ' 数据范围装入数组 arr
tCol = tCol - rng.Column + 1 ' 计算依据列在数组中的位置
aCol = UBound(arr, 2) ' 数据源的列数
For i = tRow + 1 To UBound(arr) ' 遍历数组 arr
If Not d.exists(arr(i, tCol)) Then
d(arr(i, tCol)) = i ' 字典中不存在关键词则将行号装入字典
Else
d(arr(i, tCol)) = d(arr(i, tCol)) & "," &i ' 如果存在则合并行号,
以逗号间隔
End If
Next
For Each sht In Worksheets ' 遍历一遍工作表,如果字典中存在则删除
If d.exists(sht.Name) Then sht.Delete
Next
kr = d.keys ' 字典的 key 集
For i = 0 To UBound(kr) ' 遍历字典 key 值
If kr(i) <> "" Then ' 如果 key 不为空
r = Split(d(kr(i)), ",") ' 取出 item 里储存的行号
ReDimbrr(1 To UBound(r) + 1, 1 To aCol) ' 声明放置结果的数组 brr
k = 0
For x = 0 To UBound(r)
k = k + 1 ' 累加记录行数
For j = 1 To aCol ' 循环读取列
brr(k, j) = arr(r(x), j)
Next
Next
With Worksheets.Add(, Sheets(Sheets.Count))
' 新建一个工作表,位置在所有已存在 sheet 的后面
.Name = kr(i) ' 表格命名
.[a1].Resize(tRow, aCol) = arr ' 放标题行
.Columns("A:V").NumberFormatLocal = "@" ' 格式为文本
.[a1].Offset(tRow, 0).Resize(k, aCol) = brr ' 放置数据区域
.[a1].Select
End With
End If
Next
Sheets(1).Activate ' 激活第一个表格
Set d = Nothing ' 释放字典
Erase arr: Erase brr ' 释放数组
MsgBox " 数据拆分完成! "
Application.ScreenUpdating = True ' 恢复屏幕更新
Application.DisplayAlerts = True ' 恢复警示
End Sub
 
2.2.2.2 按项目 1 的步骤新建“根据某列分出不同的工作表”宏按钮,点击运行,按照提示操作执行选中 P 列作为拆分依据列,输入保留的标题行的行数为第 1 行,分别如下图图 8,图 9 所示。最终拆分结果如下图图 10 所示。


▲图 8 选中 P 列作为拆分依据列


▲图 9 输入保留的标题行的行数为第 1 行


▲图 10 最终拆分结果图
 
2.3  文本格式数字转换为数值格式
2.3.1 项目意义
医院财务科每月汇总各临床科室各项业务收入的时候,时常需要使用 SUM函数对某个区域的数字求和,如果区域中存在文本格式的数字,SUM 函数无法识别,就会导致求和的结果与实际情况不符;如果手工把每个文本格式的数字转为数值格式,那将会费时费力,而且无法保证是否已全部转换。所以根据实际工作需求制作了“文本格式数字转换为数值格式”VBA 自定义宏按钮。

2.3.2 制作流程
2.3.2.1 首先把“文本格式数字转换为数值格式”的 VBA 代码写在个人宏工作簿。代码如下所示:
Sub A_ 文本格式数字转换为数值格式()
Application.ScreenUpdating = False
Dim iAs Long, j As Long, a As Long, b As Long
Dim arr, rngAs Range, AllRng As Range
i = Selection.Cells(1, 1).Row
j = Selection.Cells(1, 1).Column
a = Selection.Rows.Count
b = Selection.Columns.Count
Set AllRng = Cells(i, j).Resize(a, b)
For Each rngInAllRng
rng.NumberFormatLocal = "G/ 通用格式 "
rng = "=--" &rng.Value
rng = rng.Value
Next
Application.ScreenUpdating = True
MsgBox " 处理完成! "
End Sub

2.3.2.2 按项目 1 的步骤新建“文本格式数字转换为数值格式”宏按钮。选择需要转换格式的单元格区域,如图 11 所示。点击运行,待程序运行结束,所选区域单元格已转换为数值格式,如图 12 所示。
 

▲图 11 选择需要转换格式的单元格区域


▲图 12 所选区域单元格已转换为数值格式

 
3  小结
 
本文通过 3 个 VBA 自定义宏按钮在医院信息处理上的应用实例,阐述了医院工作人员可以根据自己实际的工作需求,灵活制作提高工作效率的宏按钮,从而减轻工作负担,把重复的工作交给计算机自动执行,从日常重复枯燥的工作中摆脱出来,专注于更高质量的脑力劳动 [4],而且 VBA 宏按钮可以复制至其他电脑,让其他电脑也能拥有自动处理重复工作的功能。再加上目前大多数电脑都安装Excel,所以此方法不需要额外的经费投入。总之,VBA 自定义宏按钮是适用于多领域的一种较好的工具,医院工作人员可在实际工作中掌握使用。

参考文献
[1] 陈海生,彭峰,刘玉国 . Excel VBA 在医院基本药物数据统计中的应用 [J]. 中国现代应用药学,2015,32(12): 1494-1498.
[2] 金朝辉,顾锦建,郑明琳,等 . VBA 语言在我院药库智能化办公中的应用 [J]. 中国药房,2016,27(7): 987-989.
[3] 朱俊,冯锦丽 . Excel Visual Basic 应用程序在医院医用耗材管理中的应用分析 [J]. 中国医学装备,2019,16(2): 84-89.
[4] 刘坤彪,陈姝 . 基于 Access VBA 的医院门诊信息系统开发 [J]. 河北软件职业技术学院学报,2013,15(4): 43-48,52

本文作者:李昕昊 ,叶丽娴 ,赖伏虎 ,曾少婷 ,郭玉花

很赞哦! ( )

评论

0

搜一搜