我正在尝试使用另一个工作表(数据)中保存的大型数据转储中的数据填充一个工作表(摘要)。
这将发送给我的组织内的预算持有人,他们将能够过滤他们的成本中心并查看他们的员工组。
摘要工作表
其结构如下:
| | A | B | C | D |
| 1 | Please choose a cost centre: [Textfield] |
| 2 | | | | |
| 3 | POSITION | STAFF GROUP | PAY GRADE | |
| 4 | [Data will go here]
| 5 | [Data will go here]
| 6 | [Data will go here]
数据工作表
其结构如下(尽管有3,600行而不是4行):
| | A | B | C | D |
| 1 | POSITION | STAFF GROUP | PAY GRADE | COST CENTRE |
| 2 | Typist | A&C | Junior | 3000 |
| 3 | Manager | A&C | Mgmt | 3200 |
| 4 | Typist | A&C | Junior | 3000 |
| 5 | Receptionist | A&C | Junior | 3000 |
考试问题
使用文本字段选择成本中心3000,如何使用 Data 工作表中的两行数据填充摘要工作表?几乎就像你可以通过 pivot 表一样。这可以用公式完成还是需要VBA?
答案 0 :(得分:0)
方法#1
这是实现过滤器的公式方式。
在摘要表上,选择范围A4:C22
。
单击工作表顶部的公式栏并粘贴以下公式:
=IFERROR(INDEX(Data!A2:C22,SMALL(IF($D$1=Data!$D$2:$D$22,ROW(Data!$D$2:$D$22)-ROW(Data!$D$2)+1),ROW()-3),{1,2,3}),"")
这是一个数组公式,必须使用 Ctrl + Shift + Enter 确认。
现在,当您更新单元格D1中的值时,将显示已过滤的结果。
注意:这假设您的过滤结果不会超过20个。如果该假设不正确,那么在确认数组公式之前,您需要选择更深的范围。
注意:这假设数据表上的数据不会比第22行向下延伸。如果数据有,则将公式中22
的引用更改为更大的数字。
方法#2
这是VBA解决方案。
将以下程序放在标准代码模块中:
Public Sub Barry()
Const DATA = "data!a1"
Const OUTPUT = "a3:c3"
Const FILTER_VALUE_ADDRESS = "d1"
Const FILTER_COLUMN = 4
Dim rCrit As Range, rData As Range
Set rData = Range(DATA).CurrentRegion
Set rCrit = rData.Resize(2, 1).Offset(, rData.Columns.Count + 2)
rCrit(1) = rData(1, FILTER_COLUMN): rCrit(2) = Range(FILTER_VALUE_ADDRESS)
rData.AdvancedFilter xlFilterCopy, rCrit, Range(OUTPUT)
rCrit.Clear
End Sub
切换到摘要表并按Alt-F8以显示宏对话框。
运行Barry
。