Vba 按相邻单元格值合并或连接列

Vba 按相邻单元格值合并或连接列,vba,excel,concatenation,transpose,Vba,Excel,Concatenation,Transpose,是否可以根据另一列中的值(ID)将列中的单元格连接起来,然后作为字符串输出(可能在另一个工作表中,因为这样会更干净) 例如 输出: 1234 a b c 4321 a b c d 问题: 列ID不符合顺序(但可以排序) 每个ID的不同数量 这似乎是一种可能的VBA解决方案 从 用法示例: =JoinXL(TRANSPOSE(A1:A4)," ") 所以我想如果索引和匹配等可以与转置一起使用,它可能会起作用。只是不知道该怎么做 我可以在另一个表中有一个唯一ID

是否可以根据另一列中的值(
ID
)将列中的单元格连接起来,然后作为字符串输出(可能在另一个工作表中,因为这样会更干净)

例如

输出:

1234        a b c
4321        a b c d
问题:

  • 列ID不符合顺序(但可以排序)
  • 每个ID的不同数量
这似乎是一种可能的
VBA
解决方案 从

用法示例:

=JoinXL(TRANSPOSE(A1:A4)," ") 
所以我想如果
索引
匹配
等可以与
转置
一起使用,它可能会起作用。只是不知道该怎么做


我可以在另一个表中有一个唯一ID的列。

虽然没有像您引用的示例那样方便的功能,但请考虑使用ID列为关键字的集合字典。下面的宏假设数据从A2(第一行的列标题)开始,结果以D和E列输出:


虽然没有像您引用的示例那样方便的功能,但请考虑以ID列为关键字的集合字典。下面的宏假设数据从A2(第一行的列标题)开始,结果以D和E列输出:


我想出了一个解决办法,虽然有点麻烦,但效果相当不错

表必须按ID排序

在另一张纸上。 ID:(A栏)

1234

最小参考:(B列)

最大参考值:(C列)

范围:(D列)

字符串:(E列)


我想出了一个解决办法,虽然有点麻烦,但效果相当不错

表必须按ID排序

在另一张纸上。 ID:(A栏)

1234

最小参考:(B列)

最大参考值:(C列)

范围:(D列)

字符串:(E列)


由于您所需要的只是代码之间的空间,所以只需对代码进行一些更改即可使用

如果数据是垂直的,则需要将数组转置为一维数组:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    arr = Application.Transpose(arr)

    JoinXL = Join(arr, delimiter)
End Function
如果它是水平的,那么使用你所拥有的

主要的变化是你如何称呼它

使用以下数组公式:

=TRIM(JoinXL(IF($A$2:$A$8=C2,$B$2:$B$8,"")," "))
作为一个数组,在退出编辑模式时,需要使用Ctrl-Shift-Enter键而不是Enter键进行确认。如果操作正确,Excel将在公式周围放置
{}

If根据单元格是否等于条件传递一个值或空格数组

将其放入第一个单元格,然后按Ctrl-Shift-Enter键。然后向下拖动/复制


由于您只需要在代码之间留出空间,所以只需对代码进行几处更改即可使用

如果数据是垂直的,则需要将数组转置为一维数组:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    arr = Application.Transpose(arr)

    JoinXL = Join(arr, delimiter)
End Function
如果它是水平的,那么使用你所拥有的

主要的变化是你如何称呼它

使用以下数组公式:

=TRIM(JoinXL(IF($A$2:$A$8=C2,$B$2:$B$8,"")," "))
作为一个数组,在退出编辑模式时,需要使用Ctrl-Shift-Enter键而不是Enter键进行确认。如果操作正确,Excel将在公式周围放置
{}

If根据单元格是否等于条件传递一个值或空格数组

将其放入第一个单元格,然后按Ctrl-Shift-Enter键。然后向下拖动/复制


此解决方案很好,因为它即使在以下情况下也能工作:

  • 要连接的文本包含空格
  • 您希望使用分隔符而不是空格(即逗号)
  • 首先,将“转置”添加到自定义函数中

    Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    
    arr = Application.Transpose(arr)
    JoinXL = Join(arr, delimiter)
    
    End Function
    
    例如,使用以下公式(将逗号+空格替换为您选择的分隔符,{}替换为您选择的垃圾字符):

    对于,使用以下公式:

    {=SUBSTITUTE(SUBSTITUTE(JoinXL(IF(TRANSPOSE($E$19:$AH$19)=D12,TRANSPOSE($E$20:$AH$20),"{}"),", "),"{}, ",""),", {}", "")}
    

    确保以数组公式的形式输入公式(在单元格中键入公式后按Ctrl+Shift+enter)。

    此解决方案很好,因为它即使在以下情况下也能工作:

  • 要连接的文本包含空格
  • 您希望使用分隔符而不是空格(即逗号)
  • 首先,将“转置”添加到自定义函数中

    Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    
    arr = Application.Transpose(arr)
    JoinXL = Join(arr, delimiter)
    
    End Function
    
    例如,使用以下公式(将逗号+空格替换为您选择的分隔符,{}替换为您选择的垃圾字符):

    对于,使用以下公式:

    {=SUBSTITUTE(SUBSTITUTE(JoinXL(IF(TRANSPOSE($E$19:$AH$19)=D12,TRANSPOSE($E$20:$AH$20),"{}"),", "),"{}, ",""),", {}", "")}
    

    确保以数组公式的形式输入公式(在单元格中键入公式后按Ctrl+Shift+enter)。

    Office 365 Excel有一个名为TextJoin的新公式。您可以在数组形式中使用它来获取所需内容。@ScottCraner刚刚查找了它,看起来它可以工作了。但不幸的是,这需要在Excel 2010中运行。Office 365 Excel有一个名为TextJoin的新公式。您可以在数组形式中使用它来获取所需内容。@ScottCraner刚刚查找了它,看起来它可以工作了。不幸的是,这需要在Excel 2010中运行。
    =TRIM(JoinXL(IF($A$2:$A$8=C2,$B$2:$B$8,"")," "))
    
    Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    
    arr = Application.Transpose(arr)
    JoinXL = Join(arr, delimiter)
    
    End Function
    
    {=SUBSTITUTE(SUBSTITUTE(JoinXL(IF($A$2:$A$31=D3,$B$2:$B$31,"{}"),", "),"{}, ",""),", {}", "")}
    
    {=SUBSTITUTE(SUBSTITUTE(JoinXL(IF(TRANSPOSE($E$19:$AH$19)=D12,TRANSPOSE($E$20:$AH$20),"{}"),", "),"{}, ",""),", {}", "")}