2016-01-09 49 views
2

前幾天在Tex.StackExchange中問了這個問題(Collapse table columns to vertical hierarchy),但還沒有找到一個可行的解決方案 - 可能是因爲我試圖自動化一些東西,而不是在LaTeX中手動編輯它。爲了找到解決方案,我轉而試圖在Excel中實現這一點。在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 | 

,並在新柱,置於名稱和代碼之間 - 我們稱之爲組合 - 我希望所有的列的內容向左摺疊成這個組合列,但與空白單元格的第一個匹配的左側替換爲字符串「\ 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 | 

的目的是爲了更容易適應的分層信息一長串到膠乳中的表,其中「\拉特」是由給定數量的替代的空間。

在Excel中我曾嘗試變化的concatenate()isblank(),與最接近的解決方案至今是:

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

我在合併列向下填充,但這種替換所有空白單元格用「\ LVL 「而我只需要填寫第一個非空白的左側,所以我得到上面顯示的預期輸出。我非常希望不要依賴於這個宏。

有沒有人有一個建議,我可以如何在Excel中實現這一點,通過使用組合列中的通用公式/函數?

回答

3

使用REPT function與近似MATCH提供number_times參數。一個INDEX/MATCH函數對,CHAR functionTRIM function可以完成它。

在E爲,

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

必要向下填充。

rept_lvl.

+0

這絕對是一流的,正是我一直在尋找的! – OleVik