
使用 Excel 365
這是我一直在研究的一個例子,它非常接近我想要的:https://docs.google.com/spreadsheets/d/1zZiFDaUhuZAhyHm3HZkcZrUl9KEoV97N/edit?usp=sharing&ouid=108210493177158563166&rtpof=true&sd=true
基本上,我有資料 A、B 和 C,對於表中具有多個條目的每個唯一 A,我想用一條線在散點圖中繪製 B 與 C 的關係。我正在設計一個模板,它需要處理所有資料排列。
我所得到的與此非常接近,但有一些問題我無法解決:
我需要為表中 A 和 B 的所有可能值分配足夠的空間。這不是一個大問題,我目前正在使用的資料集非常小,但如果它是完全動態的,能夠處理任意數量的值,那就太好了。
圖例顯示表中所有未使用列的空白條目。我只想讓它顯示我有數據的條目。
對於 B 的非相鄰值,該線不會連接(請參閱第 3 行的範例)。我希望它在每個系列中都有聯繫。
希望這是有道理的,請隨時提出任何澄清問題。
提前致謝。
答案1
這是你需要做的,讓每一點都充滿活力(參考動畫):
- 首先,不要使用空白範圍來迭代,而是使用
Structured References
akaTables
--> 表命名為Table1
- 用於列的公式
F3:G16
將J2:O8
逐漸擴展。
• 在儲存格中使用的公式F3
=LET(
_Data, Table1,
_A, TAKE(_Data,,1),
_Uniq, UNIQUE(_A),
HSTACK(_Uniq, COUNTIF(_A,_Uniq)))
• 在儲存格中使用的公式J2
=LET(
_Data, Table1,
_A, TAKE(_Data,,1),
_B, INDEX(_Data,,2),
_C, TAKE(_Data,,-1),
_UniqA, TOROW(UNIQUE(_A)),
_UniqB, UNIQUE(_B),
_ArrayB, VSTACK("",_UniqB),
_DataBody, VSTACK(_UniqA&"A", MAKEARRAY(ROWS(_UniqB), COLUMNS(_UniqA), LAMBDA(r,c,
FILTER(_C, (INDEX(_UniqA,1,c)=_A)*(INDEX(_UniqB,r)=_B),NA())))),
HSTACK(_ArrayB, _DataBody))
上面的公式也可以用LAMBDA()
--> 來定義,所以你需要做的就是將上面的公式包裹在LAMBDA()
-->中parameter_or_calculation
asarray
並替換Table1
as array
。所以它變成並被輸入refers to
將名稱定義為
=LAMBDA(array, LET(_Data, array, the rest continues as is)
在Excel
工作表中輸入:
=SCATTER_PLOT(Table1)
- 請注意,我使用了輔助
MAKEARRAY()
函數LAMBDA()
而不是 usingREDUCE()
,也可以使用,但它是重資源函數,並且在堆疊資料時REDUCE()
效率不高。MAKEARRAY()
- 插入時,請
Scatter with smooth lines and markers
確保選擇資料範圍J2:O8
,並記住Connect data points with line
選擇Hidden and
“空白單元格”框。 - 我也用過
Conditional Formatting
邊框。這裡是Excel。
答案2
可能的修改:
為更多數據騰出空間:
F3
:=UNIQUE(FILTER(B:B,ISNUMBER(B:B)))
G3
:=COUNTIF(B:B,F3#)
K3
:=TRANSPOSE(F3#)
K4
:=K3# & " A"
J5
:=UNIQUE(FILTER(C:C,ISNUMBER(C:C)))
K5
:=FILTER($D:$D,($B:$B=K$3)*($C:$C=$J5),#N/A)
複製到需要的區域。
最好在這裡使用真正需要的範圍,例如
=FILTER($D$1:$D$100,($B$1:$B$100=K$3)*($C$1:$C$100=$J5),#N/A)
這取決於
Chart data range
.我不知道如何使其動態化(無需 VBA)。我們可以定義一個動態定義此資料範圍的公式,但是如果我們在這裡使用它,它將立即計算並儲存為靜態位址。要在點之間建立聯繫,您應該更改一個圖表選項:
Select Data Source > Hidden and Empty Cells > Connect data points with line