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

БЛАГОДАРЮ
 
Я бы предложил две последовательные запятые заменить одной при помощи формулы ПОДСТАВИТЬ() или инструмента НАЙТИ-и-ЗАМЕНИТЬ...
 
IKor,Хорошо, попробую таким путём. Но помнится мне есть некая формула СцепитьЕСЛИ если ячейка пустая или иные способы
 
Вы, безусловно, правы
3 способа склеить текст из нескольких ячеек
Замена текста функцией ПОДСТАВИТЬ (SUBSTITUTE)
Склеивание текста по условию
Изменено: IKor - 16 Сен 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
Каждому For свой Next
 
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 Сен 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
Читают тему (гостей: 1)
Наверх