Объединить несколько ячеек в одну в excel с макросом?

У меня есть аналогичный вопрос к этому:

объединить содержимое 2 ячеек в другую 3-ю ячейку с помощью VBA в Excel

но я хочу объединить диапазон ячеек в столбце, например A2: A50. Иногда у меня более 300 клеток, которые нужно объединить в одну. Значения текста. Есть ли способ изменить этот макрос так, чтобы он работал на диапазоне вместо двух ячеек?

спасибо!

3 ответов


на основе нить, которую вы цитируете, Я думаю, вы хотите вернуть конкатинацию всех значений, удерживаемых ячейками, интерпретируя все значения как строки?

для этого вы можете использовать макрос 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

это то, что вы ищете?

Майк


попробуйте следующий макрос, не очень элегантный в том, что он не проверяет ошибки и т. д., Но работает. Назначьте макрос кнопке, нажмите в ячейке, нажмите кнопку макроса, выделите желаемый (исходный) диапазон для слияния с помощью мыши (будет автозаполнение в диапазоне в поле ввода в диалоговом окне), нажмите кнопку ОК, выделите ячейку назначения (будет автозаполнение поле ввода в следующем диалоговом окне) нажмите кнопку ОК, все ячейки будут объединены с одним пробелом в ячейку назначения, которая может быть в исходном диапазоне источников). До вас, чтобы удалить лишние ячейки вручную. Workks с обеих строках и столбцах, а не блоки.

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

чтобы добавить к решению Майка, если вы хотите получить свой диапазон из переменной вместо определенного диапазона (у меня были проблемы с синтаксисом):

Sub MyMacro()

dim myVar As Range

    MsgBox ConcatinateAllCellValuesInRange(myVar)

End Sub