Страницы: 1
RSS
Склеить содержимое ячеек в таблице через запятую(обязательное условие)., не принимая во внимание пустые ячейки
 
Не могу без сторонней помощи найти решение.

Нужно склеить содержимое ячеек в таблице через запятую(обязательное условие), не принимая во внимание пустые ячейки.

Нашел в интернете описание подходящей функции
=ОБЪЕДИНИТЬ(Разделитель; Пропускать_ли_пустые_ячейки; Диапазон1; Диапазон2 ... )
, которая должна присудствовать в excel 2016 и позднее, но у меня почемуто в excel 2016 ее нету, или както по другому называется?...


Буду ОЧЕНЬ благодарен за помощь.
Фото и файл примера прикрепляю.
Изменено: yuraok - 23.06.2020 20:52:31
 
Код
Sub iConcatenate()
Dim i As Long
Dim iLastRow As Long
Dim j As Integer
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Range("E2:E" & iLastRow).ClearContents
    For i = 2 To iLastRow
      For j = 1 To 4
        If Cells(i, j) <> "" Then
          Cells(i, "E") = Cells(i, "E") & Cells(i, j) & ","
        End If
      Next
       If Cells(i, "E") <> "" Then
          Cells(i, "E") = Left(Cells(i, "E"), Len(Cells(i, "E")) - 1)
       End If
    Next
End Sub

 
Цитата
Kuzmich написал: код
Мне к сожалению непонятно как применять этот код к большим таблицам. Очень подходит функция =ОБЪЕДИНИТЬ но почемуто нету в моем екселе, может посоветует кто, в какой версии она есть, у меня excel 2016.
Изменено: yuraok - 23.06.2020 21:05:40
 
Здравствуйте. Я себе сделал аналог этой функции на ВБА, есть даже дополнительный функционал.
Код
Function ВСТРОКУ(Диапазон_ячеек As Range, Optional Разделитель As String = " ", _
                    Optional Игнорировать_пустые As Boolean = True, Optional В_обратном_порядке As Boolean = False) As String
            Dim myLine As String, countCells As Integer, CounerN As Integer, rngTemp As Range
    Select Case В_обратном_порядке
        Case False Or 0
            If Игнорировать_пустые = True Or Игнорировать_пустые = 1 Then
                For Each Cell In Диапазон_ячеек.Cells
                    If Not IsEmpty(Cell) Then
                        myLine = myLine & Cell.Text & Разделитель
                    End If
                Next Cell
                ВСТРОКУ = Application.WorksheetFunction.Trim(Left(myLine, Len(myLine) - Len(Разделитель)))
            ElseIf Игнорировать_пустые = False Or Игнорировать_пустые = 0 Then
                For Each Cell In Диапазон_ячеек.Cells
                    myLine = myLine & Cell.Text & Разделитель
                    Next Cell
                ВСТРОКУ = Left(myLine, Len(myLine) - Len(Разделитель))
            End If
        Case True Or 1 '---------------------True Or 1---------------------
                countCells = Диапазон_ячеек.Cells.Count
                Set rngTemp = Диапазон_ячеек
                If Игнорировать_пустые = True Or Игнорировать_пустые = 1 Then
                For CounerN = countCells To 1 Step -1
                    If Not IsEmpty(rngTemp.Cells(CounerN)) Then
                        myLine = myLine & rngTemp.Cells(CounerN).Text & Разделитель
                    End If
                Next CounerN
                ВСТРОКУ = Left(myLine, Len(myLine) - Len(Разделитель))
            ElseIf Игнорировать_пустые = False Or Игнорировать_пустые = 0 Then
                For Each Cell In Диапазон_ячеек.Cells
                        myLine = myLine & rngTemp.Cells(countCells - CounerN).Text & Разделитель
                    CounerN = CounerN + 1
                    Next Cell
                ВСТРОКУ = Left(myLine, Len(myLine) - Len(Разделитель))
            End If
    End Select
End Function
 
Цитата
DANIKOLA написал:
Здравствуйте. Я себе сделал аналог этой функции на ВБА, есть даже дополнительный функционал.
Спасибо, открыл Ваш файл и все работает, а в другом файле не работает.

Как мне пользоватся Вашим кодом, всегда копировать нужную таблицу в Ваш файл, или можно код перенести в мой файл? Как перенести код чтобы он работал в моем файле? Я полный чайник.
 
Доброе время суток.
Коллеги, а не проще ли Power Query? Тем более, что yuraok умеет им пользоваться :)
 
каков пример, такая и формула
=REPLACE(SUBSTITUTE(TEXT(SUMPRODUCT(A2:D2*10^(COLUMNS(A2:D2)-COLUMN(A2:D2)));REPT("\,0";COLUMNS(A2:D2)));",0";);1;1;)
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх