包含合并单元格的表格快速排序

32 篇文章 1 订阅
18 篇文章 0 订阅

实例需求:现需要将原料配方成分表按照“原料含量”从高到低排序,如下图所示。由于表格中包含合并单元格,因此Excel的排序功能无法正常。

在这里插入图片描述

示例代码如下。

Sub demo()
    Dim data(), i, idx, k, s
    lstRow = Cells(Rows.Count, 2).End(xlUp).Row
    ReDim data(1 To lstRow, 1)
    idx = 1
    For i = 3 To lstRow
        If Cells(i, 1) <> "" Then
            data(idx, 0) = Cells(i, "D")
            data(idx, 1) = Cells(i, "D").MergeArea.EntireRow.Address
            idx = idx + 1
        End If
    Next
    idx = idx - 1
    For k = 1 To idx
        p_val = data(k, 0)
        For s = k + 1 To idx
            If data(s, 0) > p_val Then
                tmp = data(k, 1)
                data(k, 0) = data(s, 0): data(k, 1) = data(s, 1)
                data(s, 0) = p_val: data(s, 1) = tmp
                p_val = data(k, 0)
            End If
        Next
    Next
    anchor = lstRow + 2
    For k = 1 To idx
        Set r = Range(data(k, 1))
        Application.CutCopyMode = False
        r.Copy Cells(anchor, 1)
        Cells(anchor, 1) = k
        anchor = anchor + r.Rows.Count
    Next
    Range("3:" & lstRow + 1).Delete
End Sub

【代码解析】
第3行代码获取最后数据行的行号。
第4行代码声明动态数组。
第6~12行代码循环读取数据,保存在数组data中,第一个元素为D列的数值(排序依据),第二个元素为该原料所在行,例如第3个原料所在行为6:8
第9行代码中使用MergeArea获取D列单元格的合并单元格区域,EntireRow代表整行单元格区域。
第13行代码将变量idx减一,变量的值为数据表中原料的个数。
第14~24行代码使用双重循环冒泡法排序(需要详细学习此算法的同学,可以自行搜索相关资料)。
第15行代码读取第k个元素(D列值)用于作为排序判断的基准。
第16~23行代码冒泡排序确保把待排序数据(数组中第k个元素至最后一个元素)中的最大一个排列调整到第k个位置。
第19~20行代码用于交换数组的值,由于data是二维数组,所以需要使用一个临时变量tmp作为中转。
排序完成之后,接下来是就需要调整数据表中相应数据行的次序,由于数组中记录的使用每个原料所有行号,剪切操作将导致其他数据行号的相应变化,所以最方便的操作方式是将按照排序后的结果将数据复制到一个空白区域,然后再删除原数据区域。
第25行代码设置保存数据的目标区域起始单元格(下文称为锚点单元格)行号。
第26~31行代码循环拷贝数据行。
第27行代码清空系统剪贴板。
第28行代码将数据行拷贝到锚点单元格。
第29行代码设置原料序号。
第30行代码计算下一个锚点单元格的行号。
第32行代码删除原数据表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 一、 基本方法 7 1. 快速选中全部工作表 7 2. 快速启动EXCEL 7 3. 快速删除选定区域数据 8 4. 给单元格重新命名 8 5. 在EXCEL中选择整个单元格范围 9 6. 快速移动/复制单元格 9 7. 快速修改单元格式次序 9 8. 彻底清除单元格内容 10 9. 选择单元格 10 10. 为工作表命名 11 11. 一次性打开多个工作簿 11 12. 快速切换工作簿 13 13. 选定超级链接文本(微软OFFICE技巧大赛获奖作品) 13 14. 快速查找 14 15. 修改默认文件保存路径 14 16. 指定打开的文件夹 15 17. 在多个EXCEL工作簿间快速切换 15 18. 快速获取帮助 16 19. 创建帮助文件的快捷方式 16 20. 双击单元格某边移动选定单元格 16 21. 双击单元格某边选取单元格区域 17 22. 快速选定不连续单元格 17 23. 根据条件选择单元格 17 24. 复制或移动单元格 18 25. 完全删除EXCEL中的单元格 18 26. 快速删除空 19 27. 回车键的粘贴功能 19 28. 快速关闭多个文件 20 29. 选定多个工作表 20 30. 对多个工作表快速编辑 20 31. 移动和复制工作表 21 32. 工作表的删除 21 33. 快速选择单元格 21 34. 快速选定EXCEL区域(微软OFFICE技巧大赛获奖作品) 22 35. 备份工件簿 22 36. 自动打开工作簿 23 37. 快速浏览长工作簿 23 38. 快速删除工作表中的空 23 39. 绘制斜线表头 24 40. 绘制斜线单元格 25 41. 每次选定同一单元格 26 42. 快速查找工作簿 26 43. 禁止复制隐藏或列中的数据 27 44. 制作个性单元格 27 一、 数据输入和编辑技巧 28 45. 在一个单元格内输入多个值 28 46. 增加工作簿的页数 28 47. 奇特的F4键 29 48. 将格式化文本导入EXCEL 29 49. 快速换 30 50. 巧变文本为数字 30 51. 在单元格中输入0值 31 52. 将数字设为文本格式 32 53. 快速进单元格之间的切换(微软OFFICE技巧大赛获奖作品) 32 54. 在同一单元格内连续输入多个测试值 33 55. 输入数字、文字、日期或时间 33 56. 快速输入欧元符号 34 57. 将单元格区域从公式转换成数值 34 58. 快速输入有序文本 34 59. 输入有规律数字 35 60. 巧妙输入常用数据 36 61. 快速输入特殊符号 36 62. 快速输入相同文本 37 63. 快速给数字加上单位 38 64. 巧妙输入位数较多的数字 39 65. 将WPS/WORD表格转换为EXCEL工作表 39 66. 取消单元格链接 40 67. 快速输入拼音 40 68. 插入“√” 41 69. 按小数点对齐 41 70. 对不同类型的单元格定义不同的输入法 41 71. 在EXCEL中快速插入WORD表格 42 72. 设置单元格字体 43 73. 在一个单元格中显示多文字 43 74. 将网页上的数据引入到EXCEL表格 43 75. 取消超级链接 44 76. 编辑单元格内容 44 77. 设置单元格边框 45 78. 设置单元格文本对齐方式 45 79. 输入公式 46 80. 输入人名时使用“分散对齐”(微软OFFICE技巧大赛获奖作品) 46 81. 隐藏单元格中的所有值(微软OFFICE技巧大赛获奖作品) 46 82. 恢复隐藏列 47 83. 快速隐藏/显示选中单元格所在和列(微软OFFICE技巧大赛获奖作品) 47 84. 彻底隐藏单元格 48 85. 用下拉列表快速输入数据 48 86. 快速输入自定义短语 49 87. 设置单元格背景色 50 88. 快速在多个单元格中输入相同公式 50 89. 同时在多个单元格中输入相同内容 50 90. 快速输入日期和时间 51 91. 将复制的单元格安全地插入到现有单元格之间 51 92. 在EXCEL中不丢掉列标题的显示 52 93. 查看与日期等效的序列数的值 52 94. 快速复制单元格内容 53 95. 使用自定义序列排序(微软OFFICE技巧大赛获奖作品) 53 96. 快速格式化EXCEL单元格 53 97. 固定显示某列 54 98. 在EXCEL中快速编辑单元格 54 99. 使用自动填充快速复制公式和格式 55 100. 为单元格添加批注 56 101. 数据自动输入 56 102. 在EXCEL中快速计算一个人的年龄 57 103. 快速修改单元格次序 57 104. 将网页上的数据引入到EXCEL表格中 58 一、 图形和图表编辑技巧 58 105. 在网上发布EXCEL生成的图形 58 106. 创建图表连接符 59 107. 将EXCEL单元格转换成图片形式插入到WORD中 60 108. 将WORD内容以图片形式插入到EXCEL表格中 61 109. 将WORD中的内容作为图片链接插入EXCEL表格中 61 110. 在独立的窗口中处理内嵌式图表 62 111. 在图表中显示隐藏数据 62 112. 在图表中增加文本框 63 113. 建立文本与图表文本框的链接 63 114. 给图表增加新数据系列 64 115. 快速修改图表元素的格式 65 116. 创建复合图表 65 117. 对度量不同的数据系列使用不同坐标轴 66 118. 将自己满意的图表设置为自定义图表类型 66 119. 复制自定义图表类型 67 120. 旋转三维图表 67 121. 拖动图表数据点改变工作表中的数值 68 122. 把图片合并进你的图表 68 123. 用图形美化工作表 70 124. 让文本框与工作表网格线合二为一 71 125. 快速创建默认图表 71 126. 快速创建内嵌式图表 71 127. 改变默认图表类型 72 128. 快速转换内嵌式图表与新工作表图表 72 129. 利用图表工具栏快速设置图表 73 130. 快速选取图表元素 74 131. 通过一次按键创建一个EXCEL图表 75 132. 绘制平直直线 75 一、 函数和公式编辑技巧 75 133. 巧用IF函数清除EXCEL工作表中的0 75 134. 批量求和 76 135. 对相邻单元格的数据求和 77 136. 对不相邻单元格的数据求和 78 137. 利用公式来设置加权平均 79 138. 自动求和 79 139. 用记事本编辑公式 80 140. 防止编辑栏显示公式 80 141. 解决SUM函数参数中的数量限制 81 142. 在绝对与相对单元引用之间切换 81 143. 快速查看所有工作表公式 82 144. 实现条件显示 82 一、 数据分析和管理技巧 83 145. 管理加载宏 83 146. 在工作表之间使用超级连接 84 147. 快速链接网上的数据 85 148. 跨表操作数据 86 149. 查看EXCEL中相距较远的两列数据 86 150. 如何消除缩位后的计算误差(微软OFFICE技巧大赛获奖作品) 87 151. 利用选择性粘贴命令完成一些特殊的计算 87 152. WEB查询 88 153. 在EXCEL中进快速计算 89 154. 自动筛选前10个 89 155. 同时进多个单元格的运算(微软OFFICE技巧大赛获奖作品) 90 156. 让EXCEL出现错误数据提示 91 157. 用“超级连接”快速跳转到其它文件 92 一、 设置技巧 92 158. 定制菜单命令 92 159. 设置菜单分隔线 93 160. 备份自定义工具栏 93 161. 共享自定义工具栏 94 162. 使用单文档界面快速切换工作簿 94 163. 自定义工具栏按钮 95
### 回答1: 你可以使用 Excel排序功能来将表格从小到大排序。具体步骤如下: 1. 选中需要排序的数据范围。 2. 点击“数据”选项卡中的“排序”按钮。 3. 在弹出的排序对话框中,选择要排序的列,并选择“升序”排序方式。 4. 点击“确定”按钮,即可完成排序。 如果需要按照多个列排序,可以在排序对话框中选择“添加级别”来添加排序条件。 ### 回答2: 要在Excel表格中按照从小到大的顺序对数据进排序,可以按照以下步骤操作: 1. 打开Excel表格,并选择需要排序的数据所在的区域。 2. 在Excel的功能区中,点击“数据”选项卡,并在“排序与筛选”组中选择“升序排序”选项。 3. 在“排序”对话框中,选择要排序的列(或)和排序规则。如果只需要按照一个关键列排序,可将“排序依据”设置为该列的名称。如果需要按照多个关键列排序,则可以在“排序依据”中选择多个列,并按照先后顺序进排序。 4. 确认排序设置后,点击“确定”按钮。 5. Excel将会按照选定的排序规则对数据进排序,并将结果显示在表格中。 需要注意的是,如果所选数据存在合并单元格或其他特殊格式,可能会影响排序的结果。在进排序之前,建议先将合并的单元格拆分,并将数据格式统一,以保证排序的准确性。 另外,如果需要对表格中的部分列进排序,可以通过选择需要排序的列范围,而不是整个表格,来仅对特定的列进排序。这样可以更加方便地对数据进排序操作。 ### 回答3: 要将Excel表格中的数据从小到大排序,可以按照以下步骤进操作: 1. 首先,选中需要排序的数据范围。可以是整个表格,也可以是某一列或某一。 2. 然后,点击Excel工具栏中的“数据”选项卡,在“排序与筛选”组中找到“排序最小到最大”按钮,点击它。 3. 在弹出的排序对话框中,选择要排序的列或。如果是排序整个表格,则直接选择“将此区域排序”选项。 4. 在排序对话框中,可以选择多个排序条件,按照需要进设置。如果只按照一个条件排序,则不必修改任何设置。 5. 最后,点击“确定”按钮,Excel会按照选定的条件将数据从小到大进排序。 另外,还可以通过快捷键来实现Excel表格排序。选中需要排序的数据范围后,按下Alt键再按下D键,最后按下S键。这样就能快速弹出排序对话框,按照上述步骤进操作即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值