ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么对数据进行排序, 初学者求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-26 13:52 | 显示全部楼层 |阅读模式
本帖最后由 jokerzhh 于 2018-6-27 15:45 编辑
  1. Dim Rng As Range
  2. Set Rng = Worksheets("Demand").Range(Worksheets("Demand").Cells(1, 3), Worksheets("Demand").Cells(demandLastRow, 5))
复制代码
更新: 上传原文件, 代码在module2, check_demand()这个function, 在main里面点击scoring运行, 我想做的是查找传入的product在demand表里最后计划的日期, 然后和当前日期对比. 用for循环实现是不是会很慢的? 谢谢
更新6/27:谢谢各位的帮忙, 结合@魂断蓝桥 @zopey @lsdongjh 3位的代码实现了, 代码如下:
  1. Public Function check_demand(product As String, workingDate As Date) As Boolean
  2.         Dim cnn As Object
  3.         Dim Sql As String

  4.         check_demand = False

  5.         Set cnn = CreateObject("ADODB.CONNECTION")
  6.         cnn.Open "Provider=Microsoft.ACE.OleDb.12.0;Extended Properties='Excel 12.0;HDR=YES'; Data Source=" & ThisWorkbook.FullName
  7.         Sql = "select max([Delivery Date]) as lastdate from [Demand$a1:e] where module_type='" & product & "' group by [module_type] "
  8.         cnn.Execute(Sql)
  9.        
  10.         Set Rst2 = CreateObject("adodb.Recordset")
  11.         Rst2.Open Sql, cnn, 3, 1
  12.         If Rst2("lastdate") >= workingDate Then
  13.                 check_demand = True
  14.         End If
  15.         cnn.Close: Set cnn = Nothing
  16. End Function
复制代码
最后, 再次谢谢各位的帮助 :)

test.7z

587.46 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-26 13:54 | 显示全部楼层
Rng拿到了我想要的数据, 现在想对数据进行排序, 需要怎么做? 初学者谢谢各位大佬

TA的精华主题

TA的得分主题

发表于 2018-6-26 14:00 | 显示全部楼层
rng.Sort Key1:=[c1], Order1:=xlAscending, Header:=xlGuess

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-26 14:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
魂断蓝桥 发表于 2018-6-26 14:00
rng.Sort Key1:=[c1], Order1:=xlAscending, Header:=xlGuess

你好, 请问"c1"指定字段这个怎么写, 我有试过写字段在数据Rng里面的index, 报错的

TA的精华主题

TA的得分主题

发表于 2018-6-26 14:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jokerzhh 发表于 2018-6-26 14:07
你好, 请问"c1"指定字段这个怎么写, 我有试过写字段在数据Rng里面的index, 报错的

指定排序的字段。

我这里试过没哟问题的。

1.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-26 14:27 | 显示全部楼层
魂断蓝桥 发表于 2018-6-26 14:14
指定排序的字段。

我这里试过没哟问题的。

直接复制了你的代码确实是可以的, 我还有个疑问, 因为不想对原工作表的数据进行改动, 所以我想着单独把数据拿出来进行排序, 结果用我写的那个代码还是改动了原工作表...请问有什么解决办法吗? 谢谢

TA的精华主题

TA的得分主题

发表于 2018-6-26 14:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jokerzhh 发表于 2018-6-26 14:27
直接复制了你的代码确实是可以的, 我还有个疑问, 因为不想对原工作表的数据进行改动, 所以我想着单独把数 ...

那就先copy 对coy后的数据排序

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-26 14:47 | 显示全部楼层
魂断蓝桥 发表于 2018-6-26 14:30
那就先copy 对coy后的数据排序
  1. Set Rng = Worksheets("Demand").Range(Worksheets("Demand").Cells(1, 3), Worksheets("Demand").Cells(demandLastRow, 5))
  2.     Rng.Copy
  3.     Rng.Sort Key1:=("c1"), Order1:=xlDescending, Header:=xlGuess
复制代码

我这样写貌似没用...小白一个, 麻烦你了

TA的精华主题

TA的得分主题

发表于 2018-6-26 14:52 | 显示全部楼层
先要知道怎么 上传附件 ,再说明排序规则、排序后结果放哪里。

TA的精华主题

TA的得分主题

发表于 2018-6-26 14:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Key1:=[c1]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 20:28 , Processed in 0.045365 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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