当前位置: 首页 > news >正文

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前

要求对4列数据按照第一行abcd的顺序排列

VB脚本如下:

要使用这个脚本,请按照以下步骤操作:

  1. 打开Excel,然后按下 Alt + F11 打开VBA编辑器。
  2. 在VBA编辑器中,选择“插入” > “模块”,在打开的模块窗口中粘贴上面的代码。
  3. 选择你想要排序的单元格区域。
  4. 按下 F5 运行宏或关闭VBA编辑器,在Excel中通过“开发工具” > “宏”来选择并运行这个宏。
Sub SortColumnsByFirstRow()Dim rng As RangeDim data() As VariantDim colOrder() As VariantDim i As Integer, j As IntegerDim temp As Integer' 检查选择区域If Selection.Areas.Count <> 1 ThenMsgBox "请选择一个单一的单元格区域进行排序。", vbExclamationExit SubEnd If' 获取选择区域Set rng = SelectionIf rng.Cells(1, 1).MergeCells ThenMsgBox "选定区域内含有合并的单元格,请先解除合并。", vbExclamationExit SubEnd If' 将选择区域的数据写入数组data = rng.Value' 获取列的数量Dim colCount As IntegercolCount = UBound(data, 2)' 创建列顺序数组ReDim colOrder(1 To colCount)ReDim data_1(1 To colCount)For i = 1 To colCountcolOrder(i) = idata_1(i) = data(1, i)Next i' 使用冒泡排序算法根据首行数据对列进行排序For i = 1 To colCount - 1For j = 1 To colCount - iIf data_1(j) > data_1(j + 1) Then' 交换列的顺序temp = colOrder(j)colOrder(j) = colOrder(j + 1)colOrder(j + 1) = tempDim temp1 As Varianttemp1 = data_1(j)data_1(j) = data_1(j + 1)data_1(j + 1) = temp1End IfNext j'MsgBox "i=" & colCount - i & " " & colOrder(colCount - i) & " " & data(1, colCount - i)Next i'For i = 1 To colCount'    MsgBox "i=" & i & " " & colOrder(i) & " " & data(1, i)'Next i' 根据排序后的列顺序重新写入数据Dim sortedData() As VariantReDim sortedData(1 To UBound(data, 1), 1 To colCount)For i = 1 To colCountFor j = 1 To UBound(data, 1)sortedData(j, i) = data(j, colOrder(i))'MsgBox j & i & sortedData(j, i)Next jNext i' 将排序后的数据重新写回Excel范围rng.Value = sortedData' 调整列宽For i = 1 To colCountrng.Columns(i).AutoFitNext iMsgBox "所选单元格区域已按首行字母顺序排序完成。", vbInformation
End Sub

相关文章:

  • 【附下载】100+AI领域论文及研究报告合集免费领取!
  • Rocky Linux 9 系统OpenSSH CVE-2024-6387 漏洞修复
  • 7/3 第六周 数据库的高级查询
  • 百亿红利市场年增速超20%,3亿银发族带动中老年奶粉三大内卷方向
  • 主流国产服务器操作系统技术分析
  • ubuntu 18 虚拟机安装(4)安装 postgres sql 数据库
  • firewalld防火墙(二)
  • Sping源码(九)—— Bean的初始化(非懒加载)—mergeBeanDefinitionPostProcessor
  • 巴图制自动化Profinet协议转Modbus协议模块连接PLC和电表通信
  • opencv 处理图像去噪的几种方法
  • Spring系统学习-什么是AOP?为啥使用AOP?
  • 将一个立方体对象的值赋给另一个立方体对象
  • 理解论文笔记:基于贝叶斯网络和最大期望算法的可维护性研究
  • ubuntu修改磁盘挂载目录名
  • 网络物理隔离
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • C++类的相互关联
  • create-react-app项目添加less配置
  • docker容器内的网络抓包
  • HomeBrew常规使用教程
  • JS 面试题总结
  • nginx 配置多 域名 + 多 https
  • Python爬虫--- 1.3 BS4库的解析器
  • scrapy学习之路4(itemloder的使用)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue2.0项目引入element-ui
  • windows-nginx-https-本地配置
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 类orAPI - 收藏集 - 掘金
  • 每天一个设计模式之命令模式
  • 目录与文件属性:编写ls
  • 推荐一个React的管理后台框架
  •  一套莫尔斯电报听写、翻译系统
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #define与typedef区别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)shell中括号的特殊用法 linux if多条件判断
  • ****三次握手和四次挥手
  • ../depcomp: line 571: exec: g++: not found
  • .net CHARTING图表控件下载地址
  • .NET正则基础之——正则委托
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @PreAuthorize注解
  • [04] Android逐帧动画(一)
  • [AIGC] Java 和 Kotlin 的区别
  • [C#基础]说说lock到底锁谁?
  • [C]编译和预处理详解
  • [CakePHP] 在Controller中使用Helper