Страницы: 1
RSS
Макрос на добавление в конец формулы новых условий
 
Добрый день. В полноценном масштабе задача выглядит так: Определить порядок сроков в столбце А, далее в столбец С по порядку вывести количество дней в эти сроки. Пример во вложении. На данный момент реализовано, как перезапись ячейки:
Range("C1").Value = Range("C1").Formula & "+" & Periods(i).CountDay
но мне нужно, чтобы кол-во дней вставало поэтапно, не перезаписываясь каждый раз: к формуле, которая уже есть в ячейке  прибавлялось новое значение

Помогите, пожалуйста.
 
sanchopanso, Добрый день, позвольте вопрос, если вам нужно посчитать общее количество дней указанное в ячейке периодами, не целесообразнее ли просто его посчитать в коде и ввести в столбец С результат ? Зачем вся эта заморочка с макросом который должен что то добавлять в формулу ?
 
Посмотрите пример во вложении.
Если Вам нужна именно формула, то попробуйте изменять значения в столбце "A", согласно Вашей структуре данных. В столбце "C" будет результат.
Если же Вам требуется получить порядок периодов, то воспользуйтесь UDF (пример в столбце "D"). Функция вернет все периоды, разделенные символом ";", а также сумму этих периодов (значение в скобках).
Изменено: SAS888 - 11.09.2018 06:50:19
Чем шире угол зрения, тем он тупее.
 
Александр П. дело в том, что мне не нужна по итогу сумма. Мне именно нужно поэтапное прописывание кол-ва дней за период, начиная с первого дня и далее по возрастанию.
Необходимо как промежуточное звено между еще одним макросом, который написан не мной, но работает он именно по этой логике
 
SAS888,  к сожалению, мне нужно именно последовательное суммирование в ячейках кол-ва дней в периоде, т.е.

1-3;11-15;16-17          
4-10;18-20
Нужно так:

1 Ячейка С1 =3
2 Ячейка С2=7
3 Ячейка С1= +5  (при этом старое значение неперезатирается а именно добавляется новое), т.е. я н могу сделать следующее С1=С1+5
4 С1=+2
5 С2=+3
 
В примере, при изменении значения в столбце "A", в столбце "C" той же строки будет изменяться формула.
Т. е. для A1 = 1-3;11-15, в C1 будет формула "= 3 + 5". А значение ячейки 8.
При изменении A1 = 1-3;11-15;16-17, в C1 будет формула  "= 3 + 5 + 2". Значение 10. и т. д.
А Вам что нужно?
Чем шире угол зрения, тем он тупее.
 
Может быть Вам требуется в столбце "C" получить строковые значения периодов, разделенные символом "+" ?
Тогда так:
Код
Function Periods(rng As String) As String
    Dim s As String, x, q
    For Each x In Split(rng, ";")
        q = Split(x, "-")
        s = s & "+" & q(UBound(q)) - q(LBound(q)) + 1
    Next
    If s = "" Then Periods = "" Else Periods = Mid$(s, 2)
End Function
Пример во вложении.
Чем шире угол зрения, тем он тупее.
 
Мне нужно не то, чтобы формула менялась а чтобы сроки (кол-во дней за этот срок) в соответствующие строке по столбцу С вставали от меньшей даты к большей (суммировались). Макрос не просто записывал бы в ячейку кол-во дней вкаждый период, а от меньшего к большему проставлял кол-во дней в ячейках.
Т.е. алгоритм в первом файле прописан уже, единственное чтонужно  это чтобы ячейка полностью не перезаписывалась а на каждом шаге к имеющемуся значению прибавлялось число (не было перезаписи содержимого ячейки, как в том случае, если мы указываем С1=С1+5) , мне нужно чтобы к формуле дописывалась +5 (допустим)
Изменено: sanchopanso - 11.09.2018 09:27:30
 
SAS888, спасибо, что помогаете.
Но в  последнем примере нарушается алгоритм записи, который я предполагаю.
В ячейку вносится одновременно все сроки из ячейки А, а нужно поэтапно от  минимума к максимуму  
 
Цитата
В ячейку вносится одновременно все сроки из ячейки А, а нужно поэтапно от  минимума к максимуму  
Т. е. требуется сортировка по возрастанию? См. пример во вложении. Так?
Чем шире угол зрения, тем он тупее.
 
SAS888, нет функцией тут не подойдет
Наверное я непонятно объясняю.
Нужен код как я записала, едеинственное отличие, что в ячейку не перезаписвались данные а добавлялись поэтапно каждый срок
 
Давайте так:
1. Что исходно есть в ячейке "A1", и что при этом должно быть в "C1?
2. Изменяем значение ячейки "A1" (укажите как изменяем), и что должно появиться в ячейке "C1".
3. Приведите примеры для нескольких ячеек с разными данными и разными изменениями.

Почему функция не подходит?
Подойдет ли запуск макроса по событию изменения контролируемых ячеек?
Если нет, то как (каким образом) запускать макрос?
Чем шире угол зрения, тем он тупее.
 
SAS888,
1. В столбце А изначально месяц разбит по периодам, причем в одной ячейке м.б. сколько угодно периодов, расположенных не в хронологическом порядке.  
2. Изменения в ячейках не планируются. Один раз создается список в столбце "А" и далее единоразово прогоняем макрос.
3. Допустим месяц разбит следующим образом (см. Вложение):


Алгоритм обязан строго соблюдаться, нельзя в ячейку сразу записать всю формулу. Пример, который я приложила работает именно так, как мне нужно за исключением того, что  когда наступает действие с ячейкой,в которой уже есть какая-нибудь запись, то в ячейке происходит перезапись того, что уже там было + новый период (С1=С1.formula+новый период)

Можно ли сделать как-нибудь так, чтобы значение не перезаписывалось заново а к тому, что есть в ячейке дописывалась "+4" (например)? Возможно ли вообще такое?
Изменено: sanchopanso - 12.09.2018 05:22:23
 
Все равно, у меня нет полного понимания того, что Вам требуется.
Посмотрите очередное вложение. Может угадал...
Чем шире угол зрения, тем он тупее.
Страницы: 1
Наверх