Страницы: 1
RSS
Вставка даты через условие
 
Доброго времени суток всем! Есть такой вопрос. Нужно вставить текущую дату в ячейку через условие, например если A1=1, то A2=сегодня(),  но чтобы впоследствии эта дата не менялась. По форумам полазил, ответа не смог найти. А вроде задача не сложная... В итоговом файле с данными будут строки с выполнением этапов работ от 0 до 100 %  и я хочу сделать, чтобы строкой ниже, при 100%, автоматически вставлялась дата окончания этапа.
 
Цитата
Stepnoy написал: но чтобы впоследствии эта дата не менялась
Формулой так не сделать.
 
Уточню: такое возможно, но с использованием итеративных вычислений. А инструмент предназначен не для этого.
 
vikttur, итерации же действуют для всего листа? И если поставить 1 итерацию то вставка даты будет работать, но слетят все остальные вычисления.
Юрий М, Как-то можно еще это реализовать?
 
Макросом.
 
Я о том и писал - итеративные вычисления - специнструмент, который в данном случае применить можно, но не нужно :)
Вычисления не слетят, если итерации до этого были запрещены. Но есть минусы, которые, возможно, проявятся: включение итеративных вычислений в других открытых книгах (беда! там они не нужны! :)), пропуск случайного зацикливания вычислений...
 
vikttur, Ладно, на итерации забили)
Как написать макрос? В VBA опыта нет. Если кому интересно и готов помочь выложу файлик который готовлю для людей которые его будут только заполнять. Он должен быть максимально прост и "автоматичен"))  
 
Код
Private Sub Worksheet_Calculate()
Dim cell As Range
    For Each cell In [C3:C33]
        If cell.Value = "1" Then 'если ячейка равна 1
            cell.Next = Date    ' в ячейку справа пишем дату
        End If
        'чет тут не получается
        'If cell.Value <> "1" Then 'если ячейка не равна 1
           'cell.Next = ""    ' в ячейку справа очищаем
        'End If
    Next
End Sub
вот как пример заполните факт чтоб было 100% исполнение увидите
ПС пример корявенький так как пытался сделать чтоб затирало но чет не выходит не рунописец я
Лень двигатель прогресса, доказано!!!
 
Сергей, а можно как-то код поправить так чтобы были условия:
1. Диапазон - (I2:S300)
2. Условие - если (I3="да" и I5=100%), то I4=Date
Только чтобы окно было скользящим на весь диапазон, построчно  
 
Stepnoy, не силен в макросах сами видите нга втором условии затупил так шо ждите рунописцев
Лень двигатель прогресса, доказано!!!
 
Можно. Например, так:
Код
Sub Stepnoy()
    Dim lngI As Long
    Dim lngJ As Long
        For lngJ = 2 To 300 Step 6 'пробегаемся по всем строкам диапазона с 2-й по 300 с шагом 6
            For lngI = 9 To 19 'пробегаемся по каждому столбцу в диапазоне с I по S
            
                'если нужные ячейки в столбце содержат ДА и 100%
                If Cells(lngJ + 1, lngI) = "ДА" And Cells(lngJ + 3, lngI) = 1 Then
                'вставляем в нужную ячейку текущую дату и текущее время (если время не нужно - можно формат добавить)
                    Cells(lngJ + 2, lngI) = Now
                End If
            Next lngI
        Next lngJ
End Sub

Кому решение нужно - тот пример и рисует.
 
Пытливый, Круто!!! Спасибо!! Теперь смогу сам примитивные макросы писать)) Только у меня почему-то он автоматом не работает, нужно нажимать "выполнить макрос". Это где-то включается или нужно писать код дополнительный?
 
Макрос запускают, либо ручками (для удобства можно повесить элемент управления - кнопку на лист и назначить макрос на нажатие этой кнопки). Также можно привязать выполнение макроса к событию, происходящем на листе - изменениям в определенных ячейках, например. В этом случае надо дописать проверку - если изменяемая ячейка попадает в определенный диапазон - запускать макрос.
Как-то так.
Кому решение нужно - тот пример и рисует.
 
Пытливый, так размышления поправьте если нет, на следующий день если макрос пробежится по этим ячейкам узнав что в одной ячейке "да" в другой "100%" он там опять не поставит дату сегодня, хотя там уже было исполнение вчера, может добавить еще если что в данной ячейке должно быть пусто
пс эт мои размышления из-за не понимания кода мож там все правильно
Лень двигатель прогресса, доказано!!!
 
Вы все правильно говорите,  добавляем еще одно условие:
Код
Sub Stepnoy()
    Dim lngI As Long
    Dim lngJ As Long
        For lngJ = 2 To 300 Step 6 'пробегаемся по всем строкам диапазона с 2-й по 300 с шагом 6
            For lngI = 9 To 19 'пробегаемся по каждому столбцу в диапазоне с I по S
             
                'если нужные ячейки в столбце содержат ДА и 100%, и целевая ячейка ПУСТАЯ
                If Cells(lngJ + 1, lngI) = "ДА" And Cells(lngJ + 3, lngI) = 1 And Cells(lngJ + 2, lngI)="" Then
                'вставляем в нужную ячейку текущую дату и текущее время (если время не нужно - можно формат добавить)
                    Cells(lngJ + 2, lngI) = Now
                End If
            Next lngI
        Next lngJ
End Sub

Кому решение нужно - тот пример и рисует.
 
Предлагаю так: в код "Лист 1" вставить такой макрос, который будет отслеживать изменения в соответствующих ячейках с процентом выполнения и вставлять дату в ячейку окончания работы
Код
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
    If .Count > 1 Then Exit Sub
    If .Column > 7 And .Column < 19 Then _
    If .Row = 5 Or .Row = 11 Then If .Value = 100 Then Cells(.Row - 1, .Column) = Date
End With
End Sub
Изменено: МВТ - 11.03.2015 21:54:28 (Добавил файл)
 
Решил воспользоваться кодом МВТ, немного допилил и вроде все работает так как я хочу. Наверно можно все это собрать более компактно, но у меня не вышло)
Код
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
    If .Count > 1 Then Exit Sub
    If .Column > 8 And .Column < 20 Then _
    If .Value = "НЕТ" Then Cells(.Row + 1, .Column) = ""
    If .Value = "НЕТ" Then Cells(.Row + 2, .Column) = ""
    If .Value = 1 And Cells(.Row - 2, .Column) = "ДА" Then Cells(.Row - 1, .Column) = Date
    If .Value <> 1 And Cells(.Row - 2, .Column) = "ДА" Then Cells(.Row - 1, .Column) = ""
End With
End Sub

Такой вопрос, что означает вот эта строка?
Код
If .Count > 1 Then Exit Sub
Пытливый, кстати этот макрос работает без дополнительного выполнения или нажимания кнопок. Т.е. как только ставлю 100% в нужной ячейке вставляется дата.
 
Цитата
Stepnoy написал: что означает вот эта строка? <...>
Это означает следующее: если изменения произошли более, чем в одной ячейке, то выходим из процедуры.
 
Цитата
Stepnoy написал: Пытливый, кстати этот макрос работает без дополнительного выполнения или нажимания кнопок. Т.е. как только ставлю 100% в нужной ячейке вставляется дата.
А Пытливый Вам об этом ведь писал ))
Цитата
Пытливый написал: Также можно привязать выполнение макроса к событию, происходящем на листе - изменениям в определенных ячейках, например.
 
Совершенно верно, работа макроса завязана на событие "изменение в ячейке", как я и писал ранее.
Единственное, в Вашем коде срабатывание макроса будет при внесении изменений в любую ячейку листа (а не только в тех, в которые вводят проценты). Например,
если Вы решите изменить задним числом дату выполнения задания.
Может получится неудобно, т.к. результат работы макроса нельзя откатить назад.
Кому решение нужно - тот пример и рисует.
 
Цитата
А Пытливый Вам об этом ведь писал )
Верно, не внимательно читал, я просто думал это относиться к каким-то дополнительным движениям при работе с книгой
Цитата
Например,если Вы решите изменить задним числом дату выполнения задания.
Попробовал поменять дату задним числом, вроде все работает. Пока заново не вводишь 100% дата не меняется.

Всем спасибо за помощь и поддержку!
Страницы: 1
Наверх