[英]Return a list of all pairs row/column if condition of cell value is met
給定類似於以下內容的Google表格:
+---+---A--+---B--+---C--+---D--+
| 1 | | col1 | col2 | col3 |
|---+------+------+------+------+
| 2 | row1 | 1 | X | 45 |
| 3 | row2 | 5 | | |
| 4 | row3 | 4 | | 34 |
+---+------+------+------+------+
其中row1,col1是標題標簽,“ X”也是“行/列”組合的有效值;
我需要檢索不為null的所有可能組合行/列標題的列表,在此示例中表示:
row1 | col1
row2 | col1
row3 | col1
row1 | col2
row1 | col3
row3 | col3
我以其他方式嘗試過,例如將ISBLANK函數或QUERY一種用作:
=QUERY(A1:D4, "SELECT A,B,C,D WHERE B IS NOT NULL OR C IS NOT NULL OR D IS NOT NULL",1)
但是它只是先例表的一個子集,而我不能GROUP BY,因為沒有聚合函數;
考慮具有3個工作表的電子表格,“主”,“ LabelTable”和“列表”。
“主要”包含以下數據:
+---+---A--+---B--+---C--+---D--+
| 1 | | col1 | col2 | col3 |
|---+------+------+------+------+
| 2 | row1 | 1 | X | 45 |
| 3 | row2 | 5 | | |
| 4 | row3 | 4 | | 34 |
+---+------+------+------+------+
從A2:D4創建一個命名范圍,並將其命名為“數據”。
我的解決方案是首先在表格的“ LabelTable”上創建一個伴隨表:
+-------+---A--+------B-----+------C-----+------D-----+
| 1 | | col1 | col2 | col3 |
|-------+------+------------+------------+------------+
| 2 | row1 | row1 col1; | row1 col2; | row1 col3; |
| 3 | row2 | row2 col1; | row2 col2; | row2 col3; |
| 4 | row3 | row3 col1; | row3 col2; | row3 col3; |
+-------+------+------------+------------+------------+
行數和列數與“主”上表格的大小匹配。
如果您有一個大表,則可以通過使用B2中的公式=$A2&","&B$1&";"
輕松生成這些表 然后復制並復制到所需范圍的右下角。
然后,我從B2:D4創建了一個命名范圍“標簽”(對於較大的表,此表內容的全部范圍)
然后在“列表”上輸入公式:
=transpose(split(concatenate(arrayformula(if(not(ISBLANK(Data)),Labels,""))),";"))
這將生成一個對列表,例如“ Row1Col1”,對應於每個非空白值。
描述
這使用ISBLANK()
確定單元格是否為空。 與“外部”上的ARRAYFORMULA()
結合使用,將創建一個TRUE或FALSE值的表。 然后,它使用IF()
包裝TRUE / FALSE表,以創建與TRUE / FALSE表具有TRUE位置相對應的標簽表。 這是命名范圍“標簽”的出現位置-它提供了沒有空值的單元格引用。
然后將所有這些都包裝在CONCATENATE()
以給出一個帶有引用連接的單元格。 然后,使用SPLIT()
將其轉換為數組-這也是為什么“;” 已添加到“標簽”中的單元格引用中。 最后,使用TRANSPOSE()
將1xN
數組轉換為Nx1
數組,即單列。
局限性
如果您有動態表格,則還需要使“標簽”動態匹配。 此方法不這樣做。
如果出於某種原因有一個要求,即您不能在“ LabelTable”上使用附帶的表,則此方法將不起作用。 還需要做更多的工作以將其“內置”到公式中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.