在Excel中水平折叠列

我在前几天在Tex.StackExchange中问过这个问题(将表列parsing为垂直层次结构) ,但还没有find一个可行的解决scheme – 可能是因为我试图自动化一些东西,而不是在LaTeX中手动编辑它。 为了find一个解决scheme,我转而试图在Excel中实现这一点。

我在Excel中有以下结构:

| Type | Category | Subcategory | Name | Code | Variable | Note | |------|----------|-------------|------|------|----------|-----------| | A | | | | | | | | | A | | | | | | | | | A | | | | | | | | | OneA | one | one | Something | | | | | OneB | One | One | Something | | | | | OneC | One | One | Something | | B | | | | | | | | | A | | | | | | | | | A | | | | | | | | | OneA | One | One | Something | | | | | OneB | One | One | Something | | | B | | | | | | | | | A | | | | | | | | | OneA | One | One | Something | | | | | OneB | One | One | Something | 

在名称和代码之间放置一个新列 – 让我们把它称为组合 – 我希望左边的所有列的内容合并到这个组合列中,但是第一个匹配的左侧的空白单元格被replace为string“\ lvl” (对于每一个,最后一个空格)。

所以预期的输出将如下所示:

 | Type | Category | Subcategory | Name | Combined | Code | Variable | Note | |------|----------|-------------|------|-------------------|------|----------|-----------| | A | | | | A | | | | | | A | | | \lvl A | | | | | | | A | | \lvl\lvl A | | | | | | | | OneA | \lvl\lvl\lvl OneA | one | one | Something | | | | | OneB | \lvl\lvl\lvl OneB | One | One | Something | | | | | OneC | \lvl\lvl\lvl OneC | One | One | Something | | B | | | | B | | | | | | A | | | \lvl A | | | | | | | A | | \lvl\lvl A | | | | | | | | OneA | \lvl\lvl\lvl OneA | One | One | Something | | | | | OneB | \lvl\lvl\lvl OneA | One | One | Something | | | B | | | \lvl B | | | | | | | A | | \lvl\lvl A | | | | | | | | OneA | \lvl\lvl\lvl OneA | One | One | Something | | | | | OneB | \lvl\lvl\lvl OneB | One | One | Something | 

其目的是将LaTeX中的一系列分层信息更容易地放入表格中,其中“\ lvl”被给定数量的空格replace。

在Excel中,我尝试了concatenate()isblank() ,到目前为止最接近的解决scheme是:

 =IF(ISBLANK(A2),"\lvl",A2) & IF(ISBLANK(B2),"\lvl",B2) & IF(ISBLANK(C2),"\lvl",C2) & IF(ISBLANK(D2),"\lvl",D2) 

我在组合列中填充,但这将replace所有空白单元格与“\ lvl”,而我只需要填充到第一个非空白的左侧,所以我得到上面显示的预期输出。 我非常喜欢不依赖于这个macros。

有没有人有一个build议,我可以如何在Excel中实现这一点,通过使用组合列中的公式/函数?

使用提供number_times参数的近似MATCH的REPT函数 。 一个INDEX / MATCHfunction对, CHARfunction和TRIMfunction可以完成它。

在E2中,

 =TRIM(REPT("\lvl", MATCH("zzz", A2:D2)-1)&CHAR(32)&INDEX(A2:D2, MATCH("zzz", A2:D2))) 

根据需要填写。

rept_lvl。