2022年10月8日 星期六

陣列維數轉換,欄變成列,多欄變成一列,多欄變成一欄。

 

陣列維數轉換,欄變成列,多欄變成一列,多欄變成一欄。

跟複製貼上一樣,行列互轉。
'=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"。
上兩項 預設運算為乘法,但也可以加法、減法和除法。後的值回傳到結果格子。

undefined




有時輸入為了版面格式,會把一整個欄位的數值,轉成多欄位的數值。

為了將多欄數值陣列,轉成一欄陣列,又需要動態陣列。

多維轉一維陣列。用逗號","去將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))






沒有留言:

張貼留言