Страницы: 1
RSS
Перевод на язык кода, if then
 
Приветствую!

VBA практически не владею.
Помогите перевести следующее на язык кода: если ячейка в диапазоне А1-А100 изменяется и в ней прописывается текст "Проект", то текст в соседней ячейке меняется на "Выполняется".
Важно учесть то, чтобы данное правило выполнялось только в том случае, если ячейка именно изменяется на "Проект", чтобы ни при каком условии не сканировались все ячейки с содержанием "Проект".
Спасибо!
 
squadgazzz, зачем ВБА?
Код
=ЕСЛИ(A1="Проект";"Выполняется";"")

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan пишет:
=ЕСЛИ(A1="Проект";"Выполняется";""  ;)  
Потому что, вместо "Выполняется", планируется применение макроса или другого кода.
к примеру:

Код
                  .Value = "Выполняется"
                  .Interior.Color = RGB(255, 255, 0)
                  .HorizontalAlignment = xlCenter
 

Нужно код прописать именно в книгу, а не в ячейку.
Изменено: squadgazzz - 21.02.2014 11:23:23
 
Имхо
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
Debug.Print .Row, .Column, .Value
If .Row <= 100 And .Column = 1 And .Value = "Проект" Then Cells(.Row, .Column + 1).Value = "Выполняется"
End With
Application.EnableEvents = True
End Sub
 
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
    If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
        If Target = "Проект" Then Cells(Target.Row, 2) = "Выполняется"
    End If
End Sub

 
 
squadgazzz, мне остаётся не понятно зачем макрос, если с заданием справляется формула, а для раскраски достаточно условного форматирования.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
Kuzmich пишет:
Код
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
    If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
        If Target = "Проект" Then Cells(Target.Row, 2) = "Выполняется"
    End If
End Sub

  
Вот. классно!
Но я додумал до конца как сделать!
Если значение выделенной ячейки изменяется на "Проекты", то меняем ячейку стоящую на 1 клетку правее на "Выполняется"
Как это написать?
 
Цитата
squadgazzz пишет:
Но я додумал до конца как сделать!
...
Как это написать?
Так "додумали" или не знаете? ))
 
Цитата
Юрий М пишет:
Так "додумали" или не знаете? ))
додумал, что мне надо в итоге.
но как сделать не знаю))

У меня уже такой код. Что и куда вставлять, чтобы не конфликтовать ни с чем.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
    For Each cell In Target   'проходим по всем измененным ячейкам
    
       If Not Intersect(cell, Range("A1:A9999")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 3)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
            With cell.Offset(0, 5)         'вводим в соседнюю справа ячейку дату
                 .Value = ""
                 .Interior.Color = xlNone
                           
            End With
            With cell.Offset(0, 2)         'вводим в соседнюю справа ячейку дату
                  .Value = "Выполняется"
                  .Interior.Color = RGB(255, 255, 0)
                  .HorizontalAlignment = xlCenter
                           
            End With
                End If
       If Not Intersect(cell, Range("E1:E9999")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 3)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
       End If
       If Not Intersect(cell, Range("C1:C9999")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 5)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
       End If
       
    Next cell
    
End Sub
 
Изменено: squadgazzz - 21.02.2014 12:02:57
 
Процитированный код Кузьмича с задачей справляется. Зачем в последнем коде цикл - не понял.

Если хотите контролировать диапазон А1:А100, то зачем задаёте Range("A1:A9999")? А затем Е и С, если всегда нужен столбец А?
 
squadgazzz это по вашему что делает?
Код
Cells(Target.Row, 2) = "Выполняется" 
здесь 2 - это второй столбец.
 
Цитата
Юрий М пишет:
Процитированный код Кузьмича с задачей справляется. Зачем в последнем коде цикл - не понял.

Если хотите контролировать диапазон А1:А100, то зачем задаёте Range("A1:A9999"  ;)  ? А затем Е и С, если всегда нужен столбец А?
уточню
когда меняется выделенная ячейка,  неважная какая на "Проект", то стоящая на 5 ячеек правее от неё должна меняться на "Выполняется"
а ещё лучше, должна применяться такая функция:

Код
                        .Value = "Выполняется"
         .Interior.Color = RGB(255, 255, 0)
         .HorizontalAlignment = xlCenter 
 
Цитата
squadgazzz пишет:
когда меняется выделенная ячейка,неважная какая на "Проект", то стоящая на 5 ячеек правее от неё должна меняться на "Выполняется"
Тогда
Код
target.offset(0,5)= "Выполняется"
 

Вы бы по пунктам расписали, что и в каком случае должно получаться:
1. В диапазоне (...) меняю значение - в диапазоне (...) должно получиться (...)
2. В диапазоне (...) ...
 
Цитата
Юрий М пишет:
Вы бы по пунктам расписали, что и в каком случае должно получаться:
1. В диапазоне (...) меняю значение - в диапазоне (...) должно получиться (...)
2. В диапазоне (...) ...
Ок, забудем все предыдущие сообщения.
Выделяю ячейку. Прописываю там "Проект" и в ячейке, удаленной на 5 ячеек, применяется код:

Код
 .Value = "Выполняется"      .Interior.Color = RGB(255, 255, 0)      .HorizontalAlignment = xlCenter 
Ну понятно, что случаться это должно в случае, если в выделенной ячейке написано "Проект" и ни что иное. Что нужно прописать и куда?
 
Требуется уточнение: что значит ЛЮБАЯ ячейка? Любая на листе или любая в контролируемом диапазоне?
 
Для диапазона А1:А100
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
    If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
        If Target = "Проект" Then
            With Target.Offset(0, 5)
                .Value = "Выполняется"
                .Interior.Color = RGB(255, 255, 0)
                .HorizontalAlignment = xlCenter
            End With
        End If
    End If
End Sub
 
 
Цитата
Юрий М пишет:
Требуется уточнение: что значит ЛЮБАЯ ячейка? Любая на листе или любая в контролируемом диапазоне?
Любая на листе! Именно выделенная!
 
Если любая - удалите проверку: If Not Intersect(Target, Range("A1:A100") Is Nothing Then
 
Юрий, спасибо уже во второй раз! )
Тему можно закрывать
Страницы: 1
Читают тему
Наверх