Страницы: 1 2 След.
RSS
Изменяющиеся данные сохранять со сдвигом вниз
 
Доброго времени , может кто сможет помочь , есть три ячейки , в них меняются значение , нужно что бы изменения сохранялись со сдвигом в низ , и на основе этих значений была диаграмма . Сколько  вот только сделать истории сохранения данных штук сто ,  двести .  
 
Вопрос простой, но не понятный.
со сдвигом вниз - новые данные вносятся в А2:С2, а предыдущие сдвигаются?
И при чем история?
 
данные сдвигаются , думаю что бы просто не было их много или мало  
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)   
If Target = Range("A1") And Not Ch Then   
Ch = True   
Range("C2").Value = Range("C3").Value   
Range("C3").Value = Range("C4").Value   
Range("C4").Value = Range("A1").Value   
Ch = False   
End If   
  
End Sub 

Что то подобно по сдвигу , данный вариант в другую сторону сдвигает , может проще что то есть , и данный вариант не видит изменяемое значение , так как оно формулой .
 
Имхо, делать это по  Worksheet_Change не слишком удобно. Лучше - по кнопке.
 
Честно , я совсем в этом тупой , пробую на просторах инета что то от искать .
 
Цитата
yrikovsy написал: есть три ячейки , в них меняются значение
Как именно меняются значения? Вручную? Формулы пересчитываются? По DDE данные поступают? (надо больше деталей, чтобы понимать как Вам помочь)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Данные поступают по DDE , есть и формула =АГРЕГАТ(15;6;AP2:AP107/(AP2:AP107<>0);1)*100
 
У вас там формулы - должны остаться, или это для примера?
 
это для примера  
 
Цитата
yrikovsy написал: Данные поступают по DDE
На форуме уже есть подобные темы. Используйте поиск.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Проверяйте
 
Цитата
JayBhagavan написал:
Данные поступают по DDE
не видел этого.
тогда сложнее, я не сделаю.
 
Не сразу разобрался , кнопка перенести сдвигает значение , дело в том что значение у меня меняются автоматом по DDE , за ним не угонишься нажатием кнопки , суть правильная , но нужно что бы автоматом сдвигались если изменилось значение .  
Изменено: yrikovsy - 15.11.2018 17:48:08
 
yrikovsy, изучайте, адаптируйте под себя.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Спасибо попробую .
 
Код
Option Explicit
Private Sub Worksheet_Calculate()
Dim rng_history As Range, c_rows As Byte, cnt As Byte, tmp
   If Len([A2].Value) = 0 Then Exit Sub
   Application.EnableEvents = False
   Set rng_history = [B2:B11]
   c_rows = rng_history.Rows.Count
   On Error Resume Next
   cnt = rng_history.SpecialCells(xlCellTypeConstants).Count
   On Error GoTo 0
   If cnt = 0 Then
       rng_history.Resize(1).Value = [A2].Value
   Else
       tmp = rng_history.Resize(1).Offset(-1).End(xlDown).Value
       If [A2].Value <> tmp Then
           If c_rows = cnt Then rng_history.Resize(1).Delete shift:=xlShiftUp
           rng_history.Resize(1).Offset(-1).End(xlDown).Offset(1).Value = [A2].Value
       End If
   End If
   Application.EnableEvents = True
End Sub

Понимающие помогите поправить , работает нормально , но зависает когда данные доходят до ячейки B11 , и если возможно сделать три ячейки такого типа которые сдвигают значение , и не плохо бы среднее значение у каждого своё. Пробовал менял
Код
 Set rng_history = [B2:B11] 
на
Код
Set rng_history = [B2:B1000] 
виснет на том же месте B11 .

Значений нужно не меньше 1000 сдвигов , так сказать .
Изменено: yrikovsy - 15.11.2018 22:15:36
 
Оформлять код еще и цитатами - конечно, красиво... но необязательно ;)
 
Сколько не пробовал не как не могу добавить ещё две ячейки к работе , возможно это сделать , или нет ,подскажите пожалуйста .  
 
Доброго всем , что смог переделать в коде , три ячейки сохраняют изменение значений , сдвигая в низ . Что не могу сделать , при изменении значения в одной ячейки сдвигаются все три , получается пустые ячейки. Как исправить что если изменения прошли в одной ячейки , сдвиг был по всем трём ячейкам даже там где не было изменений , как написать то понятно , равномерный сдвиг данных что бы не было пустых ячеек . В файл прикладываю , думаю по нему будет понятно , чего хочется . Сдвиг всех данных одновременно , при изменении в любой ячейке , во как . Подскажите куда копать .
 
это фигня

+++
Не, вообще убрать селект на:
Код
СтрокаДляЗаписи(1, 2).Resize(, 3).Value = Range("$B$1:$D$1").Value
Изменено: JayBhagavan - 18.11.2018 20:28:31

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Спасибо получилось .
 
Цитата
JayBhagavan написал:
Не, вообще убрать селект на:
Если можно весь код  в сборе , не могу понять , что убрать , и что оставить.
 
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Всё спасибо понял .
 
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   
  ' Если изменения произошли не на Листе1, то ничего не делать
  If Sh.Name <> Лист1.Name Then Exit Sub
   
  ' Если изменения произошли не в [B2], то ничего не делать
  If Not (Target.Address = [B1].Address Or Target.Address = [D1].Address Or Target.Address = [C1].Address) Then Exit Sub
     
  ' ===== Записать историю изменения значений ячейки [B2] =====
   Dim rng As Range, СтрокаДляЗаписи As Range
  ' Задать диапазон таблицы данных
  Set rng = [A3].CurrentRegion
  ' Отпределить последнюю строку для записи
  Set СтрокаДляЗаписи = rng.Rows(1).Offset(rng.Rows.Count).Cells
  ' Добавить в конец дату+время и значение
  СтрокаДляЗаписи(1, 1) = Now
  СтрокаДляЗаписи(1, 2).Resize(, 3).Value = Range("$B$1:$D$1").Value
  ' Переопределить именованный диапазон [БД]
  Sh.Names.Add Name:="БД", RefersTo:="=" & rng.CurrentRegion.Address
  ' Переопределить диапазон данных диаграммы
  Sh.ChartObjects(1).Chart.SetSourceData Source:=Sh.Range("БД")
  End Sub
Данный код работает только при ручном вводе данных , по DDE не работает. Куда копать дальше ? подскажите, пожалуйста .  
Изменено: yrikovsy - 19.11.2018 16:29:56
 
Событие Change не на наступает при обновлении данных по DDE.
Вариант решения: разместить на листе ТекстБокс(ы), сделав их невидимыми, связать из с нужными ячейками и отслеживать событие Change не в ячейках листа, а в самих контролах.
 
Цитата
Юрий М написал:
ТекстБокс(ы),
Юрий , подскажи где по изучать про ТекстБокс(ы), понять что такое , и как это сделать .
 
Такой вопрос , получается в оригинале кода
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  
  ' Если изменения произошли не на Листе1, то ничего не делать
  If Sh.Name <> Лист1.Name Then Exit Sub
  
  ' Если изменения произошли не в [B2], то ничего не делать
  If Target.Address <> [B1].Address Then Exit Sub
    
  ' ===== Записать историю изменения значений ячейки [B2] =====
   Dim rng As Range, СтрокаДляЗаписи As Range
  ' Задать диапазон таблицы данных
  Set rng = [A3].CurrentRegion
  ' Отпределить последнюю строку для записи
  Set СтрокаДляЗаписи = rng.Rows(1).Offset(rng.Rows.Count).Cells
  ' Добавить в конец дату+время и значение
  СтрокаДляЗаписи(1, 1) = Now
  СтрокаДляЗаписи(1, 2) = Target
  ' Переопределить именованный диапазон [БД]
  Sh.Names.Add Name:="БД", RefersTo:="=" & rng.CurrentRegion.Address
  ' Переопределить диапазон данных диаграммы
  Sh.ChartObjects(1).Chart.SetSourceData Source:=Sh.Range("БД")
  End Sub
где то что то есть чего не вижу , или не понимаю про ТекстБокс(ы) , или он совсем не тут ? Этот код работает с одной ячейкой , по данным DDE .
Изменено: yrikovsy - 19.11.2018 16:47:23
 
Чем второй код отличается от первого? В них ничего не может быть от событийной процедуры для ТекстБокса - в нём СВОЯ процедура.
Страницы: 1 2 След.
Наверх