如何在 Excel 工作表中通过 VBA 自动更新排序范围

立即分享:

Excel 中的自定义排序是一项非常有用的功能。 在本文中,我们将讨论如何使用 Excel VBA 自动更新范围内的自定义排序。

当您使用自定义排序时,您会发现这是 Excel 中一个了不起的功能。 但是,如果您经常使用此功能,您也可能会发现问题。 您将在一定范围内对某些数据和信息进行排序。 当您将其他数据和信息添加到范围中时,范围中的顺序不会自动更改。 下图显示了这种情况的示例。例如:

当您将新数据集添加到范围中时,它不会自动更改排名。 如果您仍想按照相同的标准对这个更大范围的新数据集进行排序,则需要再次执行自定义排序过程。 可以看到这样做很麻烦,尤其是需要不断更新工作表中的数据和信息的时候。 每次向范围中添加新信息时,都需要重新排序。 为了解决这个问题并快速完成您的任务,您可以继续阅读本文。

记录宏

当自定义排序的条件非常复杂时,你会发现很难直接写VBA代码。 因此,现在您可以先录制一个宏。 并且该宏中的代码可以在其他宏中使用。 记录代码的过程非常简单。

  1. 在录制宏之前,您需要在功能区中添加 VBA 选项卡。 在这里右键单击功能区中的任何选项卡。
  2. 然后在菜单中选择“自定义功能区”。自定义功能区
  3. 现在在“Excel选项”窗口中,选中“主选项卡”列表中的“开发人员”选项。开发商
  4. 之后,在窗口中单击“确定”。 因此,您已在功能区中添加了选项卡。
  5. 现在您将回到工作表。 单击您添加的选项卡“开发人员”。
  6. 然后单击工具栏中的“录制宏”按钮。 这样,就会弹出“录制宏”窗口。记录宏

另一方面,你也可以点击工作表底部的小按钮来代替上面的6个步骤。记录宏

  1. 现在在“录制宏”窗口中,将名称输入到第一个文本框中。 如果需要,分配一个快捷键。 然后根据需要添加描述。设置宏
  2. 接下来点击“确定”。 因此,宏开始记录您所做的每个操作。
  3. 在工作表中选择您需要排序的范围。
  4. 单击选项卡“主页”。
  5. 然后单击功能区中的“排序和筛选”按钮。
  6. 在下拉列表中,选择“自定义排序”选项。自定义排序
  7. 在“排序”窗口中,根据需要设置排序条件。 所有的动作都将记录在宏中。排序

录制宏时,不要进行额外的步骤。 否则这些步骤也将被记录下来。 而这会给后面的部分带来麻烦。

  1. 在“排序”窗口中完成设置后,单击“确定”保存设置。
  2. 现在再次单击功能区中的“开发人员”选项卡。
  3. 然后单击“停止录制”按钮。 当工作表处于录制宏的状态时,按钮会变为“停止录制”。停止录制

您也可以单击工作表底部的按钮停止录制宏。 这样,您就完成了录制。 所有排序标准都已保存在宏 1 中。

使用 Excel VBA 宏

在这一部分中,我们将向您展示如何使用 VBA 宏来更新工作表中的自定义排序。 您还将在这部分中使用录制的宏。

  1. 单击功能区中的“开发人员”选项卡。
  2. 然后单击工具栏中的“Visual Basic”按钮。 相反,您也可以按键盘上的“Alt +F11”按钮来替换这 2 个步骤。Visual Basic中
  3. 在 Visual Basic 编辑器中,双击“VBAProject”区域中的工作表。 在此工作表中,您需要更新自定义排序。 而在您的实际文件中,您需要双击相应的工作表。
  4. 现在将以下代码输入该区域。
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
  1. 然后在上面两个VBA语句之间输入如下代码。
Application.ScreenUpdating = False
If Not Intersect(Target, Range("A1:C13")) Is Nothing Then

End If

这里估计范围。 销售量将有 12 个月,我们在标题的第一行输入范围“A1:C13”。 您也可以根据您的实际工作表将范围输入到代码中。

  1. 这一步,在编辑器中打开模块1。 本模块中的代码是您之前制作的自定义排序的过程。 你可以看到使用录制宏的功能可以节省你很多时间。
  2. 现在复制此模块中的主要部分。复制
  3. 然后双击“VBAProject”部分中的目标工作表。
  4. 之后,将代码粘贴到 IF-END IF 代码中。
  5. 然后根据需要修改代码中的范围。 录制的宏有点复杂和多余。 您也可以根据需要进行修改。 因此,完整的 VBA 代码将是这样的:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.ScreenUpdating = False
  If Not Intersect(Target, Range("A1:C13")) Is Nothing Then
    With ActiveWorkbook.Worksheets("Sheet1").Sort
      .SortFields.Clear
      .SortFields.Add Key:=Range("B2:B13"), _
         SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
      .SortFields.Add Key:=Range("C2:C13"), _
         SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    End With
 
    With ActiveWorkbook.Worksheets("Sheet1").Sort
      .SetRange Range("A1:C13")
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
    End With
  End If
End Sub

我们在代码中添加另一个 WITH-END WITH。 因此,它会比记录结果更清楚。 如果您有其他要求,也可以根据您的实际需要进行修改。 修改代码时需要小心。 否则你会在工作表中产生一些错误的结果。

  1. 现在您已经在编辑器中完成了 VBA 代码。 您可以返回工作表并测试结果。 当您将下个月和相应的数字添加到范围内时,自定义排序将自动刷新。《测试》(Test)

因此,您无需每次在目标范围内输入新元素时都手动更新自定义排序。但另一方面,您需要将此工作簿保存为启用宏的 Excel 文件。否则,如果保存为普通文件,您将丢失代码。

我们将为 Excel 腐败受害者提供援助

我们都知道 Excel 的功能非常强大,它可以帮助您快速轻松地完成工作。 但 Excel 应用程序还远非完美。 有时 Excel 会由于许多不同的原因而损坏。 一旦 Excel 损坏,您将无法通过此应用程序完成您的任务。 为了更好地工作,您将需要尽快修复它。

我们公司多年来一直致力于恢复领域,尤其是Excel恢复。 因此,您可以向我们的技术人员寻求帮助。 凭借多年的经验,我们可以轻松找出导致文件损坏的原因。 并更好地帮助你 修复Excel xlsx文件损坏,我们开发了第三方工具。 这个工具很容易操作,你不需要担心隐私问题。

作者简介:

Anna Ma 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 Word docx 错误 和 outlook 修复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。