广州网站改版哪家好,wordpress关闭,注册网站域名的入口,流媒体网站建设规划 所需设备Excel VBA 双列排序 功能概述
这段VBA代码实现了Excel中的双列排序功能#xff0c;具体是#xff1a;
跳过前3行表头先按C列数据从大到小排序在C列值相同的情况下#xff0c;按B列从大到小排序排序时保持整行数据的完整性
流程图 #mermaid-svg-XJERemQluZlM4K8l {font-fa…Excel VBA 双列排序 功能概述
这段VBA代码实现了Excel中的双列排序功能具体是
跳过前3行表头先按C列数据从大到小排序在C列值相同的情况下按B列从大到小排序排序时保持整行数据的完整性
流程图 #mermaid-svg-XJERemQluZlM4K8l {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XJERemQluZlM4K8l .error-icon{fill:#552222;}#mermaid-svg-XJERemQluZlM4K8l .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XJERemQluZlM4K8l .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-XJERemQluZlM4K8l .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XJERemQluZlM4K8l .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XJERemQluZlM4K8l .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XJERemQluZlM4K8l .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XJERemQluZlM4K8l .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XJERemQluZlM4K8l .marker.cross{stroke:#333333;}#mermaid-svg-XJERemQluZlM4K8l svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XJERemQluZlM4K8l .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XJERemQluZlM4K8l .cluster-label text{fill:#333;}#mermaid-svg-XJERemQluZlM4K8l .cluster-label span{color:#333;}#mermaid-svg-XJERemQluZlM4K8l .label text,#mermaid-svg-XJERemQluZlM4K8l span{fill:#333;color:#333;}#mermaid-svg-XJERemQluZlM4K8l .node rect,#mermaid-svg-XJERemQluZlM4K8l .node circle,#mermaid-svg-XJERemQluZlM4K8l .node ellipse,#mermaid-svg-XJERemQluZlM4K8l .node polygon,#mermaid-svg-XJERemQluZlM4K8l .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XJERemQluZlM4K8l .node .label{text-align:center;}#mermaid-svg-XJERemQluZlM4K8l .node.clickable{cursor:pointer;}#mermaid-svg-XJERemQluZlM4K8l .arrowheadPath{fill:#333333;}#mermaid-svg-XJERemQluZlM4K8l .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XJERemQluZlM4K8l .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XJERemQluZlM4K8l .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-XJERemQluZlM4K8l .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-XJERemQluZlM4K8l .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XJERemQluZlM4K8l .cluster text{fill:#333;}#mermaid-svg-XJERemQluZlM4K8l .cluster span{color:#333;}#mermaid-svg-XJERemQluZlM4K8l div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XJERemQluZlM4K8l :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始 定义工作表和变量 获取最后一行行号 设置数据格式 定义排序范围 清除已有排序字段 添加第一个排序键:C列 添加第二个排序键:B列 执行排序 显示完成提示 结束 代码详解
1. 变量声明和初始化
Dim ws As Worksheet
Dim lastRow As Long
Dim sortRange As RangeSet ws ActiveSheetWorksheet: 工作表对象lastRow: 存储数据的最后一行行号sortRange: 定义排序范围
2. 获取数据范围
lastRow ws.Cells(ws.Rows.Count, C).End(xlUp).Row使用End(xlUp)方法从底部向上查找最后一个非空单元格
3. 格式设置
With ws.Range(B4:C lastRow).NumberFormat 0.00 设置为2位小数.Value .Value 刷新值
End With设置B列和C列的数字格式通过重新赋值来刷新单元格内容
4. 排序范围定义
Set sortRange ws.Range(A4:E lastRow)从第4行开始跳过表头包含A到E列的所有数据
5. 排序实现
With ws.Sort.SortFields.Clear.SortFields.Add Key:ws.Range(C4:C lastRow), _SortOn:xlSortOnValues, _Order:xlDescending, _DataOption:xlSortNormal.SortFields.Add Key:ws.Range(B4:B lastRow), _SortOn:xlSortOnValues, _Order:xlDescending, _DataOption:xlSortNormal.SetRange sortRange.Header xlNo.MatchCase False.Orientation xlTopToBottom.SortMethod xlPinYin.Apply
End With关键参数说明
SortFields.Clear: 清除现有排序条件SortOn:xlSortOnValues: 按值排序Order:xlDescending: 降序排列Header xlNo: 不包含表头SortMethod xlPinYin: 使用拼音排序方法
使用注意事项
确保数据从第4行开始数据列需要在A到E列之间数据格式应为数字类型C列为第一排序键B列为第二排序键
V20250116 X从大到小
Sub SortTwoColumnsWithHeaders()Dim ws As WorksheetDim lastRow As LongDim sortRange As RangeSet ws ActiveSheetlastRow ws.Cells(ws.Rows.Count, C).End(xlUp).Row确保数据格式正确从第4行开始With ws.Range(B4:C lastRow).NumberFormat 0.00 设置为5位小数.Value .Value 刷新值End With定义排序范围从A列到E列从第4行开始Set sortRange ws.Range(A4:E lastRow)执行排序With ws.Sort.SortFields.Clear.SortFields.Add Key:ws.Range(C4:C lastRow), _SortOn:xlSortOnValues, _Order:xlDescending, _DataOption:xlSortNormal.SortFields.Add Key:ws.Range(B4:B lastRow), _SortOn:xlSortOnValues, _Order:xlDescending, _DataOption:xlSortNormal.SetRange sortRange.Header xlNo 因为真正的数据从第4行开始所以这里设置为No.MatchCase False.Orientation xlTopToBottom.SortMethod xlPinYin.ApplyEnd WithMsgBox 排序完成
End Sub
V20250116 每行的X从小到大升序排列
Sub SortTwoColumnsWithHeaders()Dim ws As WorksheetDim lastRow As LongDim sortRange As RangeSet ws ActiveSheetlastRow ws.Cells(ws.Rows.Count, C).End(xlUp).Row确保数据格式正确从第4行开始With ws.Range(B4:C lastRow).NumberFormat 0.00 设置为5位小数.Value .Value 刷新值End With定义排序范围从A列到E列从第4行开始Set sortRange ws.Range(A4:E lastRow)执行排序With ws.Sort.SortFields.Clear.SortFields.Add Key:ws.Range(C4:C lastRow), _SortOn:xlSortOnValues, _Order:xlDescending, _DataOption:xlSortNormal.SortFields.Add Key:ws.Range(B4:B lastRow), _SortOn:xlSortOnValues, _Order:xlAscending, _DataOption:xlSortNormal.SetRange sortRange.Header xlNo 因为真正的数据从第4行开始所以这里设置为No.MatchCase False.Orientation xlTopToBottom.SortMethod xlPinYin.ApplyEnd WithMsgBox points order finshied
End Sub