ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查询停发续发情况

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-18 17:48 来自手机 | 显示全部楼层
zpy2 发表于 2020-7-18 17:28
我的实际数据有15列,能否在一直停发代码中改进下,让代码自动判断数据表的有效数据列数宽度和自动获取数 ...

老师,我的数据表的列数不固定,有时是10列,有时是15列等。我想让代码自动判断数据表的列数。

TA的精华主题

TA的得分主题

发表于 2020-7-18 18:00 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lrh788 发表于 2020-7-18 17:48
老师,我的数据表的列数不固定,有时是10列,有时是15列等。我想让代码自动判断数据表的列数。

对的,你的想法是不错的,最好代码的自动化程度能够高一点,使用起来方便一些。
但是,我发现这个查询的代码还是比较复杂的,有时候可能只能折中一下。
另外,你的连续停发,是不是包括全部是停发的,4年里停放3次的情况,4年里停发2次(这种再进行筛选)
就是说 ,你需要的结果最好具体化。
我这些建议当然是从写代码的人的角度分析的,因为,要写出通用性的全面的解决方案,难度的确不小,需要平衡。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-18 18:16 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-7-18 18:38 | 显示全部楼层
lrh788 发表于 2020-7-18 14:17
老师,这个代码取值正确了。但仍请老师再次完善代码,1、我的实际数据有15列,能否在两个代码中改进下, ...

你把15列数据发个样表上来看看,停发\续发 列是固定的还是不固定的?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-19 00:09 | 显示全部楼层
已更新代码,更新代码在模块2,原代码保留在模块1,更新内容
1、统计起止年月合并在同一输入框
2、除ABC列内容固定,自动查找 停发\续发 所在列,自动识别数据列数
3、部分细节调整。。。

停发或续发人员效果新.zip

1.66 MB, 下载次数: 12

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-19 00:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 笨鸟飞不高 于 2020-7-19 00:39 编辑
lrh788 发表于 2020-7-18 14:17
老师,这个代码取值正确了。但仍请老师再次完善代码,1、我的实际数据有15列,能否在两个代码中改进下, ...

Sub AwTest()
Dim i&, r&, j%, DayM%, iStr$, DayStr$, begDay$, endDay$, iDay As Date
    Dim arr, d As Object
    Application.ScreenUpdating = False
    Set d = CreateObject("Scripting.Dictionary")
    begDay = InputBox("请输入开始日期,格式如:202001")
    If StrPtr(begDay) = 0 Then Exit Sub
    endDay = InputBox("请输入结束日期,格式如:202001")
    If StrPtr(endDay) = 0 Then Exit Sub
    With Sheets("数据")
        arr = .[a1].CurrentRegion
        For i = 2 To UBound(arr)
            If arr(i, 3) >= begDay And arr(i, 3) <= endDay Then
                iStr = arr(i, 1) & "|" & arr(i, 2) & "|" & arr(i, 4)
                d(iStr) = ""
            End If
        Next
        ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
        For j = 1 To UBound(arr, 2)
            brr(1, j) = arr(1, j)
        Next
        brr(1, UBound(brr, 2)) = "停发年次"
        r = 1
        For i = 2 To UBound(arr)
            If arr(i, 3) >= begDay And arr(i, 3) <= endDay Then
                iStr = arr(i, 1) & "|" & arr(i, 2) & "|" & "续发"
                If Not d.exists(iStr) Then
                    r = r + 1
                    For j = 1 To UBound(arr, 2)
                        brr(r, j) = arr(i, j)
                    Next
                    DayStr = Left(brr(r, 3), 4) & "-" & Right(brr(r, 3), 2)
                    iDay = CDate(DayStr)
                    DayM = DateDiff("m", iDay, CDate(Left(endDay, 4) & "-" & Right(endDay, 2)))
                    If DayM > 0 Then brr(r, 7) = DayM \ 12 & "年" & DayM Mod 12 & "个月"
                End If
            End If
        Next
    End With
    With Sheets("一直停发")
        .Cells.Clear
        If r > 0 Then
            .[a1].Resize(r, UBound(brr, 2)) = brr
        End If
    End With
    Application.ScreenUpdating = True
End Sub

一直停发代码!增加开始日期判断,数据列不固定,是这意思吗?

TA的精华主题

TA的得分主题

发表于 2020-7-19 00:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
停发或续发人员效果.rar (1.54 MB, 下载次数: 4)

没附件效果!只好再次猜!!!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-19 06:41 | 显示全部楼层
丸子不是小孩子 发表于 2020-7-19 00:09
已更新代码,更新代码在模块2,原代码保留在模块1,更新内容
1、统计起止年月合并在同一输入框
2、除ABC ...

谢谢老师的帮助,你的新一直停发代码已完全符合要求了。还请写下停发续发代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-19 06:46 | 显示全部楼层
笨鸟飞不高 发表于 2020-7-19 00:36
没附件效果!只好再次猜!!!

谢谢笨鸟飞不高 老师的帮助,你的代码已基本符合要求了,只是对同一人存在多次停发且未有任何续发的人员没有进行标注,其他的我都能自己调整解决了。

TA的精华主题

TA的得分主题

发表于 2020-7-19 10:27 | 显示全部楼层
lrh788 发表于 2020-7-19 06:41
谢谢老师的帮助,你的新一直停发代码已完全符合要求了。还请写下停发续发代码。

哈哈,我看到有人写就不写了

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-19 13:29 , Processed in 0.045363 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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