VBA Excel - перечисление слов из разных ячеек через запятые и союз «и»
Возьмём, например, девять ячеек, в каждом будет по одному слову или выражению. Ячейки могут быть и пустыми! В десятой ячейке будут записываться все слова через запятую, а самое последнее слово — через союз «и». Суть в том, чтобы по условию искать последнюю и неединственную непустую ячейку, и если она соответствует условиям, перед её содержимым в ячейке вывода вместо запятой писать союз «и». Возможные примеры:
Ввод:
жир
парень
дом
автобус
город
кольцо
дети
велосипед
фонарь
Вывод:
жир, парень, дом, автобус, город, кольцо, дети, велосипед и фонарь
Если мы удалим пару слов из этого списка (тире обозначает пустую ячейку):
-
парень
дом
-
город
кольцо
дети
-
-
получится: парень, дом, город, кольцо и дети
Если в вводе только одна ячейка содержит слово или выражение, то в выводе должно получиться, например: город
Ответы (2 шт):
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
Спокойно съест и диапазоны-многострочники.
Да - пробелы в значениях весьма нежелательны. Я бы даже сказал - недопустимы.
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
