如何在Excel中使用VBA对范围进行排序(6个例子)

  • Share This
Hugh West

知道如何在Excel中使用VBA对范围进行排序,在我们的日常计算中是省时省力的。 虽然Excel默认提供了一个排序工具。 通过使用 范围.排序 方法 我们可以获得几个参数来对一个数据集进行排序,而且比平时有更多的选择。

下载实践工作手册

下载这本练习手册,在阅读本文时进行练习。

Excel.xlsm中的排序范围

Excel VBA中Range.Sort语句的介绍

目标: 对一个单元格数据的范围进行排序。

语法。

表情 .排序 ( 钥匙1 , 秩序1 , 钥匙2 , 类型 , 秩序2 , 钥匙3 , 秩序3 , 标题 , 秩序定制 , MatchCase , 适应情况 , 排序方法 , 数据选项1 , 数据选项2 , 数据选项3 )

在这里, 表情 代表一个 范围 对象,即一个单元格、一行、一列,或一个单元格的选择。

争论。

我们需要提供 的主要参数。 范围.排序 方法,他们是-

钥匙 - 我们需要对单列或多列的单元格进行排序的范围。

秩序 - 指定升序或降序的排序顺序。

标题 - 声明要排序的列是否有一个标题。

在Excel VBA中对范围进行排序的6个例子

在本文中,作为一个数据集,我们将使用一个带有出生日期和年龄的人名列表。 我们将应用不同的方法对数据集进行排序。 让我们通过文章和练习来掌握这些方法。

1. 用Excel VBA对单列范围进行排序

在这个例子中,我们将 分类 人从 最古老的 最年轻的 让我们按照步骤来使用 范围 . 分类 方法 这将 分类 年龄栏 降序 .

步骤。

  • 转到 开发者标签 Excel功能区 点击 关于 视觉基础

  • 然后选择 模块选项 插入标签 打开一个 新模块 .

现在,我们将把我们的代码放到 分类 年龄 列的范围。

1.1 带标题的栏目

把下面的代码放在视觉代码编辑器中。

 Sub SortRange() Range("D4:D11").Sort Key1:=Range("D4"), _ Order1:=xlDescending, _ Header:=xlYes End Sub 

新闻 F5 或点击 运行 按钮,以 执行 的代码。

解释一下。

在上述代码中,我们把-

表达式(Range对象)=Range("D4:D11")。 年龄栏 与一个 页眉 细胞D4 价值 D5:D11。

键 = Range("D4"); 钥匙 排序。

Order= xlDescending; 因为我们要 分类 价值从 最大的 最低的 我们设定 排序顺序 作为 递减。

标题=xlYes。 在下面的屏幕截图中,我们可以看到 数据集 有一个 页眉 为每个 列。

1.2 无标题的栏目

把下面的代码放在视觉代码编辑器中。

 Sub SortRange() Range("D4:D10").Sort Key1:=Range("D4"), _ Order1:=xlDescending, _ Header:=xlNo End Sub 

新闻 F5 或点击 运行 按钮,以 执行 的代码。

解释一下。

在上述代码中,我们把-

表达式(Range对象)=Range("D4:D10")。 年龄栏 没有 页眉 价值 D4:D10。

键 = Range("D4"); 钥匙 排序。

Order= xlDescending; 因为我们要 分类 价值从 最大的 最低的 我们设定 排序顺序 作为 递减。

标题 =xlNo; 在下面的屏幕截图中,我们可以看到 数据集 没有 头部。

相关内容。 如何在Excel中对列进行排序而不混入数据(3种方法)

2. 使用VBA代码对Excel中的多列范围进行排序

为了显示排序在 多列 ,我们需要 修改 我们的 数据集 一点点,我们 插入式的 一些 行数 在修改后的数据集中,行 7, 8, 9 相同 的值。 出生日期 年龄 三个不同的名字 .这些 名称 在任何 特定订单 的上升或下降。

在这个例子中,我们将把名字排列在 升序 让我们在visual basic编辑器中运行以下代码。

 Sub SortRange() Range("B4:D12").Sort Key1:=Range("D4"), _ Order1:=xlDescending, _ Key2:=Range("B4"), _ Order2:=xlAscending, _ Header:=xlYes End Sub 

解释一下。

在上面的截图中,我们可以看到,在 D列 排序的 下降 秩序。 我们添加了 还有两个参数 在我们之前的代码中。

Key2: =Range("B4") , 键来对名字进行排序。

Order2: =xlAscending ,在 秩序 做空的名字 .

因此,我们看到 名称 第7、8和9行 现在是 按字母顺序排列 排序在 升序 秩序。

在下面的截图中,我们改变了 价值 的。 订单2参数 分类 名称 下降 秩序。

阅读更多。 如何在Excel中对多列进行排序(5种快速方法)

3. 在Excel VBA中双击标题对列范围进行排序

Excel的默认排序功能不允许 排序值 的列,由 双击 列标题 但使用VBA代码我们可以实现它。 让我们通过应用以下代码来说明这一功能。

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim KeyRange As Range Dim ColCount As Integer ColCount = Range("A1:C8").Columns.Count Cancel = False If Target.Row = 1 And Target.Column <= ColCount Then Cancel = True Set KeyRange = Range(Target.Address) Range("A1:C8").Sort Key1:=KeyRange, Header:=xlYes End If End Sub 

在这段代码中,我们使用了 BeforeDoubleClick事件 禁用通常的双 - 点击 这是要启动 编辑 在这个事件运行时,如果我们 - 点击 在任何一个 列标题 它将列数据排序在 升序 .

阅读更多。 用VBA在Excel中对列进行排序(4种方法)

类似的阅读。

  • 如何在Excel中添加排序按钮(7种方法)
  • 在Excel中对唯一的列表进行排序(10种实用方法)
  • 如何在Excel VBA中使用排序功能(8个合适的例子)
  • 在Excel中对重复数据进行排序(列和行)
  • Excel中的随机排序(公式+VBA)

4. 使用Excel VBA根据背景颜色对列范围进行排序

我们可以对一列中的单元格范围进行排序 基于 对他们的 背景色 要做到这一点,我们需要 增加 a 参数 名为 排序上 其中有一个 值 xlSortOnCellColor 为了演示排序,我们首先设定不同的 背景颜色 到我们的行 数据集 .

然后在visual basic代码编辑器中 拷贝 以下代码,并按 F5 来运行它。

 Sub SortRangeByBackgroundColor() ActiveWorkbook.Worksheets("background").Sort.SortFields.Add2 Key:=Range("B4"), _ SortOn:=xlSortOnCellColor, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("background").Sort .SetRange Range("B4:D10" ) .Apply End With 结束 Sub 

在下面的截图中,我们可以看到 分类的数据集 基于他们的背景颜色。

解释一下。

  • 在这个例子中,我们把 工作表 " 背景 "。 因此,在代码中,我们把" 背景 "作为我们的 活动工作表的名称。
  • 我们设定 B4 作为 钥匙 B4:D10 作为 范围 该代码将根据密钥对数据进行排序。
  • 由于我们没有指定 标题参数 ,代码运行为默认的 没有标题。
  • 我们设置了 秩序 参数为 升序的。 所以它把数据从低到高排序。 .

阅读更多。 如何在Excel中按颜色排序(4个标准)

5. 应用VBA代码根据字体颜色对列范围进行排序

通过应用VBA代码,我们可以根据数据集上的 字体颜色 首先,我们需要 不同行的颜色 来说明这个例子。

应用下面的代码对数据集进行排序,其依据是 字体颜色。

 Sub SortRangeByFontColor() ActiveWorkbook.Worksheets("fontcolor").Sort.SortFields.Add(Range("B4"), _ xlSortOnFontColor, xlAscending, xlSortNormal).SortOnValue.Color = RGB(0, 0, 0) With ActiveWorkbook.Worksheets("fontcolor").Sort.SetRange Range("B4:D11") .Header = xlYes .Orientation = xlTopToBottom .Apply End With End Sub 

解释一下。

  • 在这个例子中,我们把 工作表 " 字体颜色 "。 因此,在代码中,我们把" 字体颜色 "作为我们的 活动工作表的名称。
  • 我们设定 B4 作为 钥匙 B4:D11 作为 范围 该代码将根据密钥对数据进行排序。
  • 在这个例子中,我们还指定了标题参数为 xlYes .
  • 在这里,我们设置了 秩序 参数为 升序的。 所以它把数据从低到高排序。 .
  • 的价值。 排序上 参数为
  • ǞǞǞ 方向参数 持有值 xlTopToBottom 因为它是强制性的。
  • 颜色 排序的依据是RGB术语,它的值从 0 255 .

阅读更多。 如何在Excel中对两列进行排序匹配(包括精确匹配和部分匹配)?

6. 用Excel VBA改变排序范围的方向

使用 方向 参数,我们可以改变我们想对数据进行排序的方式。 在这个例子中,我们有 换位的 我们的数据集以 分类 横向 .

让我们把下面的代码放到visual basic编辑器中,然后按F5键运行它。

 Sub Orientation() Range("B4:H6").Sort Key1:=Range("B6"), _ Order1:=xlAscending, _ Orientation:=xlSortRows, _ Header:=xlYes End Sub 

在这里,我们 排序的 的数据为基础。 年龄排行 升序 从的订单 左边 在代码中,我们设置了 方向 参数为 xlSortRows .

相关内容。 如何在Excel中自动排序多列(3种方法)

需要记住的事情

  • ǞǞǞ 参数SortOn 我们用来 分类 列的范围,基于 背景色 字体颜色 只能由一个 工作表对象 我们不能使用它与一个 范围对象 .
  • ǞǞǞ BeforeDoubleClick事件 只在以下情况下对数据进行排序 升序的。

总结

现在,我们知道了如何在Excel中使用VBA对范围进行排序。 希望它能鼓励你更有信心地使用它。 有任何问题或建议,不要忘记把它们放在下面的评论框中。

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.