excel - 基于单元格值的字段
问题描述
我需要的是 VBA 中自动过滤器的变量字段
因此,我目前正在构建一个基于数据的数据,包括他们需要的几项业务和培训。我正在尝试创建一个宏,该宏将基于特定单元格来确定要排序的列,然后在排序后复制范围。我最初打算为每个业务做一个按钮,但这将包括 60 多个按钮,因为有 60 行。下面是一个单一业务的代码,我需要的是基于单元格范围 B85 的自动过滤字段
Sub SMBstj()
'
' SMBstj Macro
'
'
Application.ScreenUpdating = False
Sheets("Training Data").Select
ActiveSheet.Range("$A$2:$CF$116").AutoFilter Field:=8, Criteria1:="<>"
Range("A3:G3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Report").Select
Range("C85").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Training Data").Select
Range("I2").Select
ActiveSheet.Range("$A$2:$CF$116").AutoFilter Field:=8
Sheets("Report").Select
Application.ScreenUpdating = True
End Sub
解决方案
为了在第二行中查找字段值,您需要使用以下代码:
Dim strField As String
With Sheets("Training Data")
strField = Application.Match(.Range("B85").Value, .Range("2:2"), 0)
.Range("$A$2:$CF$116").AutoFilter Field:=strField, Criteria1:="<>"
End With
示例输出:
编辑:
如果单元格 B85 在另一个工作表中,则需要更新代码如下:
Match(Sheets("Other Sheet").Range("B85").Value ...
待测试:
Dim varField As Variant
With Sheets("Training Data")
varField = Application.Match(Sheets("Other Sheet").Range("B85").Value, .Range("2:2"), 0)
If IsNumeric(varField) Then
Call .Range("$A$2:$CF$116").AutoFilter(Field:=varField, Criteria1:="<>")
Else
Call MsgBox(Prompt:=Sheets("Other Sheet").Range("B85").Value & " not found!", Buttons:=vbExclamation + vbOKOnly, Title:="Error")
End If
End With