我正在尝试自动化excel,以便它允许我显示来自另一个符合某个条件的选项卡的所有记录。
我的源表是(分析标签):
我根据列名称命名了所有范围。例如,命名范围Vehicle
是
=Analysis!$A$2:$A$3000
所有范围都转到第3000行。
下拉列表是单元格C1,车辆名称和要使用的过滤器。
我的目标工作表如下:
在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。我需要在每天数据发生变化时自动执行此操作。
更新
答案 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)