我喜欢知道如何使用 Excel 公式以整齐的方式连接来自连续列的多个最后非空白单元格的值,即我的预期值在插图中以绿色突出显示。
我知道如何通过应用从一列获取最后一个非空白单元格值
=IFERROR(LOOKUP(2,1/(INDIRECT("A1:A"&ROW())<>""),INDIRECT("A1:A"&ROW())),"")
我还知道如何通过应用连接多个值
=TEXTJOIN("",TRUE,G4:L4)
我能想到的可能方法有:
- 将源数据从二维数组转换为一维数组并以数组公式返回;我的想法是通过应用公式,然后可以用最后一个非空白单元格填充那些空白单元格值。
源公式 ={1,0,0;0,2,0;0,0,3;4,0,0;0,5,0;0,0,6} 应用公式后返回的数组 ={1,0,0;1,2,0;1,2,3;4,0,0;4,5,0;4,5,6}
- 如果使用数组;
- 按行而不是按列循环。
但我没有开发出适当的公式。
任何帮助都将不胜感激。谢谢。
字符的解决方案在链接中说明 字符大小写解决方案
答案1
如果您的数据如您所显示的那样,一行的四列中的每一列都只有一个条目,那么:
E1: =A1
E2: =TEXTJOIN("",,IF(A2="", E1,""),A2:D2)
并向下填充
编辑给出更新后的输入和输出示例:
这可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中的 Power Query 来实现
使用 Power Query
- 在数据表中选择一些单元格
Data => Get&Transform => from Table/Range
- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下表格姓名在第 2 行
- 将下面的 M 代码粘贴到您所看到的位置
- 将第 2 行的表名改回最初生成的表名。
- 阅读评论并探索
Applied Steps
以了解算法
基本算法包括填充行、填充列,然后返回每行不同条目的列表。
M 代码
let
//Change next line to reflect your actual data source (table name)
Source = Excel.CurrentWorkbook(){[Name="Table14"]}[Content],
//set the data types to text
#"Changed Type" = Table.TransformColumnTypes(Source,
List.Transform(Table.ColumnNames(Source), each {_, type text})),
//Fill across all rows, then down all columns
#"Transposed Table" = Table.Transpose(#"Changed Type"),
fillRows = Table.FillDown(#"Transposed Table", Table.ColumnNames(#"Transposed Table")),
#"Transposed Table1" = Table.Transpose(fillRows),
fillCols = Table.FillDown(#"Transposed Table1", Table.ColumnNames(#"Transposed Table1")),
//Results column combines the Distinct entries only in each of the four columns
#"Added Custom" = Table.AddColumn(fillCols, "Output",
each Text.Combine(List.Distinct({[Column1],[Column2],[Column3],[Column4]}),""), type text),
//Remove uneeded columns
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Column1", "Column2", "Column3", "Column4"})
in
#"Removed Columns"