Страницы: 1
RSS
Сцепить значения ячеек в один порядковый номер
 
Коллеги, помогите пожалуйста с проблемой:
Задача по сути простая - сцепить значения ячеек в один порядковый номер
То есть в приложенном файле в ячейках B3, B7, B11, B15 должны быть сцепки ячеек D2+E2+F2+G2+H2, D3+E3+F3+G3+H3 и т.д. соответственно..
Но проблема в том, что при копировании номера строк, естественно, меняются на параллельные, а нужно чтобы были по порядку

Мысль была такая, чтобы задать переменную, определяющую номер последней заполненной строки в столбце D и подставляющей её в формулу сцепки в ActiveCell
Примерно так:
Код
Sub Fill()

Dim RowCount as Integer
RowCount = Sheets("Лист1").Range("D1:D" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
ActiveCell.Formula = "=CONCATENATE(RowCount - 1 & 4; RowCount - 1 & 5 ... RowCount - 1 & 8)

End sub
Но такое ощущение что функция Сцепить понимает только текст, и значение переменной туда никак не подставишь..
Так ли это?
 
Подставишь, если умеешь собирать стрку:
Код
Formula = "=CONCATENATE(" & RowCount & "....
 
Вариант формулой
Код
=СЦЕПИТЬ(СМЕЩ($D$1;ЦЕЛОЕ(СТРОКА()/4)+1;0);СМЕЩ($E$1;ЦЕЛОЕ(СТРОКА()/4)+1;0);СМЕЩ($F$1;ЦЕЛОЕ(СТРОКА()/4)+1;0);СМЕЩ($G$1;ЦЕЛОЕ(СТРОКА()/4)+1;0);СМЕЩ($H$1;ЦЕЛОЕ(СТРОКА()/4)+1;0))
 
Вариант макросом
Код
Sub LowStep()
    Dim y As Long
    Dim u As Long
    u = 2
    For y = 3 To 15 Step 4
        Cells(y, 2).Formula = Replace("=RYC4&RYC5&RYC6&RYC7&RYC8", "Y", u)
        u = u + 1
    Next
End Sub
И с другим вариантом формирования строки формулы.
Код
Sub LowStep2()
    Dim y As Long
    Dim u As Long
    Dim s As String
    
    Dim arr As Variant
    ReDim arr(4 To 8)
    For y = 4 To 8
        arr(y) = "RYC" & y
    Next
    s = Join(arr, "&")
    Erase arr
    s = "=" & s
    
    u = 2
    For y = 3 To 15 Step 4
        Cells(y, 2).Formula = Replace(s, "Y", u)
        u = u + 1
    Next
End Sub
Изменено: МатросНаЗебре - 22.04.2021 10:00:16
 
Цитата
hyperion3330 написал:
такое ощущение что функция Сцепить
такое ощущение, что вы даже не пытались открыть описане функции СЦЕПИТЬ, что почитать как она работает и какие ограничения имеет

если размышлять: "Функция СЦЕПИТЬ работает коряво!"
то вся ответственность оказывается на функции СЦЕПИТЬ и ничего тут не поделаешь,
а если подумать: "Что в моем коде написано не так?"
то есть возможность исправлять собственный код и добиться желаемого результата,
а не грустить о том "насколько корява СЦЕПИТЬ..." и ничего не делать достижения поставленной цели

и по теме:
Цитата
hyperion3330 написал:
Функция Сцепить и её особенности
функция СЦЕПИТЬ сцепляет переданные ей аргументы в строку текста (аргументами могут быть фрагменты текста или ссылки на ячейки)
особенности функции следующие:
1. количество переданных аргументов не может превышать 253 шт.
2. если длина итоговой строки окажется больше 32767 символов - функция вернет ошибку
больше особенностей у СЦЕПИТЬ нет, и это информация получена из открытых источников, а не из закрытой рассылки для избранных
Изменено: Ігор Гончаренко - 22.04.2021 10:26:43
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Hugo, спасибо большое! Именно то что нужно, но почему-то нигде не мог найти ответа  :)

МатросНаЗебре, спасибо за варианты, но у Hugo получается компактнее и намного проще   :oops:  
 
Цитата
Ігор Гончаренко написал:
информация получена из открытых источников
- а там обычно не упоминаются самые интересные особенности :)
 
Дальше перед кавычками ставим букву столбца...
Код
ActiveCell.Formula = "=CONCATENATE(C" & RowCounter - 1 & ")"

и получается запись вида "=СЦЕПИТЬ(C17)..  :)

Замечательно, спасибо за помощь!
Изменено: hyperion3330 - 22.04.2021 12:26:17
 
hyperion3330, покажите полный макрос в примере...вообще зачем использовать функцию если можео просто сделать все макросом
Изменено: Mershik - 22.04.2021 12:27:10
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, извиняюсь, не заметил что у меня ячейка, на которую ссылался была пустая  :oops:  
Страницы: 1
Наверх