美文网首页VBA分享专栏精进Excel
Excel VBA之函数篇-3.6自动录入时间不精确?搭配时间生

Excel VBA之函数篇-3.6自动录入时间不精确?搭配时间生

作者: Excel和VBA | 来源:发表于2021-01-21 18:02 被阅读0次

    前景提要

    昨天我们分享了时间/日期的函数,time和date,能够成功的帮助我们自动生成当前的时间和日期,在一些工作场景中,比方说后期数据整理,录入等方面都有不小的帮助,不过后来有一些朋友问我,他们很多时候并不是及时录入数据的,比方说很多店铺都是在下班或者是快要下班的时候,才回去整理数据的,而这个时候如果按照我们昨天的方式来录入的话,日期应该没问题,但是时间就可能有很大的问题了,登记表格的时候都是录入这个动作发生的时间,并非时间订单销售的时候,如果后期用这份数据来分析市场的话,可能会得出一个销售高峰在下班前半个钟这样的一个错误数据,那么这样的错误要如何避免呢?

    最好的方法就是我们在录入数据的时候,手工录入销售的时间,不手工录入的话,就牵扯到另外一个问题,日期可能会出现格式不同的情况,时间更加麻烦,每次都要输入一个“:”,这样的话就无法实现高效录入的效果了,怎么办呢?别怕,我们今天继续完善下我们的代码,通过时间/日期生成器函数来实现自动+手工的方式来完善录入操作。

    函数说明

    今天我们重点介绍下两个函数,一个是日期生成器函数,DateSerial,你按照年月日这个顺序提供三个数据,它自动可以生成一个日期,这个函数还有一个很厉害的地方,它还可以自动计算正确的日期,比方说你输入2019,5,36,5月怎么都不可能有36天,那么这样输入会不错嘛?不会的,他会自动帮你调整到2019/6/5这样的日期,所以你也可以用来做日期之间的计算的。另外一个是时间生成器函数,TimeSerial,效果和上面的DateSerial是差不多的,你按照时分秒提供三个数据,他能够自动生成一个时间。好了,有了方法,我们来继续完善下我们之前的代码

    上代码

    我们今天还是利用我们昨天的表格,表格方面不做任何的变动,这样大家就能够相互比较前后两种方法的差异。


    image.png

    其实按照我们日常工作中的场景,数据录入一般都是集中在当天完成的,唯一可能不太准确的就是具体的时间,可能 像我们前面说的,是集中某个时间段录入的,也有可能过了半个钟或者有空了才会去统计数据,录入数据的,所以自动生成时间可能并不太符合某些场景,今天我们为了一起分享下日期生成器函数的使用,所以默认时间、日期都需要手工录入这样子,方面我们学习这两个函数,实际工作中,大家可以根据自己的使用场景来选择自动、手动搭配来使用。

    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,然后继续执行,摩托罗拉已经被录入产品那一列了,之后会有一个弹窗,提示我们输入三个数字,代表年月日,并且用点隔开

    image.png 这里我们随便输入2020.10.5,这里我们依然利用split()函数来拆分,得到年月日,并通过DateSerial生成一个最终的日期,2020/10/5 image.png

    然后程序继续执行,这里还有一个输入框,提示我们输入时分秒,依然使用点隔开,我们输入19.20.20这样的三个数据,这里也是成功的生成了一个准确的时间

    image.png

    完美的达到了我们的要求。

    代码解析

    本次的代码依然没有太多的难点,基本上还是利用之前我们学过的inputbox输入框+split()拆分函数来实现交互的,之后我们就通过TimeSerial和DateSerial这两个函数得到我们想要得到的日期了,日常工作中,大家可以结合上次分享的代码内容一起搭配使用,一般日期都是可以自动录入的,因为基本上都是当天录入数据的嘛,而时间可能会有差异,这个时候就可以让时间实现手工录入,一样可以节省我们不少的工作时间。

    相关文章

      网友评论

        本文标题:Excel VBA之函数篇-3.6自动录入时间不精确?搭配时间生

        本文链接:https://www.haomeiwen.com/subject/ddydzktx.html