使用一系列值和解析文本在 vlookup 的结果中进行搜索
Searching within the result of a vlookup using a range of values and parsing text
我的目标:
从 vlookup 的结果中解析 MM/DD 日期,以便它可以用于项目计划
背景:
- vlookup 结果包含以“•”分隔的多个值(我不需要所有值)
- 我要解析的值并不总是在 vlookup 结果中的相同位置(否则我可以使用 RIGHT 公式)
- 我要检索的值数量有限(而且我已经知道)
- 我要检索的值包含一些带有日期范围的文本;我只想要日期范围内的前四个值 (MM/DD)
- 我想用一个公式实现所有这些,结果在一个单元格中
当前公式
我一直在研究但不起作用的公式是:
=ARRAYFORMULA(if(iserror(search(Iterations!D2:D7,(VLOOKUP(A2,'Results {2596503}'!$C:$L3,3)))),,))
编辑
(根据您在 sheet 上的注释:“我想完全删除 col b 并嵌套在 col c 和 d 的公式中”)
您可以调整范围 B2:B
,方法是将其替换为 B2
中已有的公式。
调整后的新公式将变为
=ArrayFormula(IFNA(SPLIT(REGEXEXTRACT(VLOOKUP(ARRAYFORMULA(sort(unique(data!A2:A))),data!$A:$C,2),"\d+\/\d+-\d+\/\d+"),"-")))
原回答
您可以使用以下公式:
=ArrayFormula(IFNA(SPLIT(REGEXEXTRACT(B2:B,"\d{2}\/\d{2}-\d{2}\/\d{2}"),"-")))
确保将结果格式化为Date
。
(请根据需要调整范围)
使用的函数:
我在 B2 广告 C2 中设置了一个名为“Erik Help”的 sheet,其中包含以下公式:
=ArrayFormula(IF(A2:A="","",MID(VLOOKUP(A2:A,data!A2:B,2,FALSE),FIND(REGEXEXTRACT(VLOOKUP(A2:A,data!A2:B,2,FALSE),"[0-9]-[0-9]"),VLOOKUP(A2:A,data!A2:B,2,FALSE))-4,5)))
和
=ArrayFormula(IF(A2:A="","",MID(VLOOKUP(A2:A,data!A2:B,2,FALSE),FIND(REGEXEXTRACT(VLOOKUP(A2:A,data!A2:B,2,FALSE),"[0-9]-[0-9]"),VLOOKUP(A2:A,data!A2:B,2,FALSE))+2,5)))
分别
它们可能比实际需要的要长,但您没有在 B 列中分享实际结果,也没有列出 B 列中除了日期之外可能出现的符号;所以我试图解释可能出现在 B 列中日期跨度以外的地方的连字符或正斜杠。
您的分析 sheet 还显示了一个对数据结果进行排序的公式!A:A。因此,即使在您的示例中,原始数据顺序恰好与分析中的顺序相同!A:A,这不是给定的(同样,基于您的公式)。所以VLOOKUP也是必须的
您没有说明是否需要进一步使用这些返回的date-snippets计算,或者您是否只需要查看 他们。所以“Erik Help”中生成的结果是文本。
如果您想要可用 numbers/dates,您可以在公式中添加更多需要控制的问题,因为您将只提取月和日,而不是年。现在很好。但是当要提取的日期范围是“12/28-01/13”时呢?如果你只是让这些 values/dates,它们将 both 分配给当前年份。所以这里的结束日期会早于开始日期。
因此,我添加了第二个 sheet,“Erik Help 2”,其中包含扩展的公式来解释这些情况,同时仍然返回您想要的日期格式作为实际日期,可以是用于计算。
尝试:
=ARRAYFORMULA(IF(A2:A="",,IFNA(TEXT(SPLIT(REGEXEXTRACT(
VLOOKUP(data!A2:A, data!A:C, 2), "\d+/\d+-\d+/\d+"), "-"), "mm/dd"))))
我的目标:
从 vlookup 的结果中解析 MM/DD 日期,以便它可以用于项目计划
背景:
- vlookup 结果包含以“•”分隔的多个值(我不需要所有值)
- 我要解析的值并不总是在 vlookup 结果中的相同位置(否则我可以使用 RIGHT 公式)
- 我要检索的值数量有限(而且我已经知道)
- 我要检索的值包含一些带有日期范围的文本;我只想要日期范围内的前四个值 (MM/DD)
- 我想用一个公式实现所有这些,结果在一个单元格中
当前公式
我一直在研究但不起作用的公式是:
=ARRAYFORMULA(if(iserror(search(Iterations!D2:D7,(VLOOKUP(A2,'Results {2596503}'!$C:$L3,3)))),,))
编辑
(根据您在 sheet 上的注释:“我想完全删除 col b 并嵌套在 col c 和 d 的公式中”)
您可以调整范围 B2:B
,方法是将其替换为 B2
中已有的公式。
调整后的新公式将变为
=ArrayFormula(IFNA(SPLIT(REGEXEXTRACT(VLOOKUP(ARRAYFORMULA(sort(unique(data!A2:A))),data!$A:$C,2),"\d+\/\d+-\d+\/\d+"),"-")))
原回答
您可以使用以下公式:
=ArrayFormula(IFNA(SPLIT(REGEXEXTRACT(B2:B,"\d{2}\/\d{2}-\d{2}\/\d{2}"),"-")))
确保将结果格式化为Date
。
(请根据需要调整范围)
使用的函数:
我在 B2 广告 C2 中设置了一个名为“Erik Help”的 sheet,其中包含以下公式:
=ArrayFormula(IF(A2:A="","",MID(VLOOKUP(A2:A,data!A2:B,2,FALSE),FIND(REGEXEXTRACT(VLOOKUP(A2:A,data!A2:B,2,FALSE),"[0-9]-[0-9]"),VLOOKUP(A2:A,data!A2:B,2,FALSE))-4,5)))
和
=ArrayFormula(IF(A2:A="","",MID(VLOOKUP(A2:A,data!A2:B,2,FALSE),FIND(REGEXEXTRACT(VLOOKUP(A2:A,data!A2:B,2,FALSE),"[0-9]-[0-9]"),VLOOKUP(A2:A,data!A2:B,2,FALSE))+2,5)))
分别
它们可能比实际需要的要长,但您没有在 B 列中分享实际结果,也没有列出 B 列中除了日期之外可能出现的符号;所以我试图解释可能出现在 B 列中日期跨度以外的地方的连字符或正斜杠。
您的分析 sheet 还显示了一个对数据结果进行排序的公式!A:A。因此,即使在您的示例中,原始数据顺序恰好与分析中的顺序相同!A:A,这不是给定的(同样,基于您的公式)。所以VLOOKUP也是必须的
您没有说明是否需要进一步使用这些返回的date-snippets计算,或者您是否只需要查看 他们。所以“Erik Help”中生成的结果是文本。
如果您想要可用 numbers/dates,您可以在公式中添加更多需要控制的问题,因为您将只提取月和日,而不是年。现在很好。但是当要提取的日期范围是“12/28-01/13”时呢?如果你只是让这些 values/dates,它们将 both 分配给当前年份。所以这里的结束日期会早于开始日期。
因此,我添加了第二个 sheet,“Erik Help 2”,其中包含扩展的公式来解释这些情况,同时仍然返回您想要的日期格式作为实际日期,可以是用于计算。
尝试:
=ARRAYFORMULA(IF(A2:A="",,IFNA(TEXT(SPLIT(REGEXEXTRACT(
VLOOKUP(data!A2:A, data!A:C, 2), "\d+/\d+-\d+/\d+"), "-"), "mm/dd"))))