我重新措辞了这个问题,因为一开始没有回应......也许它有点冗长。
我的原始数据如下。
注意 - 这只是测试数据,在我的文件中,它是根据公式创建的溢出范围(请参阅用于从溢出范围内的两个数据集创建笛卡尔积的公式对于该公式)
日期 | 文本 |
---|---|
2021 年 8 月 29 日 | A |
2021 年 8 月 29 日 | 乙 |
2021 年 8 月 29 日 | C |
2021 年 8 月 30 日 | A |
2021 年 8 月 30 日 | 乙 |
2021 年 8 月 30 日 | C |
我使用这些公式向数据添加 XML 标签(注意:该!null!
部分是我的问题所在):
日期: ="<a>" & IF($B$4:$B$9=OFFSET($B$4:$B$9,-1,0),"!null!",$B$4:$B$9) & "</a>"
文本: ="<b>" & $D$4:$D$9 & "</b>"
然后FILTERXML
将结果转换为两列溢出范围。
=LET(xml,"<y><x>" & TEXTJOIN("",FALSE,D3#,E3#) & "</x></y>",
x,"//x/a",
y,"//x/b",
CHOOSE({1,2},FILTERXML(xml,x),FILTERXML(xml,y)))
我如何更改!null!
实际空单元格的位置标记?
""
,,"�"
以及"<a></a>"
我尝试过的任何其他方法都会返回#VALUE!
错误。
回答:
@HasanNahiyanNobel 给出的答案让我想到使用SUBSTITUTE
。 它本身会导致日期显示为其数值,并且格式化单元格不会影响这一点。 使用提供日期排序的TEXT
周围的格式可以解决该问题。FILTERXML
我的最终公式是:
=LET(xml,"<y><x>" & TEXTJOIN("",FALSE,Z4#,AA4#) & "</x></y>",
x,"//x/a",
y,"//x/b",
CHOOSE({1,2},TEXT(SUBSTITUTE(FILTERXML(xml,x),"!null!",""),"dd-mmm"),FILTERXML(xml,y)))
答案1
如果你的数据集不是真的很大,你可以简单地使用 if 条件,G3
如下所示:
=IF(LET(xml,"<y><x>" & TEXTJOIN("",FALSE,D3#,E3#) & "</x></y>",
x,"//x/a",
y,"//x/b",
CHOOSE({1,2},FILTERXML(xml,x),FILTERXML(xml,y)))="!null!",
"",
LET(xml,"<y><x>" & TEXTJOIN("",FALSE,D3#,E3#) & "</x></y>",
x,"//x/a",
y,"//x/b",
CHOOSE({1,2},FILTERXML(xml,x),FILTERXML(xml,y)))
)
但是,这必须经过相同的LET
函数两次。如果您需要避免这种情况,可以使用列I
和J
,其中:
细胞 | 功能 |
---|---|
I3 |
=IF(G3:G8="!null!", "", G3:G8) |
J3 |
=H3:H8 |
如果您有可能收集更多数据(例如几百个数据),那么使用:
细胞 | 功能 |
---|---|
I3 |
=IFS(G3:G1000="!null!", "", G3:G1000="", "", TRUE, G3:G1000) |
J3 |
=IF(H3:H1000="", "", H3:H1000) |