Страницы: 1
RSS
Изменение значений нескольких ячеек, при изменении данных в одной?
 
Добрый день!  
Есть анкета. Тестируемый вводит данные (определенные ячейки, например их 5 штук- B2, С2, D2, E4, F6). Есть ячейка, например A1, в которой есть данные-проверка (список- значения только "да" или "нет").    
Как в зависимости от значения в A1, если "да", то присвоить значения из ячеек B2, С2, D2, E4, F6 в ячейки  
B4, С4, D4, E6, F8. Если "Нет", то пробел в каждую.  
Заранее спасибо!  
 
P.S. Пробовал с помощью Private Sub Worksheet_Change(ByVal Target As Range), но не получается.. Если менять данные вручную, то работает..
 
А формула ЕСЛИ() чем не устраивает?  
=ЕСЛИ(А1="да";В2;" ") - в В4
 
Спасибо, формула работает, но получается не универсально..  
Если пользователь выбрал "Да", то в В4 вместо формулы присвоилось значение из B2, если выбрать "Нет", а потом опять "Да", то не работает.. То есть формула сработает только 1 раз..    
Подскажите, как это обойти?
 
Не совсем правильно сформулировал..  
Если пользователь ввел в В4 любую информацию, то формула затирается..
 
Файл?
 
Проверьте галку: Сервис - Параметры - Вычисления - Автоматически  
Если стоит, то файл в студию!  
Еще возможно проблемы с регистром ("да" или "Да"), тогда  
=ЕСЛИ(ПРОПИСН(А1)="ДА";В2;" ")    
А файлик, лучше приложить, чтобы я не гадал на кофейной гуще.
 
{quote}{login=Дмитрий}{date=22.07.2008 12:23}{thema=}{post}Не совсем правильно сформулировал..  
Если пользователь ввел в В4 любую информацию, то формула затирается..{/post}{/quote}Гениально!  
Вы уж определитесь, что у Вас в В4 - ячейка для ввода или формула.
 
Спасибо за варианты!  
Виноват, я не совсем корректно сформулировал задачу..  
Действительно, хотелось, чтобы при выборе "Да", в B4 присваивалось значение из ячейки B2, а также оставалась возможность вводить данные в В4 вручную при выборе "Нет"..  
А вот тонкое место - после введения данных вручную невозможно при выборе "Да" присвоить значение из В2, что логично (формулы-то больше нет)...  
Можно это как-нибудь победить или начать искать другие варианты?  
 
PS Формула работает, галка - Автоматически стоит, "Да" или "Нет" выбираются из выпадающего списка..
 
Вот файл, выбор в ячейке A1  
Спасибо!
 
Варианты:  
1. В В4 формула =ЕСЛИ(А1="да";В2;В3), в В3 вводится некое значение если "нет"  
2. тот самый Private Sub Worksheet_Change(ByVal Target As Range), с которым у Вас "не получается":  
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target.Count > 1 Then Exit Sub  
If Not Intersect(Target, Range("A1")) Is Nothing Then  
Application.EnableEvents = False  
If Target.Value = "Да" Then  
Range("B4").Value = Range("B2").Value  
Else  
Range("B4").Value = ""  
End If  
Application.EnableEvents = True  
End If  
End Sub  
Видите как все просто, когда есть файл.
 
Спасибо, огромное!!!  
2 вариант мне подошел!  
Не могли бы Вы дать пояснения по коду:  
If Target.Count > 1 Then Exit Sub  
Это счетчик?  
И эта строка, если не сложно..  
If Not Intersect(Target, Range("A1")) Is Nothing Then  
 
И еще вопрос. Если мне нужно, чтобы в зависимости от другой ячейки (например A10) работала эта же схема, но вместе с A1, это можно сделать? (Выбираю в A1 "Да", меняются B2, C2 и т.д., Выбираю в A10 "Да", меняется в B10, C10 и т.д.)  
Еще раз спасибо!
 
Попробуйте так - создать свой диапазон контролируемых ячеек  
set myControlRange = Union(Range("A1"),Range("A10"))  
 
потом проверить происходит событие в данном диапазоне  
If Not Intersect(Target, myControlRange) Is Nothing Then  
и в Вашем случае проверить адрес и выполнить действия  
if Target.Address = Range("A1").Address then  
или для А1  
else или для А10  
ну и еше один конец Иф
 
Мне кажется несколько ячеек контролировать легче в Select Case, чем через кучу If.  
Например, так:  
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target.Count > 1 Then Exit Sub  
Select Case Target.AddressLocal(False, False)  
Case "A1"  
Application.EnableEvents = False  
If Target.Value = "Да" Then  
Range("B4").Value = Range("B2").Value  
Else  
Range("B4").Value = ""  
End If  
Application.EnableEvents = True  
Case "A10"  
'что-то делаем для А10  
Case "A20"  
'что-то делаем для А20  
End Select  
End Sub  
 
 
>Не могли бы Вы дать пояснения по коду:  
>If Target.Count > 1 Then Exit Sub  
Перевод: Если количество изменнных ячеек > 1 тогда выход из Subы  
Нужно для предупреждения ошибок в случае одновременного изменения группы ячеек.
 
Спасибо, большое!
Страницы: 1
Читают тему
Наверх