Excel 将数据从一张图纸(数据)复制到另一张图纸(摘要)

Excel 将数据从一张图纸(数据)复制到另一张图纸(摘要),excel,vba,Excel,Vba,我试图用另一个工作表数据中的大型数据转储中的数据填充一个工作表摘要 这将发送给我的组织内的预算负责人,他们将能够过滤他们的成本中心并查看他们的员工群体 摘要工作表 其结构如下: | | A | B | C | D | | 1 | Please choose a cost centre: [Textfield] | | 2 | | | |

我试图用另一个工作表数据中的大型数据转储中的数据填充一个工作表摘要

这将发送给我的组织内的预算负责人,他们将能够过滤他们的成本中心并查看他们的员工群体

摘要工作表 其结构如下:

|   |    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]
数据工作表 虽然有3600行而不是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,如何使用数据工作表中的两行数据填充汇总工作表?几乎就像你可以通过一个透视表。这是通过公式实现的还是需要VBA?

方法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。

查看高级过滤器。不需要vba,它就可以做你想做的事情。向我们展示你迄今为止所做的努力。@ExcelHero使用高级过滤器上的“复制到”功能将允许你将过滤后的数据复制到另一张工作表中。您只需从希望数据进入的工作表启动过滤器。至少我是这样理解的@巴里布雷德有两件事。首先,您的数据表中有三条记录,成本中心为3000,但您的问题是询问这两行?其次,您询问是否可以使用公式完成此操作,但您已使用excel vba标记了问题。你能澄清你的问题吗?非常感谢大家。我对上述问题补充了更多细节。值得注意的是,这个用例以及数据表包含大约3600行的事实@我会试试你的解决方案。看起来很有希望。鉴于我上面添加的细节,希望仍然可行。@BarryBlade进展如何?你不仅仅是Excel的英雄……你是我的!VBA的工作方式很有魅力。我没有尝试过这个公式,因为我认为VBA更干净