I would like to join a text from 3 cells while keeping the cells' formatting. I looked on the internet and it appears to me that the formatting cannot be preserved with textjoin function in Excel. As shown in the image below, I would like to join a text from column 1-3 with a double line between each text.
I currently use =A2&CHAR(10)&CHAR(10)&B2&CHAR(10)&CHAR(10)&C2 to get what is shown in column 4. However, I have aimed to get what is shown in column 5, instead.
Btw, I have tons of these cells to join. Any automatic ways would be much appreciated! Does anyone have thoughts on this? Thank you very much.

A1 and it has one row of headers.Module1.Const Delimiter As String = vbLf & vbLf).JoinCells procedure. The rest is being called.Option Explicit
Sub JoinCells()
' Needs the 'JoinCellsPreserveFontFormatting' and 'CopyFontFormatting' procedures.
Const ProcTitle As String = "Join Cells"
Const wsName As String = "Sheet1" ' Worksheet (Tab) Name
Const sCols As Long = 3 ' Number of Source Columns to Join
Const dCol As String = "D" ' Destination Column
Const Delimiter As String = vbLf
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim ws As Worksheet: Set ws = wb.Worksheets(wsName)
Dim scrrg As Range: Set scrrg = ws.Range("A1").CurrentRegion ' has headers
Dim srg As Range
Set srg = scrrg.Resize(scrrg.Rows.Count - 1, sCols).Offset(1) ' no headers
Application.ScreenUpdating = False
Dim srrg As Range ' Source Row Range
Dim dCell As Range ' Destination Cell Range
For Each srrg In srg.Rows
Set dCell = srrg.EntireRow.Columns(dCol)
JoinCellsPreserveFontFormatting srrg, dCell, Delimiter
Next srrg
Application.ScreenUpdating = True
MsgBox "Data copied. Font formatting preserved.", vbInformation, ProcTitle
End Sub
Sub JoinCellsPreserveFontFormatting( _
ByVal SourceRange As Range, _
ByVal DestinationCell As Range, _
Optional ByVal Delimiter As String = vbLf)
' Needs the 'CopyFontFormatting' procedure.
Dim sCell As Range
Dim dString As String
For Each sCell In SourceRange.Cells
dString = dString & CStr(sCell) & Delimiter
Next sCell
Dim delLen As Long: delLen = Len(Delimiter)
dString = Left(dString, Len(dString) - delLen)
' Alternatively...
' For one row:
'dString = Join(Application.Transpose( _
Application.Transpose(SourceRange.Value)), Delimiter)
' For one column:
'dString = Join(Application.Transpose(SourceRange.Value), Delimiter)
DestinationCell.Value = dString
Dim sFont As Font
Dim s As Long
Dim dFont As Font
Dim d As Long
For Each sCell In SourceRange.Cells
For s = 1 To sCell.Characters.Count
d = d + 1
Set sFont = sCell.Characters(s, 1).Font
Set dFont = DestinationCell.Characters(d, 1).Font
CopyFontFormatting sFont, dFont
Next s
d = d + delLen
Next sCell
End Sub
Sub CopyFontFormatting( _
ByVal SourceFont As Font, _
ByVal DestinationFont As Font)
With DestinationFont
.FontStyle = SourceFont.FontStyle
.Color = SourceFont.Color
.Underline = SourceFont.Underline
' Add more, or not.
'.Size = SourceFont.Size
End With
End Sub
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With