VBA Excel - перечисление слов из разных ячеек через запятые и союз «и»

Возьмём, например, девять ячеек, в каждом будет по одному слову или выражению. Ячейки могут быть и пустыми! В десятой ячейке будут записываться все слова через запятую, а самое последнее слово — через союз «и». Суть в том, чтобы по условию искать последнюю и неединственную непустую ячейку, и если она соответствует условиям, перед её содержимым в ячейке вывода вместо запятой писать союз «и». Возможные примеры:

Ввод:

жир
парень
дом
автобус
город
кольцо
дети
велосипед
фонарь

Вывод: жир, парень, дом, автобус, город, кольцо, дети, велосипед и фонарь

Если мы удалим пару слов из этого списка (тире обозначает пустую ячейку):

-
парень
дом
-
город
кольцо
дети
-
-

получится: парень, дом, город, кольцо и дети

Если в вводе только одна ячейка содержит слово или выражение, то в выводе должно получиться, например: город


Ответы (2 шт):

Автор решения: Akina
Function my_concat(source As Range) As String
Dim tmp As String, onecell As Range
For Each onecell In source
    tmp = Trim(tmp & " " & onecell.Value)
Next
my_concat = StrReverse(Replace(Replace(StrReverse(tmp), " ", " ,"), " ,", " и ", , 1))
End Function

Спокойно съест и диапазоны-многострочники.

Да - пробелы в значениях весьма нежелательны. Я бы даже сказал - недопустимы.

→ Ссылка
Автор решения: vikttur
Function fMergeWords(rRng As Range) As String
    Dim sTxt As String
    Dim i As Long, n As Long
    
    For i = 1 To rRng.Cells.Count
        If rRng(i, 1).Value <> "" Then
            sTxt = sTxt & ", " & rRng(i, 1).Value
            n = n + 1
        End If
    Next i
    
    If n > 1 Then
        n = InStrRev(sTxt, ",") - 1
        sTxt = Left$(sTxt, n) & " и " & Mid$(sTxt, n + 2)
    End If
    
    fMergeWords = Mid$(sTxt, 3)
End Function

введите сюда описание изображения

→ Ссылка