This site will look better if you upgrade to a browser that supports web standards.
The function is very handy for splitting text in one column into several columns. There's no built-in function for doing the opposite, though.
This macro will merge the values in each row of the Selection. If you want to insert a delimiter, change the sDELIM constant, or insert a column and array enter the delimiter for the appropriate number of rows before merging).
'**************************************************************************
'Purpose: Merge values in a multi-column array into the first column
'Inputs: Selection
'Returns: Merged values in column 1 of rRng
'**************************************************************************
Public Sub ColumnsToText()
'J.E. McGimpsey http://www.mcgimpsey.com/excel/mergedata.html
Const sDELIM As String = ""
Dim vTxtArr As Variant
Dim rRng As Range
Dim nTop As Long
Dim i As Long
Dim j As Long
Set rRng = Intersect(Selection, ActiveSheet.UsedRange)
vTxtArr = rRng.Value
nTop = UBound(vTxtArr, 1)
For i = 1 To nTop
For j = 2 To UBound(vTxtArr, 2)
vTxtArr(i, 1) = vTxtArr(i, 1) & sDELIM & vTxtArr(i, j)
Next j
Next i
ReDim Preserve vTxtArr(1 To nTop, 1 To 1)
rRng.Resize(, 1).Value = vTxtArr
End Sub
You can place this in your Personal Macro Workbook (Personal.xls for WinXL) and attach to a toolbar button or keyboard shortcut.
Or try a more flexible version, allowing you to specify the range and delimiter.
This macro merges the entire Selection into one cell. To include a delimiter, change SDELIM, or insert columns between the cells and put the delimiter in those columns (make sure the last column is a delimiter column as well.
'**************************************************************************
'Purpose: Merge cells, retaining all data
'Inputs: Selection
'Returns: Merged values in the first cell of rRng
'**************************************************************************
Public Sub MergeToOneCell()
'J.E. McGimpsey, http://www.mcgimpsey.com/excel/mergedata.html
Const sDELIM As String = ", "
Dim rCell As Range
Dim sMergeStr As String
With Selection
For Each rCell In .Cells
sMergeStr = sMergeStr & sDELIM & rCell.Text
Next rCell
Application.DisplayAlerts = False
.Merge Across:=False
Application.DisplayAlerts = True
.Item(1).Value = Mid(sMergeStr, 1 + Len(sDELIM))
End With
End Sub
Or try a more flexible version, allowing you to specify the range and delimiter.
This page last updated
© Copyright 2001 - 2004 McGimpsey and Associates. Except where noted, all code on this site may be distributed under the Gnu GPL. Acknowledgement is appreciated.
Unfamiliar with macros? Check out David McRitchie's Getting Started with Macros and User Defined Functions