Excel精英培训网

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

[已解决]VBA将家庭成员单元格中的出生日期更改为年龄

[复制链接]
发表于 2016-12-8 11:46 | 显示全部楼层 |阅读模式
本帖最后由 yjwdjfqb 于 2016-12-8 11:53 编辑

VBA将家庭成员单元格中的出生日期更改为年龄

将家庭成员列复制,在后面列插入,并将人员的生日年月改为年龄
如图:
请大家帮帮忙,谢谢老师们了!
TT截图未命名.jpg
VBA将家庭成员单元格中的出生日期更改为年龄.rar (1.85 KB, 下载次数: 11)
发表于 2016-12-8 12:37 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-12-8 13:14 | 显示全部楼层
论坛的高手很多,应该可以解决哟!
回复

使用道具 举报

发表于 2016-12-8 14:05 | 显示全部楼层    本楼为最佳答案   
结果显示在G列以作比较。
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     For i = 2 To UBound(arr)
  4.         ss = ""
  5.         x = arr(i, 4)
  6.         xrr = Split(x, Chr(10))
  7.         For Each y In xrr
  8.             yrr = Split(y, " ")
  9.             yrr(2) = Int(Year(Date) - Val(yrr(2))) + 1
  10.             s = Join(yrr, " ")
  11.             ss = ss & Chr(10) & s
  12.         Next
  13.         Cells(i, 7) = Mid(ss, 2)
  14.     Next
  15. End Sub
复制代码

VBA将家庭成员单元格中的出生日期更改为年龄.rar

9.23 KB, 下载次数: 15

评分

参与人数 3 +38 金币 +20 收起 理由
望帝春心 + 20 + 20 来学习
苏子龙 + 6 来学习
yjwdjfqb + 12 很给力

查看全部评分

回复

使用道具 举报

发表于 2016-12-8 14:06 | 显示全部楼层
在原来的表里输入,这样可好

VBA将家庭成员单元格中的出生日期更改为年龄.zip

14.2 KB, 下载次数: 13

评分

参与人数 2 +32 金币 +20 收起 理由
望帝春心 + 20 + 20 来学习
yjwdjfqb + 12 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-8 14:33 | 显示全部楼层
谢谢grf1973 、苏子龙 二位老师的帮助,都很好用,可惜只能给一个最佳。
再次感谢了!
回复

使用道具 举报

发表于 2016-12-8 14:40 | 显示全部楼层
应该给正则的,不容易出错。
我的代码对数据要求太高。家庭成员间换行,同一人各项必须用一个空格隔开,必须在第3项为出生年月。

而用正则只要日期按yyyy.mm.dd格式就可以了。
回复

使用道具 举报

发表于 2016-12-8 14:56 | 显示全部楼层
能搞出来就好了,1973思路敏捷
回复

使用道具 举报

 楼主| 发表于 2016-12-8 16:52 | 显示全部楼层
grf1973 发表于 2016-12-8 14:05
结果显示在G列以作比较。

老师你好,这个日期中,月和日、怎么不起作用呢
如:
父亲 梁彦生 1952.12.09 群众 务农
这个应该是63岁,到了明天2016.12.09才64岁

但结果,是64岁,请老师帮帮看下,谢谢了!
2 - 上传.rar (9.08 KB, 下载次数: 6)
回复

使用道具 举报

发表于 2016-12-9 08:38 | 显示全部楼层
用datediff似乎不能解决这个问题。老老实实判断吧。
  1. Sub Test()
  2.     Dim arr, tmp, rg As Range, csrq
  3.     Dim i As Integer

  4.     For Each rg In Range("d2", [d2].End(4).Address)
  5.         arr = Split(rg.Value, Chr(10))
  6.         For i = 0 To UBound(arr)
  7.             arr(i) = Replace(arr(i), ".", "-")
  8.             tmp = Split(arr(i), " ")
  9.             csrq = CDate(tmp(2))  '出生日期
  10.             tmp(2) = DateDiff("yyyy", csrq, Date)
  11.             If Month(csrq) > Month(Date) Or (Month(csrq) = Month(Date) And Day(csrq) > Day(Date)) Then tmp(2) = tmp(2) - 1
  12.             arr(i) = Join(tmp, " ")
  13.         Next
  14.         rg.Offset(0, 2) = Join(arr, Chr(10))
  15.     Next
  16. End Sub
复制代码

评分

参与人数 1 +12 收起 理由
yjwdjfqb + 12 很给力

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 15:48 , Processed in 1.728944 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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