Страницы: 1
RSS
Сцепить значение 4-х ячеек, игорируя пустые
 
Добрый день! нужна помощь. Имеется таблица в которой нужно сцепить 4 столбца C-F и поместить результат в столбец G. но таким образом, чтоб там, где пустые ячейки не было двух запятых ,, 468,, должно быть 468 без запятой.  не должно быть 468,, 109 должно быть 468,109 и т.д. То есть, где пустота ячейка игнорируется.

БЛАГОДАРЮ
 
Я бы предложил две последовательные запятые заменить одной при помощи формулы ПОДСТАВИТЬ() или инструмента НАЙТИ-и-ЗАМЕНИТЬ...
 
IKor,Хорошо, попробую таким путём. Но помнится мне есть некая формула СцепитьЕСЛИ если ячейка пустая или иные способы
 
Вы, безусловно, правы
3 способа склеить текст из нескольких ячеек
Замена текста функцией ПОДСТАВИТЬ (SUBSTITUTE)
Склеивание текста по условию
Изменено: IKor - 16.09.2019 15:00:25
 
Тут нужно на VBA формулу написать СцепитьЕсли если пустые ячейки, но я не силён в VBA
 
Slava977, ну 3 вариант предложенный IKor, там макрос.
и еще ВАРИАНТ
Не бойтесь совершенства. Вам его не достичь.
 
=ЕСЛИ(здесь="";"";здесь&",")
и так же для оставшихся трех.
 
Спасибо всем за помощь
 
Цитата
Slava977 написал:
на VBA формулу написать
Код
Function СцепитьЕсли(r)
    Dim arr()
    Application.Volatile
    For i = 1 To r.Columns.Count
        If r(1, i).Text <> "" Then
            k = k + 1
            ReDim Preserve arr(1 To k)
                arr(i) = r(1, i).Text
        End If
    Next
    СцепитьЕсли = Join(arr, ",")
End Function
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik,Благодарю
 
Код
Function CONCATENATErange(myRange As Range, Optional mySeparator As String = "") As String
CONCATENATErange = ""
For Each rr In myRange
  If rr.Value <> "" Then
    CONCATENATErange = CONCATENATErange & rr.Value & mySeparator
  End If
Next
If CONCATENATErange <> "" Then CONCATENATErange = Left(CONCATENATErange, Len(CONCATENATErange) - 1)
End Function

Ещё нашел пример кода, но он обрезает 466 на 46.

Изменено: Slava977 - 16.09.2019 16:10:21
 
Вагон, и маленькая тележка
 
Slava977, приветствую! Внесу свои 5 копеек с контролем дубликатов
Код
Function СцепитьДиапазон(Диапазон As Range, Optional Разделитель$ = "—", Optional УникальныеТолько As Boolean) As String
Dim x, arr, arr1x() As String, ar As Range, n&

On Error GoTo er
    If УникальныеТолько Then
        Dim dic As New Dictionary
        For Each ar In Диапазон.Areas
            arr = ar.Value2
            If IsArray(arr) Then
                For Each x In arr
                    If Len(x) Then x = dic(x)
                Next x
            Else
                If Len(arr) Then x = dic(arr)
            End If
        Next ar
        If dic.count > 0 Then СцепитьДиапазон = Join(dic.Keys, Разделитель)
    Else
        ReDim arr1x(Диапазон.count - 1)
        For Each ar In Диапазон.Areas
            arr = ar.Value2
            If IsArray(arr) Then
                For Each x In arr
                    If Len(x) Then arr1x(n) = x: n = n + 1
                Next x
            Else
                If Len(arr) Then arr1x(n) = x: n = n + 1
            End If
        Next ar
        If n = 0 Then Exit Function
        If n - 1 <> UBound(arr1x) Then ReDim Preserve arr1x(n - 1)
        СцепитьДиапазон = Join(arr1x, Разделитель)
    End If
er: End Function
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх