gpt4 book ai didi

excel - 使用合并单元格过滤工作表中的数据

转载 作者:行者123 更新时间:2023-12-04 22:27:54 25 4
gpt4 key购买 nike

我正在尝试使用第 4 行作为列标题过滤一些数据。这里的问题是我有一些单元格在第 2 行和第 3 行之间合并。当我尝试过滤第 4 行时,VBA 代码过滤第 2 行而不是第 3 行。我正在记录为 Row 打开过滤器的几个步骤3,然后在某些列中选择一些条件进行过滤。这是由 excel VBA 记录器生成的代码。

代码:

Sub Macro1()
Rows("3:3").Select
Range("D3").Activate
Selection.AutoFilter
ActiveSheet.Range("$A$3:$G$8").AutoFilter Field:=1, Criteria1:=Array("1", _
"3", "4"), Operator:=xlFilterValues
ActiveSheet.Range("$A$3:$G$8").AutoFilter Field:=7, Criteria1:="M"
End Sub

这段代码是如何产生的以及数据是如何结构化的:
我准备了一个简单的工作表,它或多或少面临同样的困难。数据的结构与以下屏幕截图中捕获的方式相同。

enter image description here

我所做的只是选择第 3 行,打开过滤模式,并在列中进行一些过滤。这就是生成 vba 代码的方式。

enter image description here

但是,当我运行针对数据生成的相同 VBA 代码时,我得到了这个结果。

enter image description here

我们可以看到它以第 2 行而不是第 3 行作为标题。这里有什么问题?

最佳答案

发生这种情况是因为当您告诉宏选择第 3 行时,正在选择第 2 行和第 3 行。

检查一下,使用 F8 和 Rows("3:3").Select 之后调试您的代码您将看到两行都被选中。

为了避免这种错误和很多错误,你不应该使用 .Select.Activate
方法如下:

Option Explicit
Sub Macro1()

With ThisWorkbook.Sheets("Datos") 'change the name to your working sheet
If .AutoFilterMode = True Then .AutoFilterMode = False 'first check that there are no filters
.Range("$A$3:$G$8").AutoFilter Field:=2, Criteria1:=Array("1", _
"3", "4"), Operator:=xlFilterValues
.Range("$A$3:$G$8").AutoFilter Field:=7, Criteria1:="M"
End With

End Sub

此外,当我们使用它时,使用 Option Explicit将强制您声明变量以避免错误。还有一个 extended answer关于如何避免使用选择。

关于excel - 使用合并单元格过滤工作表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56072045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com