我正在創建一個用于交易目的的日志。在交易中,假設我以 1 美元的價格買入了迪士尼的 1 股,以 2 美元的價格賣出了 -1 股的迪士尼。現在這筆交易將顯示在兩行不同的行中,一行表示以 1 美元購買了 1 股迪士尼,下一行顯示交易退出意味著 -1 股迪士尼以 2 美元,現在我想結合來自交易進入行和交易退出行在一行中,以便它在一行中顯示進入價格和退出價格以及它們各自的時間。
我需要所需的行來顯示不同行的進入時間、進入價格和退出時間以及退出價格。此外,在多次進入或退出的情況下,需要平均時間和價格。
這對我來說有點復雜,如果你們能提供幫助,我將不勝感激。
第一張表是原始資料

第二張表是所需的輸出。

uj5u.com熱心網友回復:
首先,讓我們做一些修復......在資料樣本中,您提供的單元格 A11 中有錯誤,其中年份讀取222而不是2022

下一步...理論上,下面的公式可以作業,但不建議使用它,因為資料集越大,性能方面就會對您的電子表格產生影響。也就是說,對于您提供的資料樣本,它有效:
={"Date","Entry Time","Exit Time","Company","Entry Price","Exit Price","Size";
ARRAYFORMULA(QUERY(QUERY({A2:E, IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0))),
(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")),
IF(NOT(REGEXMATCH(TO_TEXT(D2:D), "-"))*COUNTIFS(A2:A&C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), A2:A&C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), ROW(X2:X), "<="&ROW(X2:X)), {B2:B, E2:E}, ),
(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))<1)*REGEXMATCH(TO_TEXT(D2:D), "-"),
IF(REGEXMATCH(TO_TEXT(D2:D), "-")*COUNTIFS(A2:A&C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))<1)*REGEXMATCH(TO_TEXT(D2:D), "-"), A2:A&C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))<1)*REGEXMATCH(TO_TEXT(D2:D), "-"), ROW(X2:X), "<="&ROW(X2:X)), {B2:B, E2:E}, ),
A2:A&C2:C&VLOOKUP(ROW(X2:X), IF(
IF(A2:A="",,IF(VLOOKUP(C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X), "<="&ROW(X2:X))-1,
{SPLIT(UNIQUE(C2:C)&"×0?0", "?"); C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X),"<="&ROW(X2:X)), IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))}, 2, )<>0,,
IF(NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), COUNTIFS(C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), ROW(X2:X), "<="&ROW(X2:X)), )))<>"", {ROW(X2:X),
IF(A2:A="",,IF(VLOOKUP(C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X), "<="&ROW(X2:X))-1,
{SPLIT(UNIQUE(C2:C)&"×0?0", "?"); C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X), "<="&ROW(X2:X)), (IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-"))}, 2, )<>0,,
IF(NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), COUNTIFS(C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), C2:C&(IFERROR(1*(IFERROR(ROW(A2:A)/0)&MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>"")))))*( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE( INDIRECT("C2:C"&MAX(ROW(A2:A)*(A2:A<>"")))& INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), INDIRECT("D2:D"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW( INDIRECT("X2:X"&MAX(ROW(A2:A)*(A2:A<>""))))^0)))>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), ROW(X2:X), "<="&ROW(X2:X)), )))}), 2)},
"select Col1,avg(Col8),avg(Col11),Col3,avg(Col9),avg(Col12),count(Col11)
where Col1 is not null
group by Col1,Col3,Col13"), "offset 1", ))}

相反,最好使用一個輔助列(G 列)和這個公式:
={"Date","Entry Time","Exit Time","Company","Entry Price","Exit Price","Size";
ARRAYFORMULA(QUERY(QUERY({A2:E, G2:G,
(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")),
IF(NOT(REGEXMATCH(TO_TEXT(D2:D), "-"))*COUNTIFS(A2:A&C2:C&(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), A2:A&C2:C&(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), ROW(X2:X), "<="&ROW(X2:X)), {B2:B, E2:E}, ),
(G2:G<1)*REGEXMATCH(TO_TEXT(D2:D), "-"),
IF(REGEXMATCH(TO_TEXT(D2:D), "-")*COUNTIFS(A2:A&C2:C&(G2:G<1)*REGEXMATCH(TO_TEXT(D2:D), "-"), A2:A&C2:C&(G2:G<1)*REGEXMATCH(TO_TEXT(D2:D), "-"), ROW(X2:X), "<="&ROW(X2:X)), {B2:B, E2:E}, ),
A2:A&C2:C&VLOOKUP(ROW(X2:X), IF(
IF(A2:A="",,IF(VLOOKUP(C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X), "<="&ROW(X2:X))-1,
{SPLIT(UNIQUE(C2:C)&"×0?0", "?"); C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X),"<="&ROW(X2:X)), G2:G}, 2, )<>0,,
IF(NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), COUNTIFS(C2:C&(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), C2:C&(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), ROW(X2:X), "<="&ROW(X2:X)), )))<>"", {ROW(X2:X),
IF(A2:A="",,IF(VLOOKUP(C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X), "<="&ROW(X2:X))-1,
{SPLIT(UNIQUE(C2:C)&"×0?0", "?"); C2:C&"×"&COUNTIFS(C2:C, C2:C, ROW(X2:X), "<="&ROW(X2:X)), (G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-"))}, 2, )<>0,,
IF(NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), COUNTIFS(C2:C&(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), C2:C&(G2:G>0)*NOT(REGEXMATCH(TO_TEXT(D2:D), "-")), ROW(X2:X), "<="&ROW(X2:X)), )))}), 2)},
"select Col1,avg(Col8),avg(Col11),Col3,avg(Col9),avg(Col12),count(Col11)
where Col1 is not null
group by Col1,Col3,Col13"), "offset 1", ))}

重置分組功能需要一段時間(第 N 列 - 
演示電子表格
uj5u.com熱心網友回復:
我不確定我是否了解您的需求,但您不能只使用=average(C10:C11). 如果這是您的意思,那么您可以對所需的所有平均值使用相同的公式。
這是一個示例:https ://docs.google.com/spreadsheets/d/1-koCscNdEBUoBo4fcB9BoDy0RrfY3r4NpZwHoFSLpN8/edit#gid=0
uj5u.com熱心網友回復:
在查看并使用查詢/資料透視后,我必須遵循以下輸出:
我必須準備源資料
- 通過將時間格式化為數字
- 以及數字的位置
- 通過添加一列來標識某種 OrderID,將買賣活動相互鏈接,因此它可用于在資料透視表中進行分組。我這樣做的方式并不完全正確,因為當您在全部出售之前購買額外的東西時,就會出現問題。
- 此外,我還添加了一個列來標識它是買入還是賣出,以用作樞軸來源。它可能也可以在查詢中完成。
另外要記住的另一件事是,當您一次賣出超過 1 件時,這在平均值中的權重可能會更高。所以實際上應該計算一個加權平均值,而不僅僅是平均值。
這是我的樣本表
這是查詢
=query(DATA!A2:G, "select F, A, C, avg(B), avg(E), max(D)
where A is not null
group by F, A, C
pivot G
order by A
label F 'OrderID',
A 'Date',
C 'Company',
avg(B) 'Time',
avg(E) 'Price',
max(D) 'Size'
format avg(B) 'HH:MM:SS'
")
初步答案:要計算每天的平均退出時間,請使用:
=average(query(A2:E6,"Select A where year(A) = "&year(A11)&" and month(A) = "&month(A11)-1&" and day(A) = "&day(A11)&" and C starts with '-' and B matches '"&D11&"'"))
要計算每天的平均退出價格,請使用:
=average(query(A2:E6,"Select D where year(A) = "&year(A11)&" and month(A) = "&month(A11)-1&" and day(A) = "&day(A11)&" and C starts with '-' and B matches '"&D11&"'"))
其中“A11”是對您的摘要日期的參考,“D11”是您對公司/股票名稱的參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/481097.html
