Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在excel中使用宏将多个单元格合并为一个单元格?_Excel_Vba - Fatal编程技术网

在excel中使用宏将多个单元格合并为一个单元格?

在excel中使用宏将多个单元格合并为一个单元格?,excel,vba,Excel,Vba,我有一个类似的问题: 但是我想把一系列的细胞组合在一个柱中,例如A2:A50。有时我有超过300个细胞被合并成一个。值是文本。有没有办法修改这个宏,使它在一个范围内工作,而不仅仅是两个单元格 谢谢 基于,我猜您希望返回单元格中所有值的浓缩,将所有值解释为字符串 为此,可以使用如下所示的VBA宏: Function ConcatinateAllCellValuesInRange(sourceRange As Excel.Range) As String Dim finalValue As

我有一个类似的问题:

但是我想把一系列的细胞组合在一个柱中,例如A2:A50。有时我有超过300个细胞被合并成一个。值是文本。有没有办法修改这个宏,使它在一个范围内工作,而不仅仅是两个单元格

谢谢

基于,我猜您希望返回单元格中所有值的浓缩,将所有值解释为字符串

为此,可以使用如下所示的VBA宏:

Function ConcatinateAllCellValuesInRange(sourceRange As Excel.Range) As String
    Dim finalValue As String

    Dim cell As Excel.Range

    For Each cell In sourceRange.Cells
        finalValue = finalValue + CStr(cell.Value)
    Next cell

    ConcatinateAllCellValuesInRange = finalValue
End Function
Sub MyMacro()
    MsgBox ConcatinateAllCellValuesInRange([A1:C3])
End Sub
例如,您可以这样称呼它:

Function ConcatinateAllCellValuesInRange(sourceRange As Excel.Range) As String
    Dim finalValue As String

    Dim cell As Excel.Range

    For Each cell In sourceRange.Cells
        finalValue = finalValue + CStr(cell.Value)
    Next cell

    ConcatinateAllCellValuesInRange = finalValue
End Function
Sub MyMacro()
    MsgBox ConcatinateAllCellValuesInRange([A1:C3])
End Sub
这就是你要找的吗


Mike

试试下面的宏,它不是很优雅,因为它不做任何错误检查等,但可以工作。将宏指定给按钮,单击单元格,单击宏按钮,使用鼠标高亮显示要合并的所需(源)范围(将在对话框的输入框中自动填充范围),单击确定,高亮显示目标单元格(将在下一个对话框中自动填充输入框)单击确定,所有单元格都将与单个空格字符合并到目标单元格中,目标单元格可以位于原始源区域)。由您手动删除多余的单元格。同时处理行和列,但不处理块

Sub JoinCells()

Set xJoinRange = Application.InputBox(prompt:="Highlight source cells to merge",    Type:=8)
xSource = 0
xSource = xJoinRange.Rows.Count
xType = "rows"
If xSource = 1 Then
    xSource = xJoinRange.Columns.Count
    xType = "columns"
End If
Set xDestination = Application.InputBox(prompt:="Highlight destination cell", Type:=8)
If xType = "rows" Then
    temp = xJoinRange.Rows(1).Value
    For i = 2 To xSource
        temp = temp & " " & xJoinRange.Rows(i).Value
    Next i
Else
    temp = xJoinRange.Columns(1).Value
    For i = 2 To xSource
        temp = temp & " " & xJoinRange.Columns(i).Value
    Next i
End If

xDestination.Value = temp

End Sub

为了补充Mike的解决方案,如果您想从变量而不是定义的范围中获取范围(我在语法方面遇到了问题):