1

Автоматически удалить данные из ячеек excel

Привет всем неравнодушным! Помогите советом и умной мыслью.

Нужно, чтобы в excel складывались значения из двух ячеек, в какую-то третью. Полученное значение в этой третьей ячейке сохранилось. А с тех ячеек, с которых брались данные для сложения, аннулировались (удалялись).

Лига помощи Excel

104 поста912 подписчиков

0
Автор поста оценил этот комментарий

Допустим просуммировали в третью ячейку, те очистили. А дальше что? Если мы обратно внесем, оно должно просуммировать с накоплением или очистить сумму и суммировать заново? Распишите подробнее, не понятно какая цель преследуется, возможно есть решение лучше.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
1
Автор поста оценил этот комментарий

Ну без суммирования я итоговой ячейки я сбрасывал пример

#comment_323861776

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

Можно сделать при внесении в ячейку значение сразу просуммируется с третьей ячейкой и обнулится.

Вот так: Но в первой и второй ячейке при таком раскладе значения будут сразу обнуляться. Вы вносите в первую, оно суммируется в третью, и обнуляется в первой. Затем вносите во вторую происходит тоже самое. У вас не будет момента будет заполнена и первая и вторая ячейка.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim C1, C2, C3 As Range

Set C1 = Range("A1")

Set C2 = Range("A2")

Set C3 = Range("A3")

If Target = C1 Or Target = C2 Then

Application.EnableEvents = False

C3.Value = C3.Value=C1.Value + C2.Value

C1.Value = ""

C2.Value = ""

Application.EnableEvents = True

End If

End Sub

Или так:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim C1, C2, C3 As Range

Set C1 = Range("A1")

Set C2 = Range("A2")

Set C3 = Range("A3")

If Target = C1 Or Target = C2 Then

If C1.Value <> "" And C2.Value <> "" Then

Application.EnableEvents = False

C3.Value = C3.Value=C1.Value + C2.Value

C1.Value = ""

C2.Value = ""

Application.EnableEvents = True

End If

End If

End Sub

В таком варианте будет суммироваться и обнуляться только когда 2 ячейки внесли.

Ячейки сами зададите в строках:

Set C1 = Range("A1")

Set C2 = Range("A2")

Set C3 = Range("A3")

Надеюсь здесь понятно A1 и A2 Это те которые суммируем в A3. Я их вынес в переменные чтобы изменять только в одном месте.

В екселе нажимаете alt+f11 и вставляете код в сам модуль листа на котором это будет происходить. И в настройках ексела может потребоваться сделать настройку разрешающую макросы. Код отрабатывает автоматом при изменении ячеек.

Хоть как работать с VBA вспомнил 😃

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня почему-то не получается запустить ваш макрос.
Я сделал иначе, может по индусски, но работает.
Сделал отдельные ячейки (типа буфер для вычислений)
макрос:

1) копирую из ячейки "всего" значение (именно значение!!! специальная вставка) в буферную ячейку

2) делаю расчет (сложение )- это вычисление тоже где-то в буферной ячейке

3) складываю значения из пункта 1 и 2 - так же в буферной ячейка

4) полученное значение из п.3 копирую (опять же как значение!!!) в рабочую ячейку "всего"


Sub Макрос10()

Range("C2").Select

Selection.Copy

Range("G4").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

Range("G6").Select

ActiveCell.FormulaR1C1 = "=SUM(R[-4]C,R[-2]C)"

Range("G6").Select

Selection.Copy

Range("C2").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

Range("B2").Select

Selection.ClearContents

Range("A2").Select

Selection.ClearContents

End Sub

показать ответы
1
Автор поста оценил этот комментарий

У меня почему-то не получается запустить ваш макрос.

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

Но макрос в любом случае отрабатывает, только вместо суммы Ложь пишет

Вот исправил:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim C1, C2, C3 As Range

Set C1 = Range("A1")

Set C2 = Range("A2")

Set C3 = Range("A3")

If Target = C1 Or Target = C2 Then

If C1.Value <> "" And C2.Value <> "" Then

Application.EnableEvents = False

C3.Value = C3.Value+C1.Value + C2.Value

C1.Value = ""

C2.Value = ""

Application.EnableEvents = True

End If

End If

End Sub

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

А что у вас могло пойти не так я не знаю. Еще раз когда по альт+ф11 открываете редактор макросов. Слева будет выбор модулей, и вставить нужно там где ваш файл и конкретно выбрать лист на котором эта "магия" должна происходить.

Где отмечено красной стрелкой нажимаем, открывается окно справа и вставляем этот код. Все работает. Но еще раз скажу подход странный, я не понимаю какой смысл в этом. Получается вы в a1 вводите значение, ничего не происходит просто в а1 внеслось значение. Затем как только вы внесете значение в a2 значения в а1 и а2 пропадут(порядок не важен, моно вносить наоборот) и вы даже не увидите значения в а2 ибо сразу после ввода оно сотрется и все просуммируется в а3. А смысл? С таким успехом можно и в одну ячейку вносить и обнулять после каждого значения.

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Сейчас проверил, работает.
Но подход действительно странный, неудобство в плане, что значения пропадают.
В любом случае, огромное спасибо за помощь!

показать ответы
0
Автор поста оценил этот комментарий

А что вы от этого вообще хотели получить? В чем суть? В екселе можно делать куда более интересные вещи. И мне кажется вы изначально нерационально продумали идею.

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

Стоп минус? А я плюсовал 😃

Ну в таком случае можно на другом листе вести по суткам выдано потрачено в табличке, а всего подставлять в этот лист куда надо. Но у вас не будет терятся информация. А так вы в случае ошибки концы с концами не сведете. Вот тупо ошиблись в наборе, ну вот палец не туда тыкнул и получили хрень. При том можно это делать и красиво без переключения на другой лист. Есть возможность ввода данных в форме которая будет вызываться вы как в программе вносите данные, он забрасывает на другой лист(он будет как база данных) а результат там где надо формулой-просто ссылка на ячейку с того листа

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

все верно плюсовали, изначально я об этом и спрашивал, но это не суть
на счет защиты от дурака, да, ошибку не отследить

показать ответы