【EXCEL】【VBA】最大值行索引查找与Z字形数据重排

server/2025/2/13 3:58:43/

一、公式获取列中最大值及所对应的行号

1. 获取区域最大值

excel">=MAX(IF(ROW(N:N)>3,N:N,""))
原理解析:
  • ROW(N:N) - 返回行号
  • IF(ROW(N:N)>3,N:N,"") - 过滤第3行之后的数据
  • MAX() - 计算最大值

2. 查找最大值位置

excel">=MATCH(MAX(IF(ROW(O:O)>3,O:O,"")),IF(ROW(O:O)>3,O:O,""),0)
函数组合:
  1. 内层:找出最大值
  2. 外层:MATCH 函数定位最大值位置
  3. 最后参数 0 表示精确匹配

3. 引用最大值对应单元格

excel">=INDEX(A:A,MATCH(MAX(IF(ROW(N:N)>3,N:N,"")),IF(ROW(N:N)>3,N:N,""),0))
函数链:
MAX 找最大值
MATCH 找位置
INDEX 返回引用

二、VBA 实现 Z 字形数据重排

1. 程序流程图

开始
禁用Excel自动更新
获取源数据范围
创建新工作表
按10列分组复制
设置页面格式
添加分页符
恢复Excel设置
结束

2. 核心代码解析

2.1 性能优化设置
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
2.2 工作表操作
' 删除已存在的工作表
On Error Resume Next
ThisWorkbook.Worksheets("Z排列结果").Delete
On Error GoTo 0' 创建新工作表
Set ws2 = ThisWorkbook.Worksheets.Add
ws2.Name = "Z排列结果"
2.3 数据复制循环
For i = 1 To lastCol Step 10colsToTransfer = Application.Min(10, lastCol - i + 1)' 复制三行数据ws1.Range(...).Copyws2.Cells(...).PasteSpecial xlPasteValuesnewRow = newRow + 3
Next i
2.4 页面设置
With ws2.PageSetup.Orientation = xlPortrait.PaperSize = xlPaperA4.FitToPagesWide = 1.PrintGridlines = True
End With

3. 关键技术要点

  1. 错误处理:使用 On Error Resume NextOn Error GoTo 0
  2. 性能优化:禁用屏幕刷新和自动计算
  3. 循环控制:使用 Step 关键字控制步长
  4. 页面布局:使用 PageSetup 对象设置打印格式

4. 实用技巧

  1. 动态范围
lastCol = ws1.Cells(3, ws1.Columns.Count).End(xlToLeft).Column
  1. 分页处理
For j = 10 To ws2.UsedRange.Columns.Count Step 10ws2.Columns(j).PageBreak = xlPageBreakManual
Next j
  1. 自动列宽
ws2.UsedRange.Columns.AutoFit

v20250210

Sub RearrangeRowsInZPatternWithPageSetup()Application.ScreenUpdating = FalseApplication.Calculation = xlCalculationManualApplication.EnableEvents = FalseDim ws1 As WorksheetDim ws2 As WorksheetDim lastCol As LongDim newRow As LongDim newCol As LongDim i As Long' 设置源工作表Set ws1 = ThisWorkbook.Worksheets("03.Obj Geom - Point Coordinates")' 创建新工作表On Error Resume NextThisWorkbook.Worksheets("Z排列结果").DeleteOn Error GoTo 0Set ws2 = ThisWorkbook.Worksheets.Addws2.Name = "Z排列结果"' 获取最后一列lastCol = ws1.Cells(3, ws1.Columns.Count).End(xlToLeft).Column' 初始化新位置计数器newRow = 1newCol = 1' 每10列为一组进行复制For i = 1 To lastCol Step 10' 确定当前组的列数Dim colsToTransfer As LongcolsToTransfer = Application.Min(10, lastCol - i + 1)' 直接复制值ws1.Range(ws1.Cells(3, i), ws1.Cells(3, i + colsToTransfer - 1)).Copyws2.Cells(newRow, newCol).PasteSpecial xlPasteValuesws1.Range(ws1.Cells(4, i), ws1.Cells(4, i + colsToTransfer - 1)).Copyws2.Cells(newRow + 1, newCol).PasteSpecial xlPasteValuesws1.Range(ws1.Cells(5, i), ws1.Cells(5, i + colsToTransfer - 1)).Copyws2.Cells(newRow + 2, newCol).PasteSpecial xlPasteValues' 更新行位置newRow = newRow + 3Next iApplication.CutCopyMode = False' 批量设置列宽ws2.UsedRange.Columns.AutoFit' 设置页面布局With ws2.PageSetup.Orientation = xlPortrait.PaperSize = xlPaperA4.LeftMargin = Application.CentimetersToPoints(2).RightMargin = Application.CentimetersToPoints(2).TopMargin = Application.CentimetersToPoints(2).BottomMargin = Application.CentimetersToPoints(2).FitToPagesTall = False.FitToPagesWide = 1.PrintGridlines = TrueEnd With' 批量添加分页符Dim j As LongFor j = 10 To ws2.UsedRange.Columns.Count Step 10ws2.Columns(j).PageBreak = xlPageBreakManualNext j' 设置视图ws2.Parent.Windows(1).View = xlPageBreakPreviewws2.Parent.Windows(1).Zoom = 120' 恢复Excel设置Application.ScreenUpdating = TrueApplication.Calculation = xlCalculationAutomaticApplication.EnableEvents = TrueMsgBox "finished", vbInformation
End Sub

在这里插入图片描述


http://www.ppmy.cn/server/167231.html

相关文章

数据可视化技术综述(4)衡量数据的性能指标的十大维度

数据可视化系统的性能直接影响用户体验与业务决策效率。本文从技术实现与工程化视角,系统阐述衡量数据可视化性能的十大核心维度,包括渲染效率、数据吞吐量、内存占用、响应延迟、可扩展性、准确性、跨平台兼容性、交互流畅度、资源消耗及容错性。通过分…

黑马 Linux零基础快速入门到精通 笔记

初识Linux Linux简介 提及操作系统,我们可能最先想到的是windows和mac,这两者都属于个人桌面操作系统领域,而Linux则属于服务器操作系统领域。无论是后端软件、大数据系统、网页服务等等都需要运行在Linux操作系统上。 Linux是一个开源的操作…

Maven 中常用的 scope 类型及其解析

在 Maven 中,scope 属性用于指定依赖项的可见性及其在构建生命周期中的用途。不同的 scope 类型能够影响依赖项的编译和运行阶段。以下是 Maven 中常用的 scope 类型及其解析: compile(默认值): 这是默认的作用域。如果…

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE(Multi-gate Mixture-of-Experts,多门混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…

ping的网络协议,ping用到的网络协议!

ping命令使用的网络协议是ICMP(Internet Control Message Protocol),即因特网控制消息协议。ICMP协议是TCP/IP协议簇的一个子协议,主要用于在IP主机、路由器之间传递控制消息,包括网络通不通、主机是否可达、路由是否可…

CSS 表单 实现响应式布局

前言 在现代 Web 开发中,表单是用户与网页交互的重要组成部分。一个设计良好的表单不仅要美观,更要具备优秀的用户体验和良好的响应式布局能力。本文将以一个简单的 HTML 表单为例,详细介绍如何使用 CSS 对表单进行美化并实现响应式设计。 …

c语言判断一个文件的文件格式

在 Linux 下使用 C 语言判断一个文件的文件格式,通常需要检查文件的头信息(也称为“幻数”或“魔数”)。不同的文件格式在文件头有特定的字节序列,这些字节序列可以用来确定文件的类型。以下是一个基本的示例,展示了如…

PHP函数介绍—get_headers(): 获取URL的响应头信息

概述:在PHP开发中,我们经常需要获取网页或远程资源的响应头信息。PHP函数get_headers()能够方便地获取目标URL的响应头信息,并以数组形式返回。本文将介绍get_headers()函数的用法,以及提供一些相关的代码示例。 get_headers()函…