ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 我对这种排序毫无经验求解论坛的大神们,感激不尽!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-12-14 21:44 | 显示全部楼层
Sub test()
    Set d = CreateObject("scripting.dictionary")
    a = Array("户主", "父亲", "母亲", "夫", "妻", "兄", "弟", "姐姐", "妹妹", "儿媳")
    For i = 0 To UBound(a)
        d(a(i)) = i * 10 ^ (-9)
    Next
    With Sheets("sheet1")
        r = .Cells(Rows.Count, 1).End(3).Row
        arr = .Range("a1:g" & r)
        For i = 2 To UBound(arr)
            If Not d.exists(arr(i, 5)) Then
                n = n + 1
                d(arr(i, 5)) = n
            End If
            If InStr(arr(i, 6), "子") Or InStr(arr(i, 6), "女") Then
                s = Mid(arr(i, 3), 7, 8) * 10 ^ (-8)
            Else
                If d.exists(arr(i, 6)) Then
                    s = d(arr(i, 6))
                End If
            End If
            arr(i, 7) = d(arr(i, 5)) + s
        Next
        .[a1].Resize(UBound(arr), 7) = arr
        .[a1].Resize(r, 8).Sort key1:=Range("g1"), order1:=1, Header:=1
        .Range("g:g").Delete
    End With
End Sub[/code]
重名的问题不好解决,再就是一家有三个女儿,那应该是按岁数排序的吧

TA的精华主题

TA的得分主题

发表于 2015-12-14 21:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub test()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     a = Array("户主", "父亲", "母亲", "夫", "妻", "兄", "弟", "姐姐", "妹妹", "儿媳")
  4.     For i = 0 To UBound(a)
  5.         d(a(i)) = i * 10 ^ (-9)
  6.     Next
  7.     With Sheets("sheet1")
  8.         r = .Cells(Rows.Count, 1).End(3).Row
  9.         arr = .Range("a1:g" & r)
  10.         For i = 2 To UBound(arr)
  11.             If Not d.exists(arr(i, 5)) Then
  12.                 n = n + 1
  13.                 d(arr(i, 5)) = n
  14.             End If
  15.             If InStr(arr(i, 6), "子") Or InStr(arr(i, 6), "女") Then
  16.                 s = Mid(arr(i, 3), 7, 8) * 10 ^ (-8)
  17.             Else
  18.                 If d.exists(arr(i, 6)) Then
  19.                     s = d(arr(i, 6))
  20.                 End If
  21.             End If
  22.             arr(i, 7) = d(arr(i, 5)) + s
  23.         Next
  24.     End With
  25.     With Sheets("sheet2")
  26.         .UsedRange.ClearContents
  27.         .[a1].Resize(UBound(arr), 7) = arr
  28.         .[a1].Resize(r, 8).Sort key1:=.Range("g1"), order1:=1, Header:=1
  29.         .Range("g:g").Delete
  30.     End With
  31. End Sub
复制代码

这个是在表2中进行排序的,但是遇到重名时需要再进一步判断

TA的精华主题

TA的得分主题

发表于 2015-12-14 22:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yjh_27 于 2015-12-15 12:49 编辑
WONIUWANG 发表于 2015-12-14 18:43
我将这个附件传了上来了 有些内容保密就修改了

假设同一户已连续在一起,相邻户户主不重名即可

附件更新,做了二个按钮,分别升、降序

Book1 (6).zip

134.49 KB, 下载次数: 20

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-15 00:35 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chenbiao2012 发表于 2015-12-14 21:44
Sub test()
    Set d = CreateObject("scripting.dictionary")
    a = Array("户主", "父亲", "母亲",  ...

d =1*10∧(-9)这是什么意思   大神能否给我讲讲思路

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-15 09:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 WONIUWANG 于 2015-12-15 09:24 编辑
yjh_27 发表于 2015-12-14 22:54
假设同一户已连续在一起,相邻户户主不重名即可

我的天 大神 这个这么多代码啊。大神有心了 感动死了。但是我点了命令按钮好像不行啊。。

TA的精华主题

TA的得分主题

发表于 2015-12-15 12:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
WONIUWANG 发表于 2015-12-15 09:17
我的天 大神 这个这么多代码啊。大神有心了 感动死了。但是我点了命令按钮好像不行啊。。

已更新附件

只有模块1是新写的,其他是通用的。

TA的精华主题

TA的得分主题

发表于 2015-12-15 14:18 | 显示全部楼层
t13564865256 发表于 2015-12-14 17:41
1做为主关键字-普通排序,2作为负关键字-自定义序列排序

个人意见,3楼给出了解题思路。无意冒犯后面用VBA解决问题的楼友,用VBA是:杀鸡用牛刀。

TA的精华主题

TA的得分主题

发表于 2015-12-15 16:54 | 显示全部楼层
看了那么多大师,我就来个最笨点吧。不过要把户主和排序一起选然后排序。

排序.zip

24.77 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2015-12-15 17:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
beanchan 发表于 2015-12-15 14:18
个人意见,3楼给出了解题思路。无意冒犯后面用VBA解决问题的楼友,用VBA是:杀鸡用牛刀。

如有重名户主,将造成混淆

TA的精华主题

TA的得分主题

发表于 2015-12-15 17:17 | 显示全部楼层
先在自定义序列中添加 户主。妻,兄弟,姐姐,妹妹,子,孙 这个排序序列,然后在表中再排序即可
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 09:31 , Processed in 0.046833 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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