我已经改写了这个问题,因为第一次没有回应......也许它有点罗嗦。
我的原始数据如下。
注意 - 这只是测试数据,在我的文件中,它是从公式创建的溢出范围(请参阅公式以从该公式的溢出范围中的两个数据集创建笛卡尔积)
日期 | 文本 |
---|---|
29/08/2021 | 一个 |
29/08/2021 | 乙 |
29/08/2021 | C |
2021 年 8 月 30 日 | 一个 |
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)))
如果您的数据集不是很大,您可以像这样简单地使用 if 条件
G3
:但是,这必须通过
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)