不使用excel内置过滤器或数据透视表功能,我想使用vba提取一些结果。考虑下面的例子:给定数字A和B中的数据,我希望能够在C1中输入“a”并使用vba在列D中输入B列中的所有相应值(1,3,5)。如果我输入“b”,我得到2,6,依此类推。谢谢。
答案 0 :(得分:2)
Sub GenerateMatches()
With ActiveSheet
FinalRowA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
InputLetter = ActiveSheet.Cells(1, 3)
NextRow = 1
For i = 1 To FinalRowA
If .Cells(i, 1) = InputLetter Then
.Cells(NextRow, 4) = .Cells(i, 2)
NextRow = NextRow + 1
End If
Next i
End With
End Sub
显然,你可以使这个更有活力和更快,但这应该完成工作。
答案 1 :(得分:0)
在工作表代码区域中输入以下事件宏:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim D1 As Range, K As Long
Dim N As Long, NN As Long
Set D1 = Range(Range("D1"), Range("D1").End(xlDown))
If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
Application.EnableEvents = False
v = Target.Value
K = 1
D1.Clear
NN = Cells(Rows.Count, "A").End(xlUp).Row
For N = 1 To NN
If v = Cells(N, "A").Value Then
Cells(K, "D").Value = Cells(N, "B").Value
K = K + 1
End If
Next
Application.EnableEvents = True
End Sub
因为它是工作表代码,所以很容易安装和自动使用:
如果您有任何疑虑,请先在试用工作表上试用。
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除宏:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使其正常工作!
<强> B.T.W。强>
你可以用公式而不是VBA做同样的事情 - 比如在steriods上的VLOOKUP!
答案 2 :(得分:0)
我知道当你说你不想使用过滤器或Pivots时。但是Formulas?
如果公式有可能,为什么VBA?
将此数组公式粘贴到Cell D1
并按 CTRL + SHIFT + ENTER 并将其拉下来。
=IF(ISERROR(INDEX($A$1:$B$7,SMALL(IF($A$1:$A$7=$C$1,ROW($A$1:$A$7)),ROW(1:1)),2)),"",INDEX($A$1:$B$7,SMALL(IF($A$1:$A$7=$C$1,ROW($A$1:$A$7)),ROW(1:1)),2))
<强>截图强>