我一直在寻找并且努力寻找为什么我的公式不起作用。
在我发布我的公式之前,我需要解释一下我正在做什么,这有点复杂(至少,这是我能想到的唯一方法)。
**背景**
我需要创建一个关于我部门预算的电子表格(按类别排序),目前,当我从我们的财务系统下载收入/支出时,它只会输出按日期排序的数据行(原始数据)。
目标 1- 将导出的原始数据自动分类,然后表格清楚地显示每个类别的花费已实现
目标 2- 将导出的原始数据分类,并仅根据用户的选择显示特定月份卡住
原始数据导出示例:
表格:2015 年数据
Date | Description of Expense | Amount | Codes
Jan-15 | Workshop for employee | 100000 | WRKS
Jan-15 | Workshop for employee | 100000 | WRKS
Feb-15 | Sponsors for employee | 200000 | SPON
Feb-15 | Sponsors for employee | 100000 | SPON
Feb-15 | Workshop for employee | 300000 | WRKS
Mar-15 | Sponsors for employee | 100000 | SPON
如果我们以上面的表格为例,说明我从财务系统导出时获得的原始数据(名为“Data2015”)(我将其转换为 Excel 中的表格)。
为了实现目标 1,我所做的就是创建一个新表格(名为“类别”),其中包含类别的描述。
表格:类别
Categories | Codes
Workshop | WRKS
Sponsors | SPON
然后创建另一个表(名为“预算”)如下所示:
表格:预算
Categories | Codes | Amount
Workshop | WRKS | 500000
Sponsors | SPON | 400000
我在预算表的金额列中使用的公式是
=SUMIF(Data2015[Codes],[@Codes],Data2015[Amount])
所以这个公式帮助我实现了目标1。
为了实现目标 2,我尝试了以下方法。
创建了一个表格来捕获用户想要查看的月份:
表格:条件
Month | X | Background
Jan-15 | x | 1/01/2015
Feb-15 | x | 1/02/2015
Mar-15 | x | 1/03/2015
如果用户想查看特定月份的支出,请在 X 列中输入“x”。
我在 Background 列中使用了这个公式:
=IF([@X]="x",TEXT([@Month], "d/mm/yyyy"),"")
然后我想像以前一样进一步将月份过滤为类别。
与上面的类别表类似,但根据用户想要查看的内容针对特定月份。
我设法让它工作,但只针对 1 行,而不是整个表格。
我希望您检查我的公式并让我知道我可能做错了什么,或者甚至我实现目标 2 的逻辑也不正确。您的见解将非常有帮助,对于非常混乱的情况,我深表歉意,我想不出更简单的解释方式。
我创建了另一个电子表格,它将使用以下公式模拟 Data2015 工作表
=IF(ISNUMBER(SEARCH(Month_View!$D$5, $A5)),Data2015[@Account], IF(ISNUMBER(SEARCH(Month_View!$D$6,$A5)),Data2015[@Account],""))
Month_View! 是表格:条件并且 $D$5 表示 1 月 15 日,$D$6 表示 2 月 15 日,依此类推。
如果此公式检测到 A5(日期所在的列)与表格:2015 年数据的日期列(在同一行,因此有@)。
到目前为止一切都很好,只要我在单元格 A5 中输入“Jan-15”或“Feb-15”,它就可以正常工作。为了根据用户的偏好填充此单元格,我使用了以下公式(但不会产生我想要的结果):
=IF(Condition[Background]=TEXT(Data2015[@Date],"d/mm/yyyy",Data2015[@Date],"")
因此,对我来说,该公式旨在执行以下操作:
如果日期数据2015表与以下日期/值之一匹配(格式为“d/mm/yyyy”)健康)状况名为“背景”的列(仅当用户在他们想要查看的月份中输入“x”时才会显示),然后用以下值填充此单元格数据2015的日期列。
如果单元格中填充了“Jan-15”或“1/01/2015”,那么表格的其余部分也会填充,然后我可以使用它们进一步按类别进行筛选,并使用我用于实现目标 1 的公式。
但单元格中没有填充“Jan-15”或“1/01/2015”,而是显示空白或#VALUE!
它似乎引用了健康)状况带有@的表格也是我不需要的。
尽管这很令人困惑...如果你能理解我想要实现的目标,任何见解或讨论都会有所帮助。也许我的大脑在这个阶段已经超负荷了。
答案1
我会使用 Excel 内置的表格功能 - 无需公式。选择您的范围并按 Ctrl-T 开始。
这将打开顶行的过滤器 - 您/您的用户可以使用它们按年份和/或月份过滤日期。
对于总计功能,请添加总计行(使用表格工具/设计功能区),然后在该行中,您可以选择要对每列进行什么聚合(总计、计数等)。这将自动调整以遵循您的筛选。
答案2
好的,我已经解决了!
以下是我使用的公式:
=SUM(SUMIF(Data2015BG1[Category],[@Codes],Data2015GB1[Amount]))
*PS:如果参考资料与我的问题中给出的例子不同,请见谅。
Data2015BG1 工作表包含公式,可检测触发器列中是否有“x”,并根据所选月份显示必要的数据。我使用的公式是:
=IF(ISNUMBER(MATCH(TEXT(Data2015[@Period],"d/mm/yyyy"),Condition2015A[Background],0))=TRUE,Data2015[@Period],"")
希望这说得通,我本来会发布图片来向你展示我所实现的视觉效果,因为本质上我所做的就是让任何人都能更轻松地使用,但我还没有足够的声誉来发布图片!也许下次吧。
过滤器本来可以起作用,但是我为那些在 Excel 方面没有太多经验的人创建了这个功能,所以即使要求他们进行过滤也有点过分(...我知道,我知道...)