我正在尝试做一些我认为相当简单的事情,但到目前为止我还没有找到一种没有过于复杂的公式来实现它的方法。
我的 table1 看起来如下:
Personal ID Start End Code
1 1/2/2023 1/5/2023 V
2 1/1/2023 1/2/2023 S
1 1/10/2023 1/15/2023 S
我想要从该表中创建以下内容:
Personal ID 1-Jan 2-Jan 3-Jan 4-Jan 5-Jan 6-Jan 7-Jan 8-Jan 9-Jan 10-Jan 11-Jan 12-Jan 13-Jan 14-Jan 15-Jan
1 V V V V S S S S S S
2 S S
到目前为止我发现的唯一解决方案是做这样的事情:
=IFERROR(
LOOKUP(2,
1/(FILTER(
FILTER(Tabel1,
Tabel1[[Personal ID]:[Personal ID]]=$A2),
Tabel1[#Headers]="Start")<=B$1)/
(FILTER(
FILTER(Tabel1,
Tabel1[[Personal ID]:[Personal ID]]=$A2),
Tabel1[#Headers]="End")>=B$1),
FILTER(
FILTER(Tabel1,
Tabel1[[Personal ID]:[Personal ID]]=$A2),
Tabel1[#Headers]="Code")),
"")
代码完全按照要求执行,但我需要对整个年份和数百个 ID 重复此代码,这会导致 Excel 完全崩溃。我想知道是否有更复杂的方法。
PS:我很确定可以使用数据透视表来执行此操作,但问题是我想避免手动按刷新按钮
答案1
我会尝试类似
{=TEXTJOIN("";1;IF((Tabel1[Personal ID]=$A2)*(Tabel1[Start]<=C$1)*(Tabel1[End]>=C$1);Tabel1[Code];""))}
也许包裹在两个 SUBSTITUTE() 或 REGEX() 中以替换VS
和SV
使用V
(或者仅使用条件格式突出显示具有两个或更多字符的单元格)
不幸的是,我无法检查公式是否在 Excel 中有效 - 我的版本还不知道TEXTJOIN() 函数. 也许应该
{=TEXTJOIN("";1;IF((Tabel1[Personal ID]=$A2)*(Tabel1[Start]<=C$1)*(Tabel1[End]>=C$1)=1;Tabel1[Code];""))}