Очистить ячейки при изменении ячейки excel

 

Allleksey

Пользователь

Сообщений: 73
Регистрация: 23.10.2018

Коллеги, добрый день!

Есть 2 ячейки. Предположим А1 и А2.
Заполняется сначала А1, потом заполняется А2 (не важно, пусть произвольными данными)
Задача:
При изменении данных в ячейке А1 очистить данные в ячейке А2
Вопрос:
Как это сделать? Очень рассчитываю на Ваше содействие.

 

ivanok_v2

Пользователь

Сообщений: 712
Регистрация: 19.08.2018

#2

23.10.2018 12:58:03

Цитата
Allleksey написал:
Предположим А1 и А2.
Цитата
Allleksey написал:
не важно

как поставлено задачу, такое решение в стиле «Предположим»

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$2" Then Target.Offset(1, 0).ClearContents
End Sub

Изменено: ivanok_v223.10.2018 12:59:47

 

DopplerEffect

Пользователь

Сообщений: 527
Регистрация: 14.08.2017

#3

23.10.2018 13:00:45

Вот этот код в модуль листа где это нужно.

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("A1")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        Range("A2") = ""
       
    End If
End Sub
 

Allleksey

Пользователь

Сообщений: 73
Регистрация: 23.10.2018

#4

23.10.2018 13:05:47

Цитата
DopplerEffect написал: Вот этот код в модуль листа где это нужно.

Вы простите меня великодушно…
Где можно почитать, как вставить код в модуль листа?

Цитата
ivanok_v2 написал: как поставлено задачу, такое решение в стиле «Предположим»

Вопрос в том, что в файле большое количество ячеек, которое нужно очищать. И так же много ячеек, от которых зависит очистка данных.
По этому нужно принципиальное решение, которое можно транслировать на нужные ячейки…

Понимаю, что криво объяснил… Уж не серчайте, пожалуйста.  

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#5

23.10.2018 13:10:43

Цитата
в стиле «Предположим»

А это о том, что примера от Вас нет.
Пока Вас еще не сильно достали замечания модератора и поддевки завсегдатаев, ознакомьтесь с местными правилами — сэкономите и свое, и чужое время

 

Allleksey,

https://www.google.ru/search?q=%D0%BA%D0%B0%D0%BA+%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1­%82%D1%8C+%…

Если нужно для многих ячеек, то в строке Range(«A2») = «» поменять на что то типа Range(«A2:B2») = «» и в строке Range(«A1») что то типа Range(«A1:B1»)

 

Allleksey

Пользователь

Сообщений: 73
Регистрация: 23.10.2018

#7

23.10.2018 13:23:28

Цитата
vikttur написал:
ознакомьтесь с местными правилами

Спасибо, обязательно.

Цитата
DopplerEffect написал:
Если нужно для многих ячеек, то в строке Range(«A2») = «» поменять на что то типа Range(«A2:B2») = «» и в строке Range(«A1») что то типа Range(«A1:B1»)

«Прикрутил» код к странице. Изменение данных в ячейке D14 влечет очистку данных в ячейках D15-D20

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
 
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("D14")
     
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
 
        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        Range("D15:D20") = ""
        
    End If
End Sub

Как дополнить код, что бы независимо от этой задачи контролировалось изменение данных в ячейке D21, и если изменение было, то очищались все ячейки D22-D27

Подумал, и сделал вот так. Направляю сюда для проверки, насколько криво я сделал без опыта:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
 
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("D14")
     
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
 
        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        Range("D15:D20") = ""
        
    End If
    
    Dim KeyCells2 As Range
 
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells2 = Range("D21")
     
    If Not Application.Intersect(KeyCells2, Range(Target.Address)) _
           Is Nothing Then
 
        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        Range("D22:D27") = ""
        
    End If
    
     Dim KeyCells3 As Range
 
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells3 = Range("D8")
     
    If Not Application.Intersect(KeyCells3, Range(Target.Address)) _
           Is Nothing Then
 
        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        Range("D9:D13") = ""
        
    End If
End Sub

Изменено: Allleksey23.10.2018 13:34:28

 

Allleksey, вроде должно работать. По факту то желаемое делает код?  

 

Allleksey

Пользователь

Сообщений: 73
Регистрация: 23.10.2018

#9

23.10.2018 13:41:06

Цитата
DopplerEffect написал:
По факту то желаемое делает код?

Да, делает. Сейчас транслирую подобный код на все ячейки, которые должны работать подобным образом.

Спасибо огромное!!!

Предположим, вы хотите очистить диапазон указанного содержимого ячейки, если значение другой ячейки изменилось, как вы можете это сделать? Этот пост покажет вам способ решения этой проблемы.

Очистить указанное содержимое ячейки, если значение другой ячейки изменяется с кодом VBA


Очистить указанное содержимое ячейки, если значение другой ячейки изменяется с кодом VBA

Как показано ниже, при изменении значения в ячейке A2 содержимое ячейки C1: C3 будет очищено автоматически. Пожалуйста, сделайте следующее.

1. На рабочем листе вы очистите содержимое ячейки на основе изменений другой ячейки, щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код из контекстного меню. Смотрите скриншот:

2. В дебюте Microsoft Visual Basic для приложений окна, скопируйте и вставьте под кодом VBA в окно кода.

Код VBA: очистить указанное содержимое ячейки при изменении значения другой ячейки

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2")) Is Nothing Then
        Range("C1:C3").ClearContents
    End If
End Sub

Внимание: В коде B2 — это ячейка, на основе которой вы очищаете содержимое ячейки, а C1: C3 — это диапазон, из которого вы очищаете содержимое. Пожалуйста, измените их по своему усмотрению.

3. нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно.

Затем вы можете увидеть содержимое диапазона C1: C3 очищается автоматически при изменении значения в ячейке A2, как показано ниже.


Статьи по теме:

  • Как очистить содержимое поля со списком с кодом VBA в Excel?
  • Как одновременно очистить содержимое и форматирование в ячейках в Excel?
  • Как очистить содержимое именованного диапазона в Excel?
  • Как очистить ограниченные значения в ячейках в Excel?
  • Как очистить указанное содержимое ячейки при открытии и выходе из книги Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (38)


Оценок пока нет. Оцените первым!

Есть таблица со значениями. Нужно, когда я нажимаю delete в ячейке A1, автоматически очищать значения в ячейках H1 и Q1. Подскажите, пожалуйста, как это реализовать средствами VBA.


  • Вопрос задан

    более трёх лет назад

  • 1204 просмотра

Да, в excel есть события. Подстрой код Elvis под свой случай. Условие должно быть вроде if selection.column=1 and selection.value=»» then range(тут сам рэйндж).clearcontents
А постоянно селектить(выбирать) рейндж для удаления не нужно — это совершенно лишнее телодвижение.
Еще бы неплохо проверять выделение на количество ячеек.

Private Sub Worksheet_Change(ByVal Target As Range)
For Each t In Target
    If t.Column = 1 And t.Value = "" Then
        Range("H" & t.Row).ClearContents
        Range("Q" & t.Row).ClearContents
    End If
Next t
End Sub

Пригласить эксперта

А принципиально на delete?
Можно сделать так:

Sub del()
    Dim row As String
    row = ActiveCell.row
    Range("H" & row).Select
    Selection.ClearContents
    Range("Q" & row).Select
    Selection.ClearContents
    Range("A" & row).Select
    Selection.ClearContents
End Sub

После этого делаем назначение макроса например на Ctrl+k и нажимать эту комбинацию вместо delete. В макросе специально сделал сначала очистку ячейки в столбце «H» и «Q», а потом только в столбце «A». Это для того чтобы после выполнения макроса курсор был в столбце «A».


  • Показать ещё
    Загружается…

16 апр. 2023, в 16:39

80000 руб./за проект

16 апр. 2023, в 14:44

4500 руб./за проект

16 апр. 2023, в 13:46

1000 руб./за проект

Минуточку внимания

Очистка ячеек при вводе в другую ячейку

Leariska

Дата: Понедельник, 04.12.2017, 09:33 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день, ребята!
Есть 4 ячейки. Первая — список значений, остальные — заполнены данными. Нужно, чтобы при выборе любого нового значения в первой ячейке, данные в соседних стирались.
Нюанс в том, что это целая таблица и нужно, чтобы все строки аналогично работали.
Спасибо)

 

Ответить

buchlotnik

Дата: Понедельник, 04.12.2017, 09:41 |
Сообщение № 2

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Здравствуйте, так нужно?[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r&
    If Target.Address Like «$A$*» Then
        r = Target.Row
        Range(Cells(r, 2), Cells(r, 4)).ClearContents
    End If
End Sub

[/vba]

К сообщению приложен файл:

2784595.xlsm
(14.4 Kb)

 

Ответить

Leariska

Дата: Понедельник, 04.12.2017, 12:27 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

buchlotnik, спасибо! Работает, как надо! :)

 

Ответить

vikttur

Дата: Понедельник, 04.12.2017, 12:57 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

В этом макросе не очень страшно, но…
Процедура события листа. Срабатывает каждый раз при изменении на листе.
Здесь макрос срабатывает два раза. Если, к примеру, менять три ячейки по отдельности, макрос сделает 4 прохода. А если цикл?

Перед изменениями нужно отключать события, после изменений — включать:
[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 Then Exit Sub ‘ шапку чистить не нужно

        If Not Application.Intersect(Range(«A:A»), Target) Is Nothing Then
        Application.EnableEvents = False
        Cells(Target.Row, 2).Resize(1, 3).ClearContents
        Application.EnableEvents = True
    End If
End Sub

[/vba]

Сообщение отредактировал viktturПонедельник, 04.12.2017, 13:00

 

Ответить

Leariska

Дата: Вторник, 05.12.2017, 15:58 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

vikttur, спасибо за ваше дополнение)

 

Ответить

На чтение 2 мин. Просмотров 18 Опубликовано 23.05.2021

Предположим, вы хотите очистить диапазон указанного содержимого ячейки, если значение другой ячейки изменилось, как вы можете это сделать? В этом сообщении будет показан способ решения этой проблемы.

Очистить указанное содержимое ячейки, если значение другой ячейки изменяется с кодом VBA


Очистить содержимое указанной ячейки, если значение другой ячейки изменяется с кодом VBA

Потрясающе! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Сэкономьте 50% своего времени и уменьшите тысячи щелчков мышью каждый день!

Как показано ниже, при изменении значения в ячейке A2 содержимое ячейки C1: C3 будет очищено автоматически. Пожалуйста, сделайте следующее.

1. На рабочем листе вы очистите содержимое ячейки на основе других изменений ячейки, щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код в контекстном меню. См. Снимок экрана:

2. В открывшемся окне Microsoft Visual Basic для приложений скопируйте и вставьте ниже код VBA в окно кода.

Код VBA: очистить указанную ячейку содержимое при изменении значения другой ячейки

Примечание : в коде B2 – это ячейка, на основе которой вы очищаете содержимое ячейки, а C1: C3 – это диапазон, из которого вы очистите содержимое. Пожалуйста, измените их по своему усмотрению.

3. Нажмите клавиши Alt + Q , чтобы закрыть окно Microsoft Visual Basic для приложений .

Затем вы можете увидеть содержимое диапазона C1: C3 очищается автоматически при изменении значения в ячейке A2, как показано на скриншоте ниже.


Статьи по теме:

  • Как очистить содержимое поля со списком с кодом VBA в Excel?
  • Как очистить содержимое и форматирование одновременно в ячейках в Excel?
  • Как очистить содержимое именованного диапазона в Excel?
  • Как очистить ограниченные значения в ячейках в Excel?
  • Как очистить указанное содержимое ячейки при открытии и выходе из книги Excel?

Like this post? Please share to your friends:
  • Очистить ячейки в excel с определенным значением
  • Очистить форматы в excel что это
  • Очистить форматы word 2007
  • Очистить форматирование ячеек excel
  • Очистить формат ячеек excel vba