【发布时间】:2021-12-02 14:08:40
【问题描述】:
在我的 excel 中,我有主工作表,其中包含我需要的所有数据,但此数据未过滤(大多数行为空),因此要从特定列中选择值,我需要取消选中过滤器中的“空白”和只有这样我才能复制数据并将其粘贴到另一张表(其中应包含每列的数据)。我对主工作表中的每一列都执行此操作。 有没有办法将数据(具有值的行)从每列导入到另一张表?因为当我手动进行时,它需要很多时间。 谢谢帮忙!
【问题讨论】:
标签: excel vba powerquery
在我的 excel 中,我有主工作表,其中包含我需要的所有数据,但此数据未过滤(大多数行为空),因此要从特定列中选择值,我需要取消选中过滤器中的“空白”和只有这样我才能复制数据并将其粘贴到另一张表(其中应包含每列的数据)。我对主工作表中的每一列都执行此操作。 有没有办法将数据(具有值的行)从每列导入到另一张表?因为当我手动进行时,它需要很多时间。 谢谢帮忙!
【问题讨论】:
标签: excel vba powerquery
如果我理解你的想法,你需要这样的表达方式:
=Sheet1!A26+Sheet1!B26
【讨论】:
突出显示源数据并使用表/范围中的数据进入 powerquery
在家中...高级/编辑器...在下面粘贴代码,更改第一行以反映您的范围。好的
文件...关闭并加载
这适用于任意数量的列,将数据“整理”到每列的顶部
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Demoted Headers" = Table.DemoteHeaders(Source),
#"Added Index" = Table.AddIndexColumn(#"Demoted Headers", "Index", 0, 1),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Index"}),
#"Grouped Rows" =Table.Group(#"Removed Columns" , {"Attribute"}, {{"GRP", each Table.AddIndexColumn(_, "Index", 1, 1), type table}}),
#"Expanded GRP" = Table.ExpandTableColumn(#"Grouped Rows", "GRP", {"Value", "Index"}, {"Value", "Index"}),
#"Pivoted Column" = Table.Pivot(#"Expanded GRP", List.Distinct(#"Expanded GRP"[Attribute]), "Attribute", "Value"),
#"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Index"}),
#"Promoted Headers" = Table.PromoteHeaders(#"Removed Columns1", [PromoteAllScalars=true])
in #"Promoted Headers"
【讨论】:
如果您想在删除空格的同时堆叠行值,只需使用粘贴到单元格中的FILTER 函数然后跨列复制即可:
=FILTER(Sheet1!A2:A100,LEN(Sheet1!A2:A100)>0)
但是,我注意到左侧有时间戳。如果要过滤掉完全空白的表数据行,同时保留至少一列中包含数据的所有行并保持表完整性(仍然存在一些空白),那么这也可以通过更复杂的公式来完成:
=LET(data, Sheet1!B1:E100, table, Sheet1!A1:E100, FILTER(table&"",MMULT(LEN(data),TRANSPOSE(--(COLUMN(data)>0)))>0))
在这里,您可以将data 字段中所有字符串的长度与单位矩阵相乘来创建过滤条件,该单位矩阵使用MMULT(LEN(data),TRANSPOSE(--(COLUMN(data)>0))) 为您提供一行中所有字符的总和。
[参考:https://stackoverflow.com/a/61476755/3688861]
然后可以测试这个数组,看看它是否大于过滤条件的 0。
【讨论】: