ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 565|回复: 6

[求助] 按开始年份自动填充缺失年份行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-24 02:46 | 显示全部楼层 |阅读模式
本帖最后由 秦哥 于 2019-9-24 02:48 编辑

单位里有大量的这样数据,要求按姓名,按开始年份到结束年份自动增加缺失年份的行。因为有上万行,不可能手工增加。特求助各位大神,在此谢谢了。

按起始年份补充齐缺失年份的行.rar

9.4 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2019-9-24 07:42 | 显示全部楼层
楼主结合附件再进一步描述下,补充日期的原则,是根据哪一列什么原则补充的
效果表对应关系看不大明白

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-24 10:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 秦哥 于 2019-9-24 11:21 编辑

比方说某人开始年份是不一定的,开始时间取其姓名后的B列的开始时间,结束的年份都是2019年。例如一个人开始时间是2009年,其实际发生的只有2015-2018年,那么就要补齐2009年到2014年的行和2019年的行。
还有一些人实际发生的年并不连续,例如 实际发生了2015、2017、2018年,那么中间的2016年的行也要补上。

按起始年份补充齐缺失年份的行.zip

10.12 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2019-9-24 10:00 | 显示全部楼层
不知这样是否达到要求?

按起始年份补充齐缺失年份的行.zip

21.18 KB, 下载次数: 9

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-24 11:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-24 17:34 | 显示全部楼层
Sub bnf()
  Dim h As Long
  Set d = CreateObject("scripting.dictionary")
  Application.ScreenUpdating = False
  For h = [a65536].End(3).Row To 2 Step -1
    qh = hs(h)
    For n = Cells(qh, 2) To Cells(qh, 3)
      d(Trim(Str(n))) = 1
    Next n
    For Each n In d.keys
      Set qn = Range(Cells(qh, 4), Cells(h, 4)).Find(n)
      If qn Is Nothing Then
        Rows(h + 1).Insert xlShiftDown
        Cells(h + 1, 1) = Cells(qh, 1): Cells(h + 1, 1).Offset(0, 4) = "'" & n
      End If
    Next n
    d.RemoveAll
    h = h - (h - qh)
  Next h
  For h = 2 To [a65536].End(3).Row
    If Cells(h, 4) <> "" Then Cells(h, 5) = "'" & Cells(h, 4)
  Next h
  Range("a1:e" & [a65536].End(3).Row).Sort key1:="姓名", key2:="缺失时间", Header:=xlYes
  For h = 2 To [a65536].End(3).Row
    If Cells(h, 4) = "" Then
      Cells(h, 1) = ""
    Else
      Cells(h, 5) = ""
    End If
  Next h
  Application.ScreenUpdating = True
End Sub
Function hs(h As Long) As Long
  For i = h To 1 Step -1
    If Cells(i, 2) <> Cells(i - 1, 2) Then Exit For
  Next
  hs = i
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-24 18:48 | 显示全部楼层
liangmutou01 发表于 2019-9-24 17:34
Sub bnf()
  Dim h As Long
  Set d = CreateObject("scripting.dictionary")

谢谢你的帮助,我用你的代码测试还是有点问题,楼上那位大师的非常完美。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 08:34 , Processed in 0.031686 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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