ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南

[求助] 数组如何进行排序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-9-30 17:16 | 显示全部楼层
vba小白从头学习 发表于 2022-9-30 16:47
就和 姓名, 语文成绩, 数学成绩 结构类似, 先按照数学成绩从高到底排序,然后按照语文成绩从低到高排 ...

如果是csv,大概这样

image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-30 17:23 | 显示全部楼层
gwjkkkkk 发表于 2022-9-30 16:46
https://club.excelhome.net/forum.php?mod=viewthread&tid=1502139&mobile=2

这个帖子太深奥。。。我这个例子就需要双Key排序,因为数据来源不能使用Excel的Sort排序,所以才求助如何使用数组实现

TA的精华主题

TA的得分主题

发表于 2022-9-30 17:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wodewan 于 2022-9-30 17:49 编辑

image.jpg

Valve List.7z

26.01 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2022-9-30 21:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请参考代码。
  1. Sub 结果()
  2.     arr1 = Sheet6.Range("a1:c" & Sheet6.Range("a" & Rows.Count).End(xlUp).Row)
  3.     For i = 2 To UBound(arr1, 1)
  4.         For j = i + 1 To UBound(arr1, 1)
  5.             If arr1(i, 3) < arr1(j, 3) Then
  6.                 For k = 1 To UBound(arr1, 2)
  7.                     temp = arr1(j, k)
  8.                     arr1(j, k) = arr1(i, k)
  9.                     arr1(i, k) = temp
  10.                 Next k
  11.             ElseIf arr1(i, 3) = arr1(j, 3) Then
  12.                 If arr1(i, 2) > arr1(j, 2) Then
  13.                     For k = 1 To UBound(arr1, 2)
  14.                         temp = arr1(j, k)
  15.                         arr1(j, k) = arr1(i, k)
  16.                         arr1(i, k) = temp
  17.                     Next k
  18.                 End If
  19.             End If
  20.         Next j
  21.     Next i
  22.     Range("e2").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
  23. End Sub

复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-10-1 01:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vba小白从头学习 发表于 2022-9-30 17:23
这个帖子太深奥。。。我这个例子就需要双Key排序,因为数据来源不能使用Excel的Sort排序,所以才求助如何 ...

就算数组是过程代码生成的,并不代表不能输出啊,用个临时表输出,工作表排序后数组取回,再删除临时数据......这样操作又何妨?
这样的代码简单易懂,每个步骤论坛都有大把示例,查一下,自己都能拼凑出来了


TA的精华主题

TA的得分主题

发表于 2022-10-1 10:49 | 显示全部楼层
數據可能有文本/英文/數字/空格,
若又要多列多條件排序, 用數組排序就顯得繁瑣,
利用空置工作表...借売上市吧!!!


TA的精华主题

TA的得分主题

发表于 2022-10-1 12:18 来自手机 | 显示全部楼层
数组的排序 就是循环加判断了。感觉数据一旦到了数组里面,就都是循环判断解决了。

TA的精华主题

TA的得分主题

发表于 2022-10-1 12:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-10-1 12:51 | 显示全部楼层
Y先排序后作为字典键,X作为字典数组值,再对每个数组值排序。

TA的精华主题

TA的得分主题

发表于 2022-10-1 16:12 | 显示全部楼层
perfect131 发表于 2022-10-1 12:40
用 虚拟表 sort 即可

这个方式很好,我工作中经常使用这个方式, 速度也还不错,也很容易理解, 关键是调试的时候太好了,主要中断一个语句就可以进行调试.

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2025-12-15 03:06 , Processed in 1.053403 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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