Объединить несколько ячеек в одну в 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