首页 > 解决方案 > 如何获取所有非空列及其内容?

问题描述

我想知道如何在使用工作表一部分的数据时过滤掉空列,而不必指定每个列名,因为可以添加更多列。

我找到了这个站点并在那里尝试了公式,但似乎有时它会包含该列(意味着它有一个非空值),但它不包含该值,因此该列看起来是空白但不应该是。

=ArrayFormula(Query(transpose(Query(TRANSPOSE({Query({'Test Data'!A1:Z1;Query({if('Test Data'!A2:Z<>"",1,0)},"Select "&JOIN(",","Sum(Col"&column('Test Data'!A1:Z1)&")"))},"Offset 1",1);'Test Data'!A2:Z}),"Select * Where Col2>0")),"Select * Offset 1",1))

我目前有这个:

|            |   english   |     math     |   science   |
|:-----------|------------:|:------------:|:-----------:|
| 8:30       | bob,jill    |              |             |
| 9:40       |             |              |             |
| 10:15      |             |              |   mike      |

我想要这个(可以让一行为空):

|            |   english   |   science   |
|:-----------|------------:|:-----------:|
| 8:30       | bob,jill    |             |
| 9:40       |             |             |
| 10:15      |             |   mike      |

任何帮助,将不胜感激。

标签: google-sheetstransposegoogle-sheets-formulaarray-formulasgoogle-sheets-query

解决方案


这样做的最好方法是再次重新旋转它,例如:

=ARRAYFORMULA(QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
 IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:Z<>"", B2:Z, "♥")&"♦"&B1:Z1, )), "♠")), "♦"), 
 "select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3"))

0


如果您想保留所有时间,您将需要:

=ARRAYFORMULA({QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
 IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"), 
 "select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3 limit 0"); 
 {A2:A, IFERROR(VLOOKUP(A2:A, QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
 IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"), 
 "select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3"), 
 TRANSPOSE(ROW(INDIRECT("A2:A"&COLUMNS(QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
 IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"), 
 "select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3 limit 0"))))), 0))}})

在此处输入图像描述


推荐阅读