【问题标题】:excel formula with multiple criteria (match and index?)具有多个条件的excel公式(匹配和索引?)
【发布时间】:2018-06-08 21:15:39
【问题描述】:

我有一个具有以下结构的表格,它显示日历条目:

|     Title     |  Description  |   StartTime   |    EndTime    |      User      |

.

我想创建一个具有以下结构的新表,该表将显示所有用户及其在第一行给出的日期的计划。:

|    User    |  Date1  |  Date2  |  Date3  |  …

.

我的问题是这样的:

如果 Date1(或 Date2 ..)在开始日期和结束日期之间,我想在第二个表中显示行的标题。所以我需要一个可以写在所有单元格中的excel公式。

.

我可以写一个这样的 SQL 语句(我知道它的语法不正确,但我想展示我需要的东西):

SELECT Title 
FROM Table1, Table2 
WHERE Date1 > StartDate AND Date1 < EndDate and User.Table1 = User.Table2

......

你能帮帮我吗?

【问题讨论】:

  • 您要使用excel(如您的标签)还是sql(如您的示例)?在 SQL(和/或 Access)中,您所描述的内容称为 crosstab 查询 Query`(或在 Excel 中,或者可能是 pivot-table。如果没有一些示例数据,我无能为力。(请参阅 @987654325 @.)
  • 我想写一个excel公式。我写 sql 只是为了清楚我想要什么样的查询/公式。
  • @ashleedawg 我添加了两张数据的截图

标签: excel excel-formula


【解决方案1】:

想不出一个简单的方法来做到这一点。

首先,如果有两个标题属于同一用户的同一日期段,您打算如何显示它?

在我看来,这看起来像是将汇总表逆向工程为更详细的表,您需要在其中按日期输入各个列 - 填写所有缺失的数据,然后一个简单的数据透视表就可以完成工作。

首先,您只需要保留一个日期字段,然后填充开始日期和结束日期之间的所有日期。

从这里: *列出两个标题 - 用户 ak 的 a 和 b 来说明一个用户在同一日期段中出现多个标题的问题。

为此: - 填充标题将出现的所有日期

然后只需旋转新范围即可获得:

我们可以看到它发生在哪个日期,而不是列出标题。轻松复制并粘贴基准值作为值,然后将标题计数“1”替换为标题名称“a”以获得以下信息:

假设您希望用户连接标题,只需复制蓝色部分,并获得以下最终结果:

【讨论】:

  • 嗨@Ames,感谢您的回答!我已经考虑过了,但是我的数据已经太大了,如果我填充它们,那将是巨大的,可能 excel 无法保存。如果我找不到任何其他解决方案,我会尝试这个:)
【解决方案2】:

您有 Power Query 吗?如果您有 Excel 2016 版本,您可以在以前的版本中下载它(获取和转换)。这是一个免费的插件。

  1. 转到数据
  2. 从表/范围中选择
  3. 好的

它将出现查询编辑器,您可以:

  1. 将数据类型更改为“日期”

  1. 转到添加列
  2. 还有 7. 在日期选项中选择“减去天数”

  1. 修复否定结果Duration.Days([End] - [Start])

  1. 添加“自定义列”List.Dates([Start],[Subtraction]+1,#duration(1,0,0,0))

  1. 点击角落(双箭头)并选择“扩展至新行”

  1. 选择并删除不需要的列

  1. 去转换
  2. 点击“透视列”
  3. 在“高级选项”中选择“不聚合”
  4. 好的
  5. 回家选择“关闭并加载”

最后你会得到一张包含新信息的新表格。

您可以添加一些过滤器来查看特定时间段...

令人惊奇的是,您可以附加所有想要的数据,然后只需在绿色表格中单击鼠标右键并刷新,您就可以修复数据了。

如果您只想在“高级编辑器”中复制和粘贴,这是查询

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Title", type text}, {"Start", type date}, {"End", type date}, {"User", type text}}),
    #"Inserted Date Subtraction" = Table.AddColumn(#"Changed Type", "Subtraction", each Duration.Days([End] - [Start])),
    #"Added Custom" = Table.AddColumn(#"Inserted Date Subtraction", "Days", each List.Dates([Start],[Subtraction]+1,#duration(1,0,0,0))),
    #"Expanded Days" = Table.ExpandListColumn(#"Added Custom", "Days"),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Days",{"Start", "End", "Subtraction"}),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns", {{"Days", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns", {{"Days", type text}}, "en-US")[Days]), "Days", "Title")
in
    #"Pivoted Column"

【讨论】:

  • 嗨@virtualdvid,感谢您的回答!正如我所提到的,我有一个非常大的数据。如果我延长天数,那将是巨大的,并且可能 excel 无法保存所有天数(因为行数)。但如果我找不到任何其他解决方案,我会试试这个。再次感谢您!
  • 哦,我明白了,嗯,您可以添加一些列来提取 [year]、[Month] 和 [Day],然后再进行旋转并将它们用作过滤器。在这种情况下,您可以过滤 Excel 中的范围并查看正在运行的标题。查看最后一张图片...
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多