使用excel vba查找匹配值

时间:2013-09-13 22:04:48

标签: excel-vba vba excel

不使用excel内置过滤器或数据透视表功能,我想使用vba提取一些结果。考虑下面的例子:给定数字A和B中的数据,我希望能够在C1中输入“a”并使用vba在列D中输入B列中的所有相应值(1,3,5)。如果我输入“b”,我得到2,6,依此类推。谢谢。 enter image description here enter image description here

3 个答案:

答案 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

因为它是工作表代码,所以很容易安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码 - 这会打开一个VBE窗口
  3. 粘贴内容并关闭VBE窗口
  4. 如果您有任何疑虑,请先在试用工作表上试用。

    如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要了解有关宏的更多信息,请参阅:

      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))

<强>截图 enter image description here