Excel根据另一列中的值筛选列表

我正在使用VBA,我想返回属于一个特定ID的项目列表,我如何根据这个过滤列表?

例:

Col A | Col B 1 Apple 1 Banana 2 Apple 3 Apple 1 Coconut 

如果我要求过滤列A的值,其中列A = 1,我会得到{苹果,香蕉,椰子}

我怎样才能做到这一点?

一定要有一个“标题”行作为第一个,然后你可以使用AutoFilter(),如下所示:

 Option Explicit Sub main() Dim vals As Variant vals = GetValues(1) '<--| get the array with values corresponding to ID=1 End Sub 

它使用以下function:

 Function GetValues(ID As Variant) As Variant Dim iVal As Long Dim cell As Range With Range("A1", Cells(Rows.Count, 1).End(xlUp)) .AutoFilter Field:=1, Criteria1:=ID If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then With .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible) ReDim vals(1 To .Count) For Each cell In .Cells iVal = iVal + 1 vals(iVal) = cell.Offset(, 1).Value Next End With GetValues = vals End If .Parent.AutoFilterMode = False End With End Function 

如果你必须使用VBA,你可以像这样做,以获得值在不同的范围,

码,

 Sub d() Dim r As Range Dim item Dim rng As Range Dim lastrow As Long item = InputBox("Enter value") If IsNumeric(item) Then item = CInt(item) lastrow = Cells(Rows.Count, 1).End(xlUp).Row For Each r In Range("A2:A" & lastrow) If r = item Then If Not rng Is Nothing Then Set rng = Union(rng, r.Offset(, 1)) Else Set rng = r.Offset(, 1) End If Next r rng.Copy Range("C2").PasteSpecial (xlPasteValues) End Sub 

或者,如果您想过滤特定范围,则可以使用普通的旧式Auto Filter

码,

 Sub d() Dim lastrow As Long Dim item lastrow = Cells(Rows.Count, 1).End(xlUp).Row item = InputBox("Enter value") Range("A1:B1").AutoFilter Range("A2:B" & lastrow).AutoFilter Field:=1, Criteria1:=item End Sub