Объединить несколько ячеек в одну в Excel с макро? - PullRequest
7 голосов
/ 19 января 2010

У меня есть вопрос, похожий на этот:

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

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

Спасибо!

Ответы [ 3 ]

5 голосов
/ 19 января 2010

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

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

Это то, что вы искали?

Mike

4 голосов
/ 23 августа 2011

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

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
0 голосов
/ 13 апреля 2015

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

Sub MyMacro()

dim myVar As Range

    MsgBox ConcatinateAllCellValuesInRange(myVar)

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...