陣列維數轉換,欄變成列,多欄變成一列,多欄變成一欄。
跟複製貼上一樣,行列互轉。
'=TRANSPOSE() 轉置矩陣
用樞紐分析表精靈,將列跟行互轉也是一種方法。
Excel會自動創建一個新的工作表,基於原二維表形成的一維表。
一維陣列轉變成多維陣列。傳回對應範圍或陣列之個對應矩陣元素的總和
'=SUMPRODUCT(($A$4:$A$8=$E4)*($C$4:$C$8=F$3))
在$A$4:$A$8找出跟$E4一樣的值,為"1",否則為"0"。
在$C$4:$C$8找出跟F$3一樣的值,為"1",否則為"0"。
上兩項 預設運算為乘法,但也可以加法、減法和除法。後的值回傳到結果格子。
有時輸入為了版面格式,會把一整個欄位的數值,轉成多欄位的數值。
為了將多欄數值陣列,轉成一欄陣列,又需要動態陣列。
多維轉一維陣列。用逗號","去將B2:B6,C2:C6,D2:D6轉變成一列數字。1,3,5,7,10,2,3,5,7,9,3,5,5,7,9。
先用'=TEXTJOIN(",",,B2:B6,C2:C6,D2:D6)
天 \ 次 | 1次 | 2次 | 3次 |
1天 | 1 | 2 | 3 |
2天 | 3 | 3 | 5 |
3天 | 5 | 5 | 5 |
4天 | 7 | 7 | 7 |
5天 | 10 | 9 | 9 |
=TEXTJOIN(",",,B2:B6,C2:C6,D2:D6) | |||
1,3,5,7,10,2,3,5,7,9,3,5,5,7,9 | 左邊是J2格 |
多維陣列轉一列的數字。這時候成功一半了,至少多欄變成一列。
這用SUBSTITUTE將J2格的1,3,5,7,10,2,3,5,7,9,3,5,5,7,9,逗號轉成</A><A>。
"<X><A>"&SUBSTITUTE($J2,",","</A><A>")&"</A></X>"
這種格式是XML的格式。
<X><A>1</A><A>3</A><A>5</A><A>7</A><A>10</A><A>2</A><A>3</A><A>5</A><A>7</A><A>9</A><A>3</A><A>5</A><A>5</A><A>7</A><A>9</A></X>
等會可以用FILTERXML函數處理。這一列數值
FILTERXML("<X><A>"&SUBSTITUTE($J$2,",","</A><A>")&"</A></X>","X/A["&COLUMN(A欄...)&"]"),"")
將FILTERXML(xml, xpath),將XML用XPATH語法,將<X><A>1</A><A>3</A><A>5</A><A>7</A><A>10</A><A>2</A><A>3</A><A>5</A><A>7</A><A>9</A><A>3</A><A>5</A><A>5</A><A>7</A><A>9</A></X>這一列數值,以X/A["&COLUMN(A1)&"]語法,將/A層後面的COLUMN(A欄...)依序取得<A>後面的數字。
會從在同一格的數值:1,3,5,7,10,2,3,5,7,9,3,5,5,7,9。變成依序不同欄的1357102357935579。
但是若有錯誤會發生 #VALUE! 。所以還要用 IFERROR(,"")若資料無效錯誤,傳回""。
所以最後就是將XML格式轉成多欄分開:
'=IFERROR(FILTERXML("<X><A>"&SUBSTITUTE($J$2,",","</A><A>")&"</A></X>","X/A["&COLUMN(A1)&"]"),"")
=IFERROR(FILTERXML("<X><A>"&SUBSTITUTE($J$2,",","</A><A>")&"</A></X>","X/A["&COLUMN(A1)&"]"),"") | ||||||||||||||
1 | 3 | 5 | 7 | 10 | 2 | 3 | 5 | 7 | 9 | 3 | 5 | 5 | 7 | 9 |
'找個Q30的儲存格,用=TRANSPOSE() 轉置矩陣,使用陣列輸入方式拉個大於初始多個欄位版面排列的格子數目即可。這時候就可以再幫忙變成Q欄這一欄的數據了。
若再配合試著把這個轉成公式內的名稱管理員的名稱,就可以變成動態的圖表的Y軸使用了。
例如
設一個名稱叫做:多欄轉一欄數據
=OFFSET(二維轉一維!$Q$30,0,0,COUNT(二維轉一維!$Q:$Q))
沒有留言:
張貼留言