Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2018, 20:31   #11
Leon307
Пользователь
 
Регистрация: 26.09.2018
Сообщений: 19
По умолчанию

Я подробно расписал в своем первом посте. Ячейки изменяются в соответствии с данными счетчика. При появлении данных в ячейках необходимо их записать и последующие изменения в ячейках:
AR6 в лист AR6 в той же строке 6 и далее AR7 в строке 7 листа AR6 и так далее, то есть в одном листе но в разных строках
AT6 в лист AT6 -"-
CB6 в лист CB6 -"-
CC6 в лист CC6 -"-
CD6 в лист CD6 -"-
DW6 в лист DW6 -"-
DZ6 в лист DZ6 -"-
FH6 в лист FH6 -"-
FI6 в лист FI6 -"-
FJ6 в лист FJ6 -"-

И как совместить возможный макрос для этой задачи с макросом счетчика?

Последний раз редактировалось Leon307; 26.09.2018 в 20:36.
Leon307 вне форума Ответить с цитированием
Старый 27.09.2018, 00:42   #12
alex777555
Пользователь
 
Регистрация: 30.07.2018
Сообщений: 19
По умолчанию

Цитата:
Возможно ли решить эту задачу?
Нет! Не возможно. Вы хотите сохранять все промежуточные значения вычислений? Это можно в принципе. Но не в вашем случае. Для обработки вашего цикла и вывода всех промежуточных значений потребуется
1000000 : 0.01 = 100000000 строк
В екселе чуть больше 1000000
С другой стороны: Сколько вы готовы ждать?
Я уменьшил 1000000 до 100 и запустил просто счётчик. до 100 он работал 100 с. И это без записей на лист. Простые вматематические вычисления
100000000 /60 =1666666,667 минут /60 =27777,77778 часов /24 = 1157,407407 дней /30 =38,58024691 месяцев /12 =3,215020576 лет
alex777555 вне форума Ответить с цитированием
Старый 27.09.2018, 00:52   #13
alex777555
Пользователь
 
Регистрация: 30.07.2018
Сообщений: 19
По умолчанию

Цитата:
И как совместить возможный макрос для этой задачи с макросом счетчика?
как раз с этим нет сложностей
после строки CounterCell.Value = CounterCell.Value + 0.01
просто считайте количество повторений цикла
num=num+1
и записывайте на нужные листы нужные данные. типа
Worksheet("AT6").cells(num,1)=range ("AT6")
alex777555 вне форума Ответить с цитированием
Старый 27.09.2018, 09:40   #14
Leon307
Пользователь
 
Регистрация: 26.09.2018
Сообщений: 19
По умолчанию

Уважаемый Serge_Bliznykov!
В приложенном файле Excel в ячейке A1 работает счетчик, макрос которого приведен в первом сообщении. Эта ячейка (А1) является множителем для для других ячеек, в которых записаны формулы. По мере работы счетчика значения ячеек меняются. Целью этих изменений является генерация чисел в строке BC6:BH6. Сгенерированные числа сравниваются с постоянными числами в строке BJ6:BO6. При совпадении 4 любых из 6 сгенерированных чисел с постоянными числами строки BJ6:BO6 занчение счетчика записывается в ячейку AR6,
При совпадении 5 любых чисел - значение счетчика записывается в ячейку AT6
При совпадении 5 первых чисел - в ячейку CC6
5 последних чисел - в ячейку CD6
При полном совпадении всех 6 чисел, значение счетчика записывается в ячейке CB6.
Точно такая же ситуация происходит и с ячейками DW6, DZ6, FH6, FI6, FJ6 в которых записываются показания счетчика при сравнении сгенерированных чисел в строке EI6:EN6 с числами строки EQ6:EV6.
Если запустить счетчик, то в моем случае при прохождении всего цикла в указанных ячейках будет записан только последний результат, А мне необходимы все возможные результаты. Поэтому я и прошу подсказать, как можно записать все появляющиеся результаты показаний счетчика в соответствующем листе (название листа соответствует номеру ячейки из которой необходимо произвести запись). Запись на листе должна вестись в строку, начиная с ячейки A6 и далее в строке 6. Сколько будет таких совпадений - неизвестно. В приложенном файле только одна строка, а у меня таких строк больше 1000. Полный цикл расчетов на моем компе займет более 100 суток, но это лирика. Огромное Вам спасибо за внимание к моему вопросу! Прилагаю свой файл еще раз. В нем Вы можете увидеть, что при работе счетчика от 0 до 361,8 в ячейках AR6 и DW6 появились показания счетчика, при которых 4 из 6 сгенерированных чисел совпали с 4 из 6 постоянных чисел.
Вложения
Тип файла: rar Пример для консультаций киберфорум.rar (24.4 Кб, 11 просмотров)
Leon307 вне форума Ответить с цитированием
Старый 27.09.2018, 09:50   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Leon307, вот теперь мне стало всё понятно.

Теперь по существу.
1) alex777555 постами выше объяснил возможные проблемы.

2) я бы эту задачу решал так - полностью вынес все нужные формулы в код (причём, наверное, в нормальную среду программирования, Delphi, C# или что-нибудь аналогичное), там "крутил" цикл по счётчику, всё вычислял и, если получался нужный результат (совпадение цифр), то записывал значение счётчика и необходимые промежуточные данные. Ну, это с учётом замечаний alex777555 о времени работы программы. Возможно, что подбор нужных значений у Вас займёт многие месяцы (года?) работы программы.

3) в данной постановке задачи (сделать перебор и запись совпадений в самом Excel) от меня помощи ждать не стоит - это слишком сложно и долго для меня. Возможно, что кто-то другой сможет Вам помочь.
а, может быть, Вам стоит обратиться за платной помощью в раздел Фриланс.

p.s. судя по названию файла, Вы его на киберфоруме выкладывали? Ну и как, там помогли решить проблему?

Последний раз редактировалось Serge_Bliznykov; 27.09.2018 в 09:52.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2018, 10:05   #16
Leon307
Пользователь
 
Регистрация: 26.09.2018
Сообщений: 19
По умолчанию

Уважаемый Alex777555,
Мне надо, чтобы выводились не все показания счетчика, а только те, которые появляются в соответствующих ячейках. Одной строки листа будет достаточно. Я вставил в макрос счетчика Ваши рекомендации, но он ругается: Object variable or With block variable not set
Public Sub Counter()
Код:
Dim CounterCell As Range, Worksheet As Range, num As Range
Set CounterCell = ActiveSheet.Range("A1")
CounterCell.Value = 0

Do While CounterCell.Value < 1000000#
    CounterCell.Value = CounterCell.Value + 0.01
    num = num + 1
    Worksheet("AT6").Cells(num, 1) = Range("AT6")
Loop
End Sub
Наверняка в силу своей безграмотности что-то сделал не так.
Leon307 вне форума Ответить с цитированием
Старый 27.09.2018, 10:09   #17
Leon307
Пользователь
 
Регистрация: 26.09.2018
Сообщений: 19
По умолчанию

Уважаемый Serge_Bliznykov,
Спасибо огромное за советы. Неприменно ими воспользуюсь. Как я уже говорил работа моей программы занимает около 100 суток непрерывной работы компа. Меня это не волнует. Но в нынешнем виде я получаю только последние значения, а это как раз не устраивает. Извините за оторванное время. А насчет киберфорума и других подобных форумов - нигде не смогли помочь.

Последний раз редактировалось Leon307; 27.09.2018 в 10:19.
Leon307 вне форума Ответить с цитированием
Старый 27.09.2018, 10:22   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Leon307 Посмотреть сообщение
Как я уже говорил работа моей программы занимает около 100 суток непрерывной работы компа
Это весьма впечатляет!

Цитата:
Сообщение от Leon307 Посмотреть сообщение
Меня это не волнует.
Так это же главное.
мы хотели предостеречь Вас, предполагая, что Вы не представляете, насколько это долгий процесс. Но раз Вы сами знаете и Вас это устраивает, то всё в порядке!


Цитата:
Сообщение от Leon307 Посмотреть сообщение
Но в нынешнем виде я получаю только последние значения, а это как раз не устраивает.
Понятно. Это решаемо.


Цитата:
Сообщение от Leon307 Посмотреть сообщение
Извините за оторванное время.
Да ну, не за что.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2018, 12:47   #19
Leon307
Пользователь
 
Регистрация: 26.09.2018
Сообщений: 19
По умолчанию

На просторах интернета нашел следующий макрос:
Вот вариант макроса, отслеживающий изменения, вносимые при помощи формул:
Код:

Код:
Const КонтролируемыйДиапазон = "b2:b6"

Private Sub Worksheet_Calculate()
    Application.ScreenUpdating = False
    Dim cell As Range, newcell As Range, x As Range, CellCopy As Range

    For Each cell In Range(КонтролируемыйДиапазон).Cells
        Set CellCopy = cell.EntireRow.Cells(Columns.Count)
        If cell <> CellCopy Then
            ' запоминаем новое значение
            CellCopy = cell
            ' ищем соответствующий столбец
            Set x = Rows(1).Find(cell.Previous.Value)
            If x Is Nothing Then MsgBox "Столбец с фамилией " & cell.Previous & " не найден", vbCritical, "Ошибка": Exit Sub
            ' нашли нужный столбец
            Set newcell = x.EntireColumn.Cells(Rows.Count).End(xlUp).Offset(1)
            newcell = Now: newcell.Next = cell
        End If
    Next cell
End Sub
Можно ли этот макрос применить для моей задачи?
Leon307 вне форума Ответить с цитированием
Старый 27.09.2018, 13:18   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Leon307 Посмотреть сообщение
Можно ли этот макрос применить для моей задачи?
можно. но не нужно.
у Вас всё проще.
нужно просто внутрь цикла
Do While CounterCell.Value < 1000000#
Loop
вставить код, который проверяет изменения в ячейках и, в случае совпадения, пишет то, что Вам нужно сохранить.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение данных по определенному диапазону строк и при совпадении значений копирование данных в другой лист Volk358 Microsoft Office Excel 6 02.10.2012 09:54
Перенос данных на другой лист tgm Microsoft Office Excel 0 06.08.2012 21:43
перенос данных на другой лист vorimid Microsoft Office Excel 11 03.06.2012 19:23
перенос данных на другой лист Jonny B Microsoft Office Excel 15 26.04.2011 09:16
Перенос данных на другой лист Palomnik1096 Microsoft Office Excel 5 20.12.2010 15:12