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),"{}"),", "),"{}, ",""),", {}", "")}