首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel文件的4项排序

Excel文件的4项排序
EN

Stack Overflow用户
提问于 2022-04-06 09:15:33
回答 1查看 235关注 0票数 1

需要在Excel文件(2013)中对4个关键字段进行排序。下面给出了代码。但却得不到预期的结果。需要你的帮助来解决这个问题。

代码语言:javascript
复制
Sub ToSortFile()
    Dim lastRow, LastCol As Long

    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
    LastCol = Cells(2, Columns.Count).End(xlToLeft).Column
    Set source_data = Range(Cells(2, 2), Cells(lastRow, LastCol))
    Set Ws = Sheets("Details")
    With Ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Ws.Range("B3"), Order:=xlAscending
        .SortFields.Add Key:=Ws.Range("C3"), Order:=xlAscending
        .SortFields.Add Key:=Ws.Range("K3"), Order:=xlAscending
        .SortFields.Add Key:=Ws.Range("M3"), Order:=xlAscending
        .SetRange Ws.Range("B3:U" & lastRow)
        .Header = xlYes
        .Apply
    End With
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-07 06:32:22

分类范围

使用Dim source_data As Range).的

  • 将强制您声明所有变量(Dim ws As WorksheetOption Explicit )

不建议在一行中声明

  • 变量,但是如果您不能帮助它,则需要正确地这样做:

昏暗的LastRow一样长,LastCol一样长,我一样长,数字像双倍

因为在As Variant.中,LastRow被声明为LastRow

当您编写

  • 时,Sheets是不合格的,即它指的是活动工作簿(ActiveWorkbook),您正在查看的工作簿可能是正确的工作簿,也可能不是。

如果正在使用的工作表位于包含代码

  • 工作簿中,则需要使用ThisWorkbook对其进行限定:

把ws设为工作表: Set ws = ThisWorkbook.Worksheets("Details")

如果不是

  • ,那么您希望以以下方式对每个工作表进行限定:

Dim wb作为工作簿: Set wb =工作簿(“Test.xlsx”)

或者如果工作簿关闭了,打开它.

Dim wb作为工作簿: Set wb = Workbooks.Open("C:\Test\Test.xlsx")

..。然后继续..。

把ws作为工作表: Set ws = wb.Worksheets("Details")

注意:在某些情况下,您必须使用ActiveWorkbook.

  • 在编写lastRow = Cells(Rows.Count, 2).End(xlUp).RowCellsRows时是不合格的,即它们指的是活动工作表(ActiveSheet),它可能是工作表Details,也可能不是。

  • 可以使用以下方法对其进行限定:

Dim ws作为工作表: Set ws = ThisWorkbook.Worksheets("Details") Dim LastRow As Long: LastRow = ws.Cells(ws.Rows.Count,2).End(xlUp).Row

经验法则是尽可能明确(合理),即不要让Excel为您决定。xlNo.

  • Related

  • 您将不使用.Header = xlGuess,但当范围包含标题时使用xlYes,或者在不包含消息头的情况下使用xlYes。在特定情况下,您只引用数据(Ws.Range("B3:U" & lastRow)),即它不包括标题,所以您应该使用Keys参数,尽管在列中指定要排序的任何单元格已经足够了。我建议指定整个列,即用B2代替B2:BLastRow2是标题行.

  • 注意到排序是按照从最后添加的排序字段到第一个排序字段的顺序执行的,在您的示例中,排序顺序是MKCB,也就是说,它仍然可能对您不合适。

代码语言:javascript
复制
Option Explicit

Sub ToSortFile()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim ws As Worksheet: Set ws = wb.Worksheets("Details")
    
    Dim LastRow As Long: LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    Dim LastCol As Long
    LastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column
    
    Dim srg As Range: Set srg = ws.Range("B2", ws.Cells(LastRow, LastCol))
    
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=srg.Columns(1), Order:=xlAscending
        .SortFields.Add Key:=srg.Columns(2), Order:=xlAscending
        .SortFields.Add Key:=srg.Columns(10), Order:=xlAscending
        .SortFields.Add Key:=srg.Columns(12), Order:=xlAscending
        .SetRange srg
        .Header = xlYes
        .Apply
    End With

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71764082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档