5 个用于排序数据的 Microsoft Excel 宏

Excel 宏可能不像其他自动化工具那样全面,但不能削弱 Excel VBA 的有效性和效率。如果您使用 Excel 和其他 Microsoft Office 工具(如 Word 和 Access),则 VBA 及其功能不会出错。

MS Excel 是一个强大的工具,为用户提供了大量的选项。从存储数据到创建自动化仪表板,您都可以在 Excel 及其电子表格中完成所有操作。

如果您想使用 VBA 在 Excel 中自动执行排序职责,请尝试使用这些高效且易于应用的宏。

首先,您可以下载一个虚拟数据集来练习您的 Excel 宏技能。

请放心,一旦您掌握了这些宏的窍门并更好地了解事情的工作原理,您就可以更改代码以适应您自己的工作或学校电子表格。

如果您想继续学习,可以下载本文中使用的数据集。

下载:Excel数据集

使用这个简单的代码对 Excel 电子表格中的数据列进行排序。如果您下载了虚拟数据集,您可以尝试对列 E (Units Sold) 进行排序。

打开一个新的 Excel 文件并将其保存为Excel 启用宏的工作簿( .xlsm)工作簿类型。此文件将存储宏以对另一个文件中的数据进行排序。

您将从宏文件中控制您的文件,宏文件将分别与您的工作簿进行交互。

输入以下代码:

Sub sortwithheaders()
Workbooks("Financial Sample.xlsx").Sheets(1).Activate
Range("A1:P701").sort Key1:=Range("e1"), Order1:=xlAscending, Header:=xlYes
End Sub

在哪里:

  • Key1:定义要排序的列
  • Order1:排序方式(升序/降序)
  • 标题:如果您的内容有标题,则此选项将保留为xlYes。或者,选择xlNo
  • 该范围将由起始单元格和结束单元格地址组成,以便为排序目的捕获所有内容。结果是您的整个数据集将根据 E 列中的数据进行排序。

    在某些情况下,您的起点可能已定义,但终点??是动态的。在这种情况下,您可以使代码动态化,以便它自动选择范围的末尾。

    要适应数据的变化,请使用以下代码:

    Sub sortwithheaders()
    Workbooks("Financial Sample.xlsx").Sheets(1).Activate
    Range("A1", Range("A1").End(xlDown)).sort Key1:=Range("e2"), Order1:=xlAscending, Header:=xlYes
    End Sub

    在哪里:

  • End(xlDown):此函数将自动选择最后填充的单元格
  • 注意:如果公式在列中遇到空白单元格,它会将前面的单元格视为范围的结尾。

    在某些情况下,您可能希望一次性对多列中的数据进行排序。为此,您可以使用以下代码来实现您的目的:

    Sub SortMultipleColumns()
    With Worksheets("Sheet1")
    With .Cells(1, "A").CurrentRegion
    .Cells.sort Key1:=.Range("B1"), Order1:=xlAscending, _
    Key2:=.Range("E1"), Order2:=xlAscending, _
    Orientation:=xlTopToBottom, Header:=xlYes
    End With
    End With
    End Sub

    当您处理多个工作表时,您可能希望准备好将数据放入仪表板。数据准备的最重要方面之一是对其进行排序,并将数据以某种格式排列以呈现给您的利益相关者或客户。

    一种选择是手动循环浏览每个工作表,对所需的列进行排序,然后继续下一步。或者,为什么不让 VBA 为您做呢?

    下面代码的目的是循环浏览工作簿中的每个可用工作表,并根据指定的列对可用数据进行排序。

    以下是对多张工作表中的列进行排序的方法:

    Sub SortWS()
    Dim ws As Worksheet
    'Activate the intended worksheet
    Workbooks("Financial Sample.xlsx").Activate
    'Cycle through each individual worksheet automatically using for loop
    For Each ws In ActiveWorkbook.Sheets
    'activate each individual worksheet
    ws.Activate
    'Define the range and then sort the column basis your requirements. In this case, only one column in being sorted.
    Range("A1", Range("p1").End(xlDown)).sort Key1:=Range("E1"), Order1:=xlDescending, Header:=xlYes
    'Command used to cycle to the next worksheet, once the previous worksheet has been sorted
    Next ws
    End Sub

    所有以单引号开头的信息都是 VBA 注释。这些不会在执行阶段执行。但是,您添加的每个 VBA 注释都是对代码的有意义的添加,因为您可以在代码部分中定义本质、功能和其他相关部分。

    想象一下您想要对数据进行排序并将整个数据集(或其部分)复制到新添加的工作表中的情况。在这种情况下,您可以使用以下代码来执行手头的任务:

    Sub SortWS()
    Dim ws As Worksheet
    'Activate the intended worksheet
    Workbooks("Financial Sample.xlsx").Activate
    'Cycle through each individual worksheet automatically using for loop
    For Each ws In ActiveWorkbook.Sheets
    'activate each individual worksheet
    ws.Activate
    'Define the range and then sort the column basis your requirements.
    'In this case, only one column in being sorted.
    Range("A1", Range("p1").End(xlDown)).sort Key1:=Range("E1"), Order1:=xlDescending, Header:=xlYes
    'Command used to cycle to the next worksheet, once the previous worksheet has been sorted
    Next ws
    'Create a new worksheet within the workbook to store the new data
    ActiveWorkbook.Sheets.Add.Name = "Results"
    'Copy paste the sorted data into the newly added sheet
    Sheets("Sheet1").Range("A1:p701").Copy Destination:=Sheets("Results").Range("a1")
    End Sub

    上面的代码将对列 E 中的值进行排序,将新工作表结果添加到现有工作簿中,并将排序后的结果粘贴到单元格A1 中

    Excel VBA 是一种漂亮的语言,可以为您节省大量时间和精力。通过使用 VBA 宏,您可以创建广泛的仪表板,只需单击几下即可轻松对数据进行排序,并轻松执行不同的功能。

    幸运的是,Excel 的功能并没有以宏结束。查看一些提示和技巧,以成为更高效的 Excel 用户。

    标签: 微软Excel