Как запомнить предыдущее значение измененной ячейки excel

Обычно при обновлении ячейки новым содержимым предыдущее значение будет закрыто, если не отменить операцию в Excel. Однако, если вы хотите сохранить предыдущее значение для сравнения с обновленным, сохранение предыдущего значения ячейки в другую ячейку или в комментарий к ячейке будет хорошим выбором. Метод, описанный в этой статье, поможет вам в этом.

Сохранить предыдущее значение ячейки с кодом VBA в Excel


Сохранить предыдущее значение ячейки с кодом VBA в Excel

Предположим, у вас есть таблица, как показано на скриншоте ниже. Если какая-либо ячейка в столбце C изменилась, вы хотите сохранить ее предыдущее значение в соответствующей ячейке столбца G или автоматически сохранить в комментарии. Для этого сделайте следующее.

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

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

Следующий код VBA помогает сохранить предыдущее значение ячейки указанного столбца в другой столбец.

Код VBA: сохранить предыдущее значение ячейки в другую ячейку столбца

Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xDCell As Range
    Dim xHeader As String
    Dim xCommText As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    x = xDic.Keys
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        Set xDCell = Cells(xCell.Row, 7)
        xDCell.Value = ""
        xDCell.Value = xDic.Items(I)
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("C:C"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("C:C"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Formula
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub

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

Код VBA: сохранить предыдущее значение ячейки в комментарии

Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xHeader As String
    Dim xCommText As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        If Not xCell.Comment Is Nothing Then xCell.Comment.Delete
        With xCell
            .AddComment
            .Comment.Visible = False
            .Comment.Text xHeader & vbCrLf & xDic.Items(I)
        End With
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("C:C"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("C:C"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Text
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub

Внимание: В коде цифра 7 указывает столбец G, в который вы сохраните предыдущую ячейку, а C: C — столбец, в котором вы сохраните предыдущее значение ячейки. Пожалуйста, измените их в соответствии с вашими потребностями.

3. Нажмите Tools
> Рекомендации для открытия Ссылки — VBAProject диалоговое окно, проверьте Среда выполнения сценариев Microsoft поле и, наконец, щелкните OK кнопка. Смотрите скриншот:

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

С этого момента, когда значение ячейки в столбце C обновляется, предыдущее значение ячейки будет сохранено в соответствующие ячейки в столбце G или будет сохранено в комментариях, как показано на скриншотах ниже.

Сохраните предыдущие значения ячеек в других ячейках:

Сохраните предыдущие значения ячеек в комментариях:


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

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

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

вкладка kte 201905


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

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

офисный дно

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


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

@Shelbie1288 

Here are two possible solutions that you could use in brief. The first is for the current cell. Even if several cells are selected, only the current cell is converted:

Sub RngFormelZuWert ()
Dim c As Range
For Each c In Selection
c.Value = c.Value
Next c
End Sub

Yes, you can also do without the word Value, because in this case it is the default property. But better safe than sorry, and this is how it will work 10 years from now.

The second possibility would be that all cells in a marked area should be «treated» in this way. Then this code leads to the goal:

Sub RngFormelZuWert ()
Dim c As Range
For Each c In Selection
c.Value = c.Value
Next c
End Sub

You can see that this is hardly more code than in the first example.
Is for everyone who would like to have it short and sweet:

Sub Sel2Val ()
Selection.Value = Selection.Value
End Sub

I hope that I was able to help you further, or to provide a solution.

I would be happy to know if I could help.

Nikolino

I know I don’t know anything (Socrates)

* Kindly Mark and Vote this reply if it helps please, as it will be beneficial to more Community members reading here.

 

Добрый день, Ув. Форумчане!

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

Прикрепленные файлы

  • Пример.xlsm (14.85 КБ)

 

webley

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

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

#2

03.02.2022 11:36:08

Добрый день. А если без Worksheet_SelectionChange, вот так?

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        MsgBox Target.Value & " / " & СтароеЗначение, 64 'новое и старое значение
    End If
    СтароеЗначение = Target.Value
End Sub
 

ANDREY

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

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

 

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

 

webley

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

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

ну тогда можно совместить — первоначальное значение присваивать, например, через Worksheet_SelectionChange (хотя можно при активации листа/открытии книги), а изменение уже отслеживать «по факту» в процедуре Worksheet_Change

 

ANDREY

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

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

#6

03.02.2022 12:26:05

Цитата
написал:
переменная СтароеЗначение изначально будет пустой

Данная переменная перестает быть пустой при выделении или активации ячейки. Если в этой ячейке отсутствует значение, то значит предыдущее значение «». И это можно обработать.

 

vikttur

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

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

#7

03.02.2022 12:26:26

В Worksheet_Change

Код
Undo
Старое значение =...
Undo
 

Alexey0185

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

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

#8

03.02.2022 12:28:01

ANDREY, в том и проблема, что через Worksheet_SelectionChange значение присваивается, если ячейка до этого не была активной. А если она в данный момент активна, то Worksheet_SelectionChange не срабатывает.

Цитата
написал: Undo

Благодарю!!! Работает!

 

Alexey0185

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

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

#9

03.02.2022 12:33:13

Цитата
написал: Undo

Благодарю!!! Работает!

ANDREY,

Изменено: vikttur03.02.2022 12:41:53

 

БМВ

Модератор

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

Excel 2013, 2016

#10

03.02.2022 12:41:41

Alexey0185,  смотрите что написал vikttur.
Он конечно схитрил, не все так просто. и это применимо для одной ячейки

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim val
If Not Intersect(Target, Cells(1, 1)) Is Nothing And Target.Count = 1 Then
    Application.EnableEvents = False
    val = Target.Value
    Application.Undo
    Cells(2, 1) = Target.Value
    Target.Value = val
    Application.EnableEvents = True
End If
End Sub

или можно с трудом натянуть на неразрывный диапазон, но сейчас если скопировать что-то в A1:b1, то сломается.

ну и

тут

не простой но вариант

По вопросам из тем форума, личку не читаю.

 

vikttur

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

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

#11

03.02.2022 12:45:14

Не схитрил, а предложил

Цитата
сохранять в переменную старое значение ячейки

И про application забыл…

 

Alexey0185

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

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

#12

03.02.2022 12:58:40

БМВ

, благодарю!
Ваш вариант более логично вписался в мои «художества» )

Цитата
написал: И про application забыл…

Про application я и сам догуглил. Направление задали верное — это главное.

 

БМВ

Модератор

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

Excel 2013, 2016

#13

03.02.2022 13:08:03

Уппс, а я вот никогда не пользовал undo undo  и думал что по стеку идет в одном направлении, а оно именно одно действие отменяет, при этом сама отмена становится последним…
тогда можно так

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim val
If Not Intersect(Target, Cells(1, 1)) Is Nothing Then
    Application.EnableEvents = False
    Application.Undo
    val = Target.Value
     Application.Undo
     Cells(2, 1) = val
    Application.EnableEvents = True
End If
End Sub

По вопросам из тем форума, личку не читаю.

 

_Igor_61

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

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

Михаил, СПАСИБО!!!
Подобные задачи у меня получалось решать только способами типа :»старое значение сохраняю в другой ячейке», а как сделать чтобы запомнить сразу в переменной — не мог додуматься как это сделать. Ну и к тому же  на «Undo» только в меню в ленте видел и там же ей пользовался, и не думал что это тоже в макрос можно записать для решения подобных задач и будет работать… И про контроль событий даже в голову не приходило, что это можно (и нужно :) ) использовать в подобных случаях…
Ваши самокрутки очень пользительны и помогательны! :) Еще раз спасибо!!! Взял на заметку, в будущем думаю пригодится не раз. :idea:

.

Изменено: _Igor_6103.02.2022 15:44:02
(P.S. Не я не автор темы, но тема для меня актуальна оказалась :) )

 

Достаточно давно я описывал данный подход в статье:

Выделение сделанных изменений

только возвращал я свойство .Formula, т.к. это чуть более правильно в случаях, если изменения вносились в ячейку с формулой. Ну и еще парочка дополнений там есть, вроде возврата выделенных ячеек в исходное положение, т.к. после Undo выделенная область тоже может смениться.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

sokol92

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

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

Здравствуйте, коллеги!
C Undo надо быть поаккуратнее и уж тем более не вызывать два раза.
В исходном примере:
1. Заносим в A1 значение 1.
2. Возвращаемся в A1 и заносим 999 (например) и нажимаем Enter.  В сообщении об ошибке выбираем «Повторить», далее нажимаем Backspace и Enter.
Получаем сообщение о некорректном выполнении метода Undo (в макросах Михаила и Дмитрия).
Вывод: надо перехватывать возможную ошибку Undo.

Изменено: sokol9203.02.2022 17:55:42

 

sokol92, что-то у меня не получилось повторить. Сделал четко по озвученному алгоритму. Ни сообщения, ни ошибку не получил. Что делаю не так?

Изменено: Дмитрий(The_Prist) Щербаков03.02.2022 17:59:36

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

sokol92

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

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

Дмитрий, не знаю — я раз 20 проверял. Важно нажимать именно Backspace, а не Del.
Естественно, я имел в виду пример #1 с добавленными макросами (Вашим или Михаила)

Изменено: sokol9203.02.2022 18:11:29

 

Дмитрий(The_Prist) Щербаков

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

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

Профессиональная разработка приложений для MS Office

#19

03.02.2022 18:16:56

Цитата
sokol92 написал:
имел в вмду пример #1

вот теперь понятно. Дело-то по сути в проверке данных и не Undo проблему создает, а проверка данных, т.к. Und-ить нечего :) Обойти-то можно и не так уж проблематично. Если чуть более умно, то так:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    'если изменили более одной ячейки - ничего не отслеживаем
    Dim lcnt As Long
    'игнорируем ошибки на случай, если выделено слишком много ячеек для помещения в Long
    On Error Resume Next
    lcnt = Target.Count
    If lcnt > 1 Then Exit Sub
    On Error GoTo 0
 
    Dim vOldVal, vNewVal, sSel As String
    With Application
        'отключаем отслеживание событий
        .EnableEvents = False
        .ScreenUpdating = False
        'запоминаем текущее выделение ячеек
        sSel = Selection.Address
        'запоминаем текущее значение
        vNewVal = Target.Formula
        'возвращаем предыдущее значение
        On Error Resume Next
        .Undo
        If Err.Description Like "*'Undo'*" Then
            GoTo END_
        End If
        'запоминаем предыдущее значение
        vOldVal = Target.Formula
        'возвращаем текущее значение
        Target.Formula = vNewVal
        'если значение/формула изменились окрашиваем в красный цвет
        If vOldVal <> vNewVal Then
            Target.Interior.Color = vbRed
        End If
        'возвращаем прежнее выделение ячеек
        Me.Range(sSel).Select
END_:
        'возвращаем отслеживание событий
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Но можно и при любой ошибке выход делать

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

sokol92

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

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

#20

03.02.2022 18:22:34

Цитата
Дмитрий(The_Prist) Щербаков написал:
не Undo проблему создает, а проверка данных, т.к. Und-ить нечего

Да. Там событие изменения ячейки A1 вызывается дважды.
Я ранее сталкивался с подобными ситуациями и «на автомате» перехватываю возможные ошибки при выполнении Undo.

P.S. Ошибка исчезновения имени при цитировании не исправлена. Все время забываю нажимать на «BB code». :)

Изменено: sokol9203.02.2022 18:25:54

Владимир

 

БМВ

Модератор

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

Excel 2013, 2016

#21

03.02.2022 19:48:01

Цитата
sokol92 написал:
Ошибка исчезновения имени при цитировании не исправлена.

там тоже On Error Resume Next  :D

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

По вопросам из тем форума, личку не читаю.

автосохраниение предыдущих значений

mergin07

Дата: Суббота, 15.03.2014, 19:49 |
Сообщение № 1

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

 

Ответить

amfor

Дата: Суббота, 15.03.2014, 19:55 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 250


Репутация:

75

±

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


Excel 2016

В D3 , =C3


Семь бед — один RESET.

 

Ответить

gling

Дата: Суббота, 15.03.2014, 19:56 |
Сообщение № 3

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

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

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


2010

Чтобы сохранялось без изменений нужен макрос, а это в другом разделе форума.


ЯД-41001506838083

 

Ответить

ShAM

Дата: Воскресенье, 16.03.2014, 06:03 |
Сообщение № 4

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

Ранг: Старожил

Сообщений: 1347


Репутация:

249

±

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


Excel 2010


и отключить автоматическое вычисление. Также не забыть нажать F9 перед вводом в С3 нового значения.
Гемор полнейший :D

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 08:20 |
Сообщение № 5

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

код в модуле листа
[vba]

Код

Private Previous_Value
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 And Target.Address(0, 0) = «C3» Then Previous_Value = [C3]
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = 1 And Target.Address(0, 0) = «C3» Then [D3] = Previous_Value
End Sub

[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 14:13 |
Сообщение № 6

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

а куда вводить этот код, а в ячейку как внедрить этот код?

Сообщение отредактировал Serge_007Воскресенье, 16.03.2014, 16:52

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 14:17 |
Сообщение № 7

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

Код вставить в модуль листа вашего файла.
Мог бы и я это сделать, но вашего файла нет в сообщении.
В ячейку С3 и D3 ничего внедрять не надо. В С3 вставляете значения.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMВоскресенье, 16.03.2014, 14:47

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 14:58 |
Сообщение № 8

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

Сообщение отредактировал Serge_007Воскресенье, 16.03.2014, 16:52

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 15:02 |
Сообщение № 9

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

В код модуля листа надо было вставить то что в рамке.
Уберите из модуля строку «код в модуле листа «



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 15:08 |
Сообщение № 10

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 15:35 |
Сообщение № 11

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

НАДЕЮСЬ НЕ БУДЕТ ДУРАЦКИХ СООБЩЕНИЙ ТИПА

Не нравится мне такой тон.
У вас задача изменилась. Оказывается надо в столбце, а не в ячейке.
[vba]

Код

Private Previous_Value
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Range(«C3:C10»), Target) Is Nothing Then Previous_Value = Target
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Range(«C3:C10»), Target) Is Nothing Then Target.Offset(0, 1) = Previous_Value
End Sub

[/vba]

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

mergin07.xls
(29.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMВоскресенье, 16.03.2014, 15:43

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 15:54 |
Сообщение № 12

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

Не нравится мне такой тон.
У вас задача изменилась. Оказывается надо в столбце, а не в ячейке.

Просто такие сообщения для прикола отнимают много времени.

Спасибо за помощь!, благодарю, все сделал

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 15:59 |
Сообщение № 13

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

По хорошему надо модуль «Эта книга» дополнить кодом, который при открытии книги переместит курсор со столбца С, например на А1.
Для чего это нужно. Переменная запоминается по событию выбора ячейки. Если при открытии книги курсор находится на С3, и вы будете менять в этой ячейке значение, то переменная окажется пустой и в D3 ничего не запишется.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 16:04 |
Сообщение № 14

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

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

Сообщение отредактировал Serge_007Воскресенье, 16.03.2014, 16:54

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 16:11 |
Сообщение № 15

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

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

4434750.xlsx
(27.4 Kb)

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 16:25 |
Сообщение № 16

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

Опять задача другая. :(
Раньше меняли значения в столбце С, эти значения запоминались в переменную.
А теперь надо при изменении любого значения в столбцах E,H,K,N,Q и T запоминать в переменную значение из столбца В
Чувствуете разницу?



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 16:30 |
Сообщение № 17

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

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

Сообщение отредактировал Serge_007Воскресенье, 16.03.2014, 16:55

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 16:35 |
Сообщение № 18

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

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

 

Ответить

mergin07

Дата: Воскресенье, 16.03.2014, 16:38 |
Сообщение № 19

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

Ранг: Новичок

Сообщений: 26


Репутация:

-16

±

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


Excel 2010

было бы идеально если б можно сделать так — я меняю данные каждого брокера подряд, например E5, H5, K5, N5, Q5, и как только меняю последний столбец в строке 5 это Т5 предыдущее значение ячейки B5 записывается на С5

 

Ответить

AlexM

Дата: Воскресенье, 16.03.2014, 17:02 |
Сообщение № 20

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

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

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

предыдущее значение ячейки B5 записывается на С5

А куда девать среднее значение, которое формулой считается в С5?
Полагаю, в этой таблице еще нет столбца для записи предыдущих значений столбца В



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

@Shelbie1288 

Here are two possible solutions that you could use in brief. The first is for the current cell. Even if several cells are selected, only the current cell is converted:

Sub RngFormelZuWert ()
Dim c As Range
For Each c In Selection
c.Value = c.Value
Next c
End Sub

Yes, you can also do without the word Value, because in this case it is the default property. But better safe than sorry, and this is how it will work 10 years from now.

The second possibility would be that all cells in a marked area should be «treated» in this way. Then this code leads to the goal:

Sub RngFormelZuWert ()
Dim c As Range
For Each c In Selection
c.Value = c.Value
Next c
End Sub

You can see that this is hardly more code than in the first example.
Is for everyone who would like to have it short and sweet:

Sub Sel2Val ()
Selection.Value = Selection.Value
End Sub

I hope that I was able to help you further, or to provide a solution.

I would be happy to know if I could help.

Nikolino

I know I don’t know anything (Socrates)

* Kindly Mark and Vote this reply if it helps please, as it will be beneficial to more Community members reading here.

Понравилась статья? Поделить с друзьями:
  • Как заполнять ячейку excel 2003
  • Как заполнять ячейки текстом в excel
  • Как заполнять ячейки в excel формула
  • Как заполнять ячейки в excel при условии если
  • Как заполнить ячейку в excel через одну