Dnes som niečo podobné robil, preto som sa k tomu vrátil.
Skúsil som upraviť aj fnc od eLCHa tak, aby eliminovala zdvojené oddeľovače a oddeľovač na konci, pri prázdnych bunkách:
Function CONCATENATE_RANGE(rRange As Range, Optional sDelimiter As String = ",") As String
Dim pos As Long, DoubleDelimiter As String
DoubleDelimiter = sDelimiter & sDelimiter
CONCATENATE_RANGE = Join(Evaluate("TRANSPOSE(" & rRange.Address & ")"), sDelimiter)
pos = 1
Do Until pos = 0
CONCATENATE_RANGE = Replace(CONCATENATE_RANGE, DoubleDelimiter, sDelimiter)
pos = InStr(pos, CONCATENATE_RANGE, DoubleDelimiter)
Loop
CONCATENATE_RANGE = Left(CONCATENATE_RANGE, Len(CONCATENATE_RANGE) - IIf(Right(CONCATENATE_RANGE, Len(sDelimiter)) = sDelimiter, Len(sDelimiter), 0))
End Function
Ako sa vyhnúť cyklu pri odstraňovaní zdvojených (a viac) oddeľovačov ale neviem.
To s pomocným listom je zaujímavé. Ani jedno ale nedokáže spojiť 2D oblasť.
Preto si myslím, že toto je lepšie a spojí 2D:
Function fSpoj(ByRef Rozsah As Range, Optional Oddel As String = ",") As String
Dim Bunka As Range
For Each Bunka In Rozsah
If Bunka <> "" Then fSpoj = fSpoj & IIf(Bunka.Address = Rozsah.Cells(1).Address, "", Oddel) & Bunka
Next Bunka
End Functioncitovat