给定一列中的一组行,假设为 D1 - D3,每个单元格(1-3)包含多行多个单词。
将每个单词视为一个“短语”,如何列出此列中多行中的每个不同短语?
举个例子来说明我的意思:
| D |
---------
1|Hello |
|World |
|Apple |
---------
2|Apple |
|Orange |
---------
3|Orange |
|Hello |
|World |
将输出E1
以下内容到另一列(例如):
| E |
---------
1|Hello |
|World |
|Apple |
|Orange |
答案1
尝试使用以下公式:
• 单元格中使用的公式E1
=LET(
α, CHAR(10),
φ, D1:D3,
δ, LEN(φ)-LEN(SUBSTITUTE(φ,CHAR(10),))+1,
TEXTJOIN(α,,UNIQUE(TOCOL(TEXTSPLIT(TEXTAFTER(α&φ,α,SEQUENCE(,MAX(δ))),α),3))))
α
表示CHAR(10)φ
表示单元格范围Column D
D1:D3
δ
表示每个单元格使用的单词数LEN(φ)-LEN(SUBSTITUTE(φ,CHAR(10),))+1
- 按列拆分使用
TEXTSPLIT(TEXTAFTER(α&φ,α,SEQUENCE(,MAX(δ))),α)
- 将TOCOL()数组转换为单列
- UNIQUE()函数获取唯一值
- TEXTJOTIN()CHAR(10)使用分隔符包装到一个单元格
- 最后但同样重要的一点是,请记住通过按ALT+ H+W或从
Home
Tab 单击Wrap Text
“组对齐”来换行单元格。
您还可以使用LAMBDA()名为的辅助函数REDUCE,但使用第一种方法更好,
• 单元格中使用的公式E1
=TEXTJOIN(CHAR(10),,DROP(UNIQUE(TOCOL(REDUCE("",D1:D3,LAMBDA(x,y,VSTACK(x,TEXTSPLIT(y,CHAR(10))))),3)),1))
上述公式可以简化,但我TEXTJOIN()首先尝试避免包装函数,因为它有字符限制,而且我们不知道 OP 的数据有多大。但是,您也可以这样做:
• 单元格中使用的公式E1
=TEXTJOIN(CHAR(10),,UNIQUE(TEXTSPLIT(TEXTJOIN(CHAR(10),,D1:D3),,CHAR(10))))
答案2
这也可以用来:
=LET(e,CHAR(10),TEXTJOIN(e,,UNIQUE(TOCOL(TEXTSPLIT(TEXTAFTER(e&TEXTJOIN(e,1,D1:D3),e,ROW(1:99)),e),2))))