Excel VBA之函数篇-3.6自动录入时间不精确?搭配时间生成器更完美
Excel VBA之函数篇-3.6自动录入时间不精确?搭配时间生成器更完美
前景提要
昨天我们分享了时间/日期的函数,time和date,能够成功的帮助我们自动生成当前的时间和日期,在一些工作场景中,比方说后期数据整理,录入等方面都有不小的帮助,不过后来有一些朋友问我,他们很多时候并不是及时录入数据的,比方说很多店铺都是在下班或者是快要下班的时候,才回去整理数据的,而这个时候如果按照我们昨天的方式来录入的话,日期应该没问题,但是时间就可能有很大的问题了,登记表格的时候都是录入这个动作发生的时间,并非时间订单销售的时候,如果后期用这份数据来分析市场的话,可能会得出一个销售高峰在下班前半个钟这样的一个错误数据,那么这样的错误要如何避免呢?
最好的方法就是我们在录入数据的时候,手工录入销售的时间,不手工录入的话,就牵扯到另外一个问题,日期可能会出现格式不同的情况,时间更加麻烦,每次都要输入一个“:”,这样的话就无法实现高效录入的效果了,怎么办呢?别怕,我们今天继续完善下我们的代码,通过时间/日期生成器函数来实现自动搭配手工的方式来完善录入操作。
函数说明
今天我们重点介绍下两个函数,一个是日期生成器函数,DateSerial,你按照年月日这个顺序提供三个数据,它自动可以生成一个日期,这个函数还有一个很厉害的地方,它还可以自动计算正确的日期,比方说你输入2019,5,36,5月怎么都不可能有36天,那么这样输入会不错嘛?不会的,他会自动帮你调整到2019/6/5这样的日期,所以你也可以用来做日期之间的计算的。另外一个是时间生成器函数,TimeSerial,效果和上面的DateSerial是差不多的,你按照时分秒提供三个数据,他能够自动生成一个时间。好了,有了方法,我们来继续完善下我们之前的代码
上代码
我们今天还是利用我们昨天的表格,表格方面不做任何的变动,这样大家就能够相互比较前后两种方法的差异。
其实按照我们日常工作中的场景,数据录入一般都是集中在当天完成的,唯一可能不太准确的就是具体的时间,可能向我们前面说的,是集中某个时间段录入的,也有可能过了半个钟或者有空了才会去统计数据,录入数据的,所以自动生成时间可能并不太符合某些场景,今天我们为了一起分享下日期生成器函数的使用,所以默认时间、日期都需要手工录入这样子,方面我们学习这两个函数,实际工作中,大家可以根据自己的使用场景来选择自动、手动搭配来使用。
Sub test()
Dim num&, ShopName$
line:
num = Application.InputBox("请输入商品的序号", "输入准确的序号", , , , , , 3)
If num <> 0 Then
ShopName = Choose(num, "苹果手机", "vivo", "华为", "OPPO X27", "摩托罗拉", "红米 小辣椒XR", "百度音响5-5")
LastCol = Cells(Rows.Count, 6).End(xlUp).Row
Cells(LastCol + 1, 6) = ShopName
'Cells(LastCol + 1, 9) = Date
NewDate = Application.InputBox("请输入实际销售日期,用点隔开", "日期的输入", , , , , , 3)
YEAR1 = Split(NewDate, ".")(0)
MONTH1 = Split(NewDate, ".")(1)
DAY1 = Split(NewDate, ".")(2)
Cells(LastCol + 1, 9) = DateSerial(YEAR1, MONTH1, DAY1)
NewDate = Application.InputBox("请输入实际销售时间,用点隔开", "日期的输入", , , , , , 3)
'Cells(LastCol + 1, 9).Offset(0, 1) = Time
hour1 = Split(NewDate, ".")(0)
min1 = Split(NewDate, ".")(1)
senc1 = Split(NewDate, ".")(2)
Cells(LastCol + 1, 9).Offset(0, 1) = TimeSerial(hour1, min1, senc1)
GoTo line
End If
End Sub
效果如图:
程序依然是需要我们输入产品的序号,这是我们之前学习的快速录入的方法,这里我们选择5,然后继续执行,摩托罗拉已经被录入产品那一列了,之后会有一个弹窗,提示我们输入三个数字,代表年月日,并且用点隔开
这里我们随便输入2020.10.5,这里我们依然利用split()函数来拆分,得到年月日,并通过DateSerial生成一个最终的日期,2020/10/5
然后程序继续执行,这里还有一个输入框,提示我们输入时分秒,依然使用点隔开,我们输入19.20.20这样的三个数据,这里也是成功的生成了一个准确的时间
完美的达到了我们的要求。
代码解析
本次的代码依然没有太多的难点,基本上还是利用之前我们学过的inputbox输入框+split()拆分函数来实现交互的,之后我们就通过TimeSerial和DateSerial这两个函数得到我们想要得到的日期了,日常工作中,大家可以结合上次分享的代码内容一起搭配使用,一般日期都是可以自动录入的,因为基本上都是当天录入数据的嘛,而时间可能会有差异,这个时候就可以让时间实现手工录入,一样可以节省我们不少的工作时间。
总结
============================================
每一个程序的小脚本都是在不断的调试和测试中完善的,任何人在写代码的时候都没有办法考虑所有的场景和问题,只能通过后期不断的完善,这也是大家以后写代码的一个思路和方向,一次就写出符合所有使用场景得代码是不可能得,都需要经过后期不断得调试和更改得,在后期使用中,如果还有其他问题,大家也可以反馈出来,我们继续完善,争取让更多人得工作更加轻松。
============================================