Excel 使用具有未知标题的TextJoin

Excel 使用具有未知标题的TextJoin,excel,text,vba,Excel,Text,Vba,我的电子表格更改,列数未知。数据的第一行包含标题。使用我知道在工作表上的标题值,我想将数据合并到一个单元格中 使用TextJoin,我想创建一个列,其中的信息由空格分隔 我知道这可以用公式来完成,现在我正试图用VBA来编写它。(注释中的公式解决方案) 这是我到目前为止找到的代码,并开始向最后一列添加信息: With ActiveSheet.UsedRange .Offset(, .Columns.Count).Resize(, 1).Value = [Formula] End With

我的电子表格更改,列数未知。数据的第一行包含标题。使用我知道在工作表上的标题值,我想将数据合并到一个单元格中

使用TextJoin,我想创建一个列,其中的信息由空格分隔

我知道这可以用公式来完成,现在我正试图用VBA来编写它。(注释中的公式解决方案)

这是我到目前为止找到的代码,并开始向最后一列添加信息:

With ActiveSheet.UsedRange
  .Offset(, .Columns.Count).Resize(, 1).Value = [Formula]
  End With

' Finds the last column
Dim lastColumn As Long
  lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column

' Add Header
Cells(1, lastColumn) = [New Column Header]
样本数据:

该程序如何在示例电子表格上工作

查找具有以下标题的列:房屋地址、街道名称和街道类型 查找第一个可用的空白列 在第二行中,输入以下公式:=TextJoin(“”,False,B2,C2,D2) 把公式填在表格上


因为我是VBA新手,所以我尝试将公式键入单元格,而不是使用编码。这就是我需要您帮助的地方。

如果要与TextJoin连接的三列不在已知位置,您可以使用索引/匹配组合来为每个值找到正确的列。索引位于当前行上,匹配使用行1查找列标签

=TEXTJOIN(" ",FALSE,INDEX(A2:G2,MATCH("House Address",$A$1:$G$1,0)),INDEX(A2:G2,MATCH("Street Name",$A$1:$G$1,0)),INDEX(A2:G2,MATCH("Street Type",$A$1:$G$1,0)))

通过这种方法,您可以将该公式准确地发布到找到的第一个空列的第2行中,然后向下复制,地址将由TextJoin创建。

请发布一个数据示例并在上下文中进行解释。你为什么需要VBA?@teylyn我编辑了这篇文章,以包含示例数据和代码的工作方式。我认为我需要vba,因为程序必须找到具有预定义标题的列,因为数据不相同,但我要查找的标题相同。如果使用vba,为什么要创建公式来连接地址?为什么不把结果写进细胞里?@teylyn这是我唯一知道的方法。如何使用VBA代码完成此任务?有三件事。1.你的公式奏效了。2.如何使其作为VBA代码工作?3.在您的代码中,您知道标题行的位置,有没有一种方法可以在不知道这些信息的情况下选择标题行?类似于在VBA中查找最后一行或第一个自由列?@AbrahamWalker啊,我明白了,这是家庭作业。那个这就是为什么它需要在VBA中完成。如果成功了,你接受答案并投票表决怎么样?@ashleedawg这不是家庭作业。这是工作。当前响应仅提供一个公式。一个有效的公式。我正在研究其他线程,以了解如何理解索引和匹配,从而生成我的VBA代码。另一方面,什么学校分配VBA作业?我可能对他们的课程感兴趣。@AbrahamWalker作为一个人,你用什么逻辑来识别标题行?最后一个空闲列很简单,但如果标题行不在特定行中,则需要一些逻辑来确定这是哪一行。那么,规则是什么?