上个周,有位学校的老师找到我,咨询关于excel表格数据录入的问题,如下图:(简化了一部分表格)
他们老师需要把好几百个学生的月考成绩信息录入到excel表里,方便后续的整理分析。
问题
通过常规的输入,他们经常会遇到未按要求录入的问题,如:1、粗心导致语数外分数不在0-100范围,体育成绩不在0-30范围;
2、有部分信息遗漏未录入;
3、输入错行,将原有的数据覆盖;
......
除了这些,每输入一行数据,需要用鼠标点击到下一行,再进行录入,这样也比较浪费时间、很繁琐。
这些问题说起来也不是什么大问题,但是就是很繁琐,对效率很有影响,有没有好的办法改进一下?
操作演示
其实,这个完全也可以用vba来解决,当然为了解决上面这个问题,这次要添加一个窗体,可以理解为一个录入数据的窗口,通过这个自定的窗口把数据输入到表里面去。
为了更清楚直观的看到效果,永恒君录制了一小段视频,大家先看看效果:
很显然,通过这个设计只需要专注输入的内容,全程只需要键盘即可完成操作。
这样很大程度地避免没有信息输入、录入不符合要求的数据(语数外分数一定为0-100,体育成绩一定是0-30)的情况,提升不少效率。
解决思路
关于vba窗体设计本身,没有太多的难点,就是和堆积木一样把元素添加进去就好了,如下图:
稍微难一些的就是事件的代码,比如:
如果没有内容,则要提示"请务必输入姓名、成绩信息!"
If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox2.Text = "" Or TextBox2.Text = "" Then
MsgBox "请务必输入姓名、成绩信息!"
Exit Sub
End If
如果语文成绩超出范围,则提示请输入0-100之间的数字。
If TextBox2.Text < 0 Or TextBox2.Text > 100 Then
MsgBox "语文成绩请输入0-100之间的数字!"
TextBox2.Text = ""
TextBox2.SetFocus
Exit Sub
End If
窗体内输入完成后回车,成绩直接录入到excel表格中。输入完一个学生的成绩,按回车即可输入下一个。
r = [B65536].End(xlUp).Row + 1
Cells(r, "A") = Cells(r - 1, "A") + 1
Cells(r, "B") = TextBox1.Text
Cells(r, "C") = TextBox2.Text
Cells(r, "D") = TextBox3.Text
Cells(r, "E") = TextBox4.Text
Cells(r, "F") = TextBox5.Text
===
Private Sub TextBox5_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Call CommandButton1_Click
TextBox1.SetFocus
End If
End Sub
把上面代码和上面的窗体组合起来即可实现效果。
永恒君已经把源文件准备好,需要的话在wx公号后台回复「录入」即可。
你也可以在公号里「精华整理」-「VBA实例」进行查看更多vba实例,提高工作效率。
如果你觉得文章还不错,请大家点个好看、分享一下。你的肯定是我最大的鼓励和支持。
Excel vba 实例(20) - 一键填充每月员工拜访地区
Excel vba 实例(19) - 一键汇总不完全相同的sheet到总表
Excel vba 实例(18) - 一键将单列长数据平均拆成多列
收藏 | 17个Excel vba实例汇总
Excel vba 实例(17) - 遍历多个工作簿并提取内容到总表
Excel vba 实例(16) - 按指定字段分类批量提取内容