Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4043|回复: 9

[已解决]高手出招!在单元格中输入一个或多个数字转化为日期

[复制链接]
发表于 2012-11-28 19:05 | 显示全部楼层 |阅读模式
本帖最后由 Robbie777 于 2012-11-28 19:23 编辑

例如在单元格中i3中输入28,回车后要求显示为2012-12-29 12:00    (以当天为28日为例)date=date()+8/24+28/24这是输入一个数字的例子。

如在单元格i4中输入28;38,回车后要求显示2012-12-29 12:00                 date1=date()+8/24+28/24
                                                                      2012-12-30 22:00                 date2=date()+8/24+38/24
最后不管单元格中有多少个时间,只要有在48小时内的(以当天早上8点计)都着色。我的附件不能实现两个时间的功能。

     生产中输入数字是原料完全耗尽的小时数,想借助vba实现快速转化为预计续料的日期。并通过单元格着色来提醒,未来48小时内要换料的机台。大多数机台只需要两种机台,本人的代码已可以实现功能。

           有少数机台有两种以上的原料,所以要求助各位大侠帮忙,如何输入一个分号隔开的数字来实现两个日期的转化!!!
最佳答案
2012-11-28 19:27
本帖最后由 suye1010 于 2012-11-28 20:58 编辑
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim Arr, i
  3. On Error Resume Next
  4. Application.EnableEvents = False
  5. Arr = Split(Target.Value, ";")
  6. For i = 0 To UBound(Arr)
  7.     Arr(i) = Date + (8 + Arr(i)) / 24
  8. Next
  9. Target = Join(Arr, Chr(10)) '加入换行符来显示时间
  10. Application.EnableEvents = True
  11. End Sub
复制代码

输入时间.rar

26.56 KB, 下载次数: 9

发表于 2012-11-28 19:09 | 显示全部楼层
我看到题目时信心满满的来了,结果原来是路过
回复

使用道具 举报

 楼主| 发表于 2012-11-28 19:14 | 显示全部楼层
上个附件,附件不好好啊

输入时间.rar

26.56 KB, 下载次数: 8

回复

使用道具 举报

发表于 2012-11-28 19:27 | 显示全部楼层    本楼为最佳答案   

适用于输入一个或多个数字(以;为间隔)

本帖最后由 suye1010 于 2012-11-28 20:58 编辑
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim Arr, i
  3. On Error Resume Next
  4. Application.EnableEvents = False
  5. Arr = Split(Target.Value, ";")
  6. For i = 0 To UBound(Arr)
  7.     Arr(i) = Date + (8 + Arr(i)) / 24
  8. Next
  9. Target = Join(Arr, Chr(10)) '加入换行符来显示时间
  10. Application.EnableEvents = True
  11. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
Robbie777 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-11-28 19:39 | 显示全部楼层
本帖最后由 Robbie777 于 2012-11-28 19:42 编辑
suye1010 发表于 2012-11-28 19:27


完全正确!但是jion处有些不理解;另只输入一个时间的情况可以写在一起吗?


点评

请查看原帖中的注释  发表于 2012-11-28 20:58
不理解可以直接找他咨询,如果有另外的问题,可以另开贴提问  发表于 2012-11-28 20:40
回复

使用道具 举报

发表于 2012-11-28 21:23 | 显示全部楼层
来学习一下            
回复

使用道具 举报

 楼主| 发表于 2012-11-29 08:22 | 显示全部楼层
本帖最后由 Robbie777 于 2012-11-29 09:18 编辑
suye1010 发表于 2012-11-28 19:27


输入一个数字时,转化成的时间不对,是
1900-2-29 0:00
  不知是什么原因?
哦,输入一个数字也加一个分号的话是对的;输入1个数字可以不加这个分号吗?
测试时输入一个数字时不加分号时有时可以有时不正确,为什么呢?
回复

使用道具 举报

 楼主| 发表于 2012-11-29 09:37 | 显示全部楼层
本帖最后由 Robbie777 于 2012-11-29 09:56 编辑

Robbie777 发表于 2012-11-29 08:22
输入一个数字时,转化成的时间不对,是   不知是什么原因?
哦,输入一个数字也加一个分号的话是对的; ...



                加个if判断似乎要稳定些
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim Arr, i
  3. On Error Resume Next
  4. Application.EnableEvents = False
  5. If InStr(Target.Value, ";") > 0 Then
  6. Arr = Split(Target.Value, ";")
  7. For i = 0 To UBound(Arr)
  8. Arr(i) = Date + (8 + Arr(i)) / 24
  9. Next
  10. Target = Join(Arr, Chr(10)) '加入换行符来显示时间
  11. Else
  12. Target.Value = Date + (8 + Target.Value) / 24
  13. End If
  14. Application.EnableEvents = True
  15. End Sub
复制代码
回复

使用道具 举报

发表于 2013-8-2 10:39 | 显示全部楼层
值得来学习一下
回复

使用道具 举报

发表于 2015-1-11 13:37 | 显示全部楼层
有一招,学一手
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-15 09:47 , Processed in 0.399448 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表