如何获取所有非空列及其内容?
How can I get all non-empty columns and their contents?
我想知道如何在使用另一部分 sheet 的数据时过滤掉空列,而不必指定每个列名,因为可以添加更多列。
我找到 this site 并尝试了那里的公式,但似乎有时它会包含该列(意味着它具有非空值)但随后它不包含该值,因此该列看起来空白但不应该。
=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 |
如有任何帮助,我们将不胜感激。
执行此操作的最佳方法是再次重新旋转它,例如:
=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"))
如果您想保留所有时间,您需要:
=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))}})
我想知道如何在使用另一部分 sheet 的数据时过滤掉空列,而不必指定每个列名,因为可以添加更多列。
我找到 this site 并尝试了那里的公式,但似乎有时它会包含该列(意味着它具有非空值)但随后它不包含该值,因此该列看起来空白但不应该。
=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 |
如有任何帮助,我们将不胜感激。
执行此操作的最佳方法是再次重新旋转它,例如:
=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"))
如果您想保留所有时间,您需要:
=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))}})