我正在研究如何在VBA的帮助下创建快捷方式。宏基本上允许我根据单元格的值过滤范围。我在互联网上找到了这个宏
Public Sub FilterOnCellValue()
Dim nField As Long
With ActiveCell
nField = .Column - .CurrentRegion.Cells(1).Column + 1
.CurrentRegion.AutoFilter Field:=nField, Criteria1:=.Value
End With
End Sub
代码工作正常,但我很难理解这个家伙是如何创造的。所以我到目前为止所知道的是这些人正在创建一个变量。但由于某种原因,变量不是字符串格式,而是长期"当我根据单元格中的文本进行过滤时,代码可以正常工作。我认为那个长期只能用于数字,如果我错了就纠正我(我认为我是:))。其次。怎么了.column - .currentregion. cells.....+1
?我真的不知道他在那里做了什么。
非常感谢这里的一些帮助。到目前为止,论坛对我来说非常有用。
答案 0 :(得分:1)
理解任何事情的秘诀就是将其分解为部分
无论如何,documentation of Autofilter表示
Public Sub FilterOnCellValue()
Dim nField As Long
With ActiveCell
'.Column: Column Number i.e A=1,B=2 etc
'.CurrentRegion.Cells(1).Column: Gets the col No of the firstcell of the data region
nField = .Column - .CurrentRegion.Cells(1).Column+1
'Autofilter takes column number as the parameter
'see example below
'nField: gets the col number of the filter value within the region
' leftmost field is 1 hence +1
.CurrentRegion.AutoFilter Field:=nField, Criteria1:=.Value
End With
End Sub
例如,如果您的数据采用这种格式
A B
1 ID Value
2 1 Apple
3 2 Orange
4 3 Banana
5 4 Apple
6 5 Banana
假设您单击单元格B5(Apple)并运行宏
宏首先获取所选单元格的列号= 2
检查当前区域(A1:B6)第一个单元格(ID)所在的列= 1
计算步骤1 - 步骤2中的值以获得所选值所在的列,相对于区域(A1:B6),想法是使用.column作为参考来查找列号区域结果中所选值的选择:2-1 + 1 = 2
过滤区域A1:B6中步骤3(在我们的示例值为2)中传递的列号,用于所选值(Apple)
希望这有帮助