如何在Excel VBA中交叉连接

Aya*_*nia 3 vba microsoft-excel

我想交叉连接一个工作表中的两列,并使用 VBA 将结果粘贴到另一个工作表中。 在此输入图像描述

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

在此输入图像描述

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

纯VBA函数

使用 PowerQuery

我的需要是,

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


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

Ron*_*eld 5

使用电源查询非常简单。只需添加一列,其中包含列中所有非空条目的 列表;然后扩展到新行。最后排序回所需的顺序。

阅读评论并探索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"
Run Code Online (Sandbox Code Playgroud)

原来的
在此输入图像描述

结果
在此输入图像描述