如何在 Excel VBA 中交叉连接

如何在 Excel VBA 中交叉连接

我想使用 VBA 交叉连接一张表中的两列并将结果粘贴到另一张表中。 在此处输入图片描述

将 Sheet1 中的 A 列和 B 列交叉连接并将结果粘贴到 Sheet2 中。

在此处输入图片描述

我找到了两个答案,但无法根据我的需要进行修改。

纯 VBA 函数

使用 PowerQuery

我的需要是,

  1. 使用变量名对工作表中的前两列进行交叉连接(因为我必须在循环中运行它)。
  2. 将结果粘贴到另一张表的末尾。


编辑:添加要求
3. 循环中会有多个源工作表,例如“Sheet1”。我不想在每个工作表上都创建表格。

答案1

使用 Power Query 非常简单。只需添加一个包含列表所有非空条目 价值列;然后扩展到新行。最后按所需顺序排序。

阅读评论并探索Applied Steps以了解算法

let

//change next line to reflect actual data source
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

//set data types to text
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"name", type text}, {"value", type text}}),

//add index column so as to be able to sort back to desired output
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),

//Add a column containing a List of all non-null Values
    #"Added Custom" = Table.AddColumn(#"Added Index", "values", each List.RemoveNulls(#"Added Index"[value])),

//remove now unneeded value column
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"value"}),

//expand the List to new rows
    #"Expanded values" = Table.ExpandListColumn(#"Removed Columns", "values"),

//Sort back to original order
    #"Sorted Rows" = Table.Sort(#"Expanded values",{{"values", Order.Ascending}, {"Index", Order.Ascending}}),

    #"Removed Index" = Table.RemoveColumns(#"Sorted Rows",{"Index"}),
    #"Type Values" = Table.TransformColumnTypes(#"Removed Index",{{"values", type text}})
in
    #"Type Values"

原来的
在此处输入图片描述

结果
在此处输入图片描述

相关内容