获取符合条件的所有行并显示在新工作表中

时间:2013-05-31 11:29:22

标签: excel vba excel-vba

我正在尝试自动化excel,以便它允许我显示来自另一个符合某个条件的选项卡的所有记录。

我的源表是(分析标签): enter image description here

我根据列名称命名了所有范围。例如,命名范围Vehicle=Analysis!$A$2:$A$3000

所有范围都转到第3000行。

下拉列表是单元格C1,车辆名称和要使用的过滤器。

我的目标工作表如下: enter image description here

在Cell B3中,我有以下数组公式,我试图适应失败。 =IF(COUNTIF(vehicle,DropDown)<ROWS($A$1:$A1),"",INDEX(DataTable,LARGE(IF(DropDown=Litres,ROW(INDIRECT("1:"&ROWS(vehicle)))),ROW(Analysis!$A1)),MATCH(Analysis!A$3,Analysis!$A$3:$E$3,0)))

这不能正常工作。任何帮助表示赞赏。

总结一下,我想从Tab分析中返回所有行,其中vehicle等于单元格C1。我需要在每天数据发生变化时自动执行此操作。

更新 enter image description here enter image description here

2 个答案:

答案 0 :(得分:3)

您需要使用VBA。执行此操作的一种好方法是添加自定义函数,然后在另一个单元格中使用它。例如,在单元格D1中放置=MyFunction(C1)。然后在VBA中创建一个模块并添加以下内容(可能包含一些错误,因为我没有测试它):

Function MyFunction(parVal As String) As String
    'Clear what is there now
    ActiveSheet.Range("A3", "I3000").ClearContents

    'Add new rows
    varRange = Sheets("Analysis").UsedRange
    varCount = 2
    For varRow = 1 To varRange.Rows.Count
        If varRange(varRow, 1) = parVal Then
            varRange(varRow, 1).EntireRow.Copy
            varCount = varCount + 1
            ActiveSheet.Cells(varCount, 1).EntireRow.Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    Next varRow
    MyFunction = "Found " & (varCount - 2) & " rows"
End Function

答案 1 :(得分:1)

其他信息来自:http://www.cpearson.com

放置代码的地方

UDF的代码应放在标准代码模块中,而不是其中一个Sheet模块,而不是ThisWorkbook模块。在VBA编辑器中,转到“插入”菜单并选择“模块”。这将在项目中插入一个新的代码模块。模块可以包含任意数量的函数,因此您可以将许多函数放入单个代码模块中。您可以通过按F4键显示“属性”窗口并将“名称”属性更改为您想要的任何内容,从而将模块的名称从Module1更改为更有意义的名称。

只需使用函数名称即可从同一工作簿中调用函数。例如:

= RectangleArea(12,34)