ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

【求助】自行判断筛选条件,按日期筛选

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-5-10 11:31 | 显示全部楼层 |阅读模式
现有一张数据表,A列为时间发生的日期,B列有关人姓名,C列为时间的结果。
要求:1、窗体里选择时间起始-截止日期后,当按下“筛选”按钮时,首先按照此时间段(在A列),判断需要的数据区域。
           2、区域内判断有几种不同单元格(筛选条件非人工选择,完全是根据B列出现的人的名字来判断在此区域有几个人名字,并把这些名字自定列为筛选条件)。
           3、再统计出来符合每一个人的有成绩的单元格数量(在C列,与C列单元格内容无关,只要有几个跟B列相应的有效单元格数就行了)
           4、新创建一个新工作薄及工作表,把筛选结果显示在新工作薄里。
QQ截图20130510112950.png
筛选.zip (7.82 KB, 下载次数: 14)

TA的精华主题

TA的得分主题

发表于 2013-5-10 15:11 | 显示全部楼层
  1. Sub tt()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     With Sheet1
  4.         arr = .[a1].CurrentRegion
  5.         stime = .[f15]: etime = .[i15]
  6.         .[a1].CurrentRegion.Interior.ColorIndex = 0
  7.         For i = 2 To UBound(arr)
  8.             If arr(i, 1) >= stime And arr(i, 1) <= etime Then
  9.                 .Cells(i, 1).Interior.ColorIndex = 6
  10.                 d(arr(i, 2)) = d(arr(i, 2)) + 1
  11.             End If
  12.         Next
  13.      End With
  14.      
  15.      With Sheet2
  16.         .Activate
  17.         .Range("a2:b1000").ClearContents
  18.         .Cells(2, 1).Resize(d.Count, 1) = Application.Transpose(d.keys)
  19.         .Cells(2, 2).Resize(d.Count, 1) = Application.Transpose(d.items)
  20.      End With
  21.      
  22. End Sub
复制代码
其中起止时间是用数据有效性做的。

筛选.rar

13.14 KB, 下载次数: 52

TA的精华主题

TA的得分主题

发表于 2013-5-10 15:14 | 显示全部楼层
起止时间([f15]和[i15])是用数据有效性做的,结果保存在第二张工作表里。符合时间段要求的都拿黄色标注了。前面数据源的次序乱也没关系。

TA的精华主题

TA的得分主题

发表于 2013-5-10 15:16 | 显示全部楼层
当然为防止出错可以再加些判断,比如起始时间或终止时间为空,起始时间大于终止时间等。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-10 23:44 | 显示全部楼层
grf1973 发表于 2013-5-10 15:16
当然为防止出错可以再加些判断,比如起始时间或终止时间为空,起始时间大于终止时间等。

哥们,,谢谢你,代码运行的很好。只是我的意思是这些代码放到VBA窗体里运行的,附件里的文件里还包括一个窗体呢,你好像没注意,你写的是宏,我把它改一些后放到窗体里运行不了了,有些错误。麻烦你能不能再调一下。我的窗体已经有两个DTPicker框,相当于你所设定的[f15]和[i15],代码的主要功能已经写得很好了,只是把它位置再调一下,谢谢你!

TA的精华主题

TA的得分主题

发表于 2013-5-11 13:26 | 显示全部楼层
  1. Private Sub 筛选_Click()
  2. Set d = CreateObject("scripting.dictionary")
  3.     With Sheet1
  4.         arr = .[a1].CurrentRegion
  5.        [color=Red] stime = DTPicker1.Value: etime = DTPicker2.Value[/color]      
  6.        .[a1].CurrentRegion.Interior.ColorIndex = 0
  7.         For i = 2 To UBound(arr)
  8.             If arr(i, 1) >= stime And arr(i, 1) <= etime Then
  9.                 .Cells(i, 1).Interior.ColorIndex = 6
  10.                 d(arr(i, 2)) = d(arr(i, 2)) + 1
  11.             End If
  12.         Next
  13.      End With
  14.      
  15.      With Sheet2
  16.         .Activate
  17.         .Range("a2:b1000").ClearContents
  18.         .Cells(2, 1).Resize(d.Count, 1) = Application.Transpose(d.keys)
  19.         .Cells(2, 2).Resize(d.Count, 1) = Application.Transpose(d.items)
  20.      End With
  21. End Sub
复制代码

筛选.rar

14.32 KB, 下载次数: 49

TA的精华主题

TA的得分主题

发表于 2013-5-11 13:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Private Sub 筛选_Click()
Set d = CreateObject("scripting.dictionary")
    With Sheet1
        arr = .[a1].CurrentRegion
        stime = DTPicker1.Value: etime = DTPicker2.Value
        .[a1].CurrentRegion.Interior.ColorIndex = 0
        For i = 2 To UBound(arr)
            If arr(i, 1) >= stime And arr(i, 1) <= etime Then
                .Cells(i, 1).Interior.ColorIndex = 6
                d(arr(i, 2)) = d(arr(i, 2)) + 1
            End If
        Next
     End With
     
     With Sheet2
        .Activate
        .Range("a2:b1000").ClearContents
        .Cells(2, 1).Resize(d.Count, 1) = Application.Transpose(d.keys)
        .Cells(2, 2).Resize(d.Count, 1) = Application.Transpose(d.items)
     End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-11 13:32 | 显示全部楼层
{:soso_e112:}太好了,,回答很及时,很准确,,谢谢grf1973 兄弟的及时雨。。祝你身体健康、每天快乐!{:soso_e177:}{:soso_e157:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-11 16:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
明天の太遥远! 发表于 2013-5-11 13:32
太好了,,回答很及时,很准确,,谢谢grf1973 兄弟的及时雨。。祝你身体健康、每天快乐!{:s ...

兄弟,,现在要上面的例子要稍微提高点,,就是说统计出这个人按某一个时间段,回答后的“不及格、及格、好、优”次数?
QQ截图20130511162524.png
筛选.zip (16.08 KB, 下载次数: 21)

好事做到底吧,,兄弟,再帮忙指导一下,好吗?谢谢你!{:soso_e157:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 13:17 , Processed in 0.044026 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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