Excel精英培训网

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

[已解决]请老师看一下这段代码,关于如何使取值变为日期格式

[复制链接]
发表于 2015-6-15 15:02 | 显示全部楼层 |阅读模式

是这样的,我找到一段代码,实现从这段话“缴费至2013年10月” 提取出了“2013年10月”

但是提取出来的“2013年10月” 是常规模式,怎么能在下面的宏里输入一段代码让他变为日期格式呢?

因为后面要用到宏算出 2013年10月 距离今天差几个月,所以必须是日期格式的,

谢谢老师

Dim m%, i%, strn$, rn As Range, rng As Range
Application.ScreenUpdating = False
m = [G65536].End(xlUp).Row
Set rng = Range("g1:g" & m)

For Each rn In rng
For i = 1 To Len(rn)
strn = Mid(rn, i, 1)
If IsNumeric(strn) Then

rn.Offset(0, 2) = Mid(rn, i)
Exit For
End If
Next i
Next rn
Application.ScreenUpdating = True

最佳答案
2015-6-16 15:28
  1. Sub 第三步()
  2. Dim i%, m%
  3. m = [g65536].End(xlUp).Row
  4. For i = 4 To m
  5.    MsgBox DateDiff("m", Cells(i, "u"), Date)
  6. Next
  7. End Sub
复制代码
注意学习一下range和cells的用法,如果行或者列是变量,用这两个函数。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-6-15 15:12 | 显示全部楼层
试试这样,日期格式
  1. Sub A()
  2. Dim m%, i%, strn$, rn As Range, rng As Range
  3. Application.ScreenUpdating = False
  4. m = [G65536].End(xlUp).Row
  5. Set rng = Range("g1:g" & m)

  6. For Each rn In rng
  7. For i = 1 To Len(rn)
  8. strn = Mid(rn, i, 1)
  9. If IsNumeric(strn) Then
  10. rn.Offset(0, 2) = DateSerial(Split(VBA.Split(Mid(rn, i), "月")(0), "年")(0), Split(VBA.Split(Mid(rn, i), "月")(0), "年")(1), 1)
  11. Exit For
  12. End If
  13. Next i
  14. Next rn
  15. Application.ScreenUpdating = True

  16. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-6-15 15:33 | 显示全部楼层
hello_cgj 发表于 2015-6-15 15:12
试试这样,日期格式

老师您好,
感谢您的指导, 按照您的修改实验了一下  出现错误:
下标超出范围
打开调试  您添加的那句代码 变黄。

请问是什么原因?
回复

使用道具 举报

发表于 2015-6-15 15:44 | 显示全部楼层
我的没有问题啊

工作簿1.rar

10 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2015-6-15 16:03 | 显示全部楼层
hello_cgj 发表于 2015-6-15 15:44
我的没有问题啊

找到为题了,
因为我的表格是从第四行开始有的数据

非常感谢老师。
回复

使用道具 举报

发表于 2015-6-15 16:04 | 显示全部楼层
如果是固定长度,用函数mid截取相关数据就可以了,何必麻烦VBA呢?
回复

使用道具 举报

发表于 2015-6-15 16:13 | 显示全部楼层
刚才测试了一下你的代码,也是可以的,你把代码放到模块中试一下,不要放到工作表内。
回复

使用道具 举报

 楼主| 发表于 2015-6-15 16:13 | 显示全部楼层
wayy 发表于 2015-6-15 16:04
如果是固定长度,用函数mid截取相关数据就可以了,何必麻烦VBA呢?

mid 不知道是不是我是mac上得excel原因,试了几次,不行~
回复

使用道具 举报

 楼主| 发表于 2015-6-15 16:18 | 显示全部楼层
wayy 发表于 2015-6-15 16:13
刚才测试了一下你的代码,也是可以的,你把代码放到模块中试一下,不要放到工作表内。

老师,上一步我通过宏提取出来了日期,

现在用datedif计算  算出来的日期距离今天差了几个月,

但是有些日期超过了 今天,比如有些日期是2015年12月

用datedif就会显示#num# 什么的 ,有没有办法让超出的日期就显示0?

点评

datedif的参数用d是天数m是月份,注意看一下帮助。  发表于 2015-6-15 16:32
回复

使用道具 举报

发表于 2015-6-15 16:31 | 显示全部楼层
haohaizi007 发表于 2015-6-15 16:18
老师,上一步我通过宏提取出来了日期,

现在用datedif计算  算出来的日期距离今天差了几个月,

可以加判断用if,如果大于today(),then,0
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 04:16 , Processed in 0.483363 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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