Уважаемые форумчане, У меня имеется программа, записанная в ячейках Excel. Программа предусматривает сравнение результатов имеющейся комбинации цифр с комбинацией, сгенерированной при помощи счетчика. Однако формула, записанная в ячейке:
Код
=ЕСЛИ(BU9=BU$7;$K$1;BV9)
выдает только последний результат работы счетчика, а мне необходимо записать все результаты, при которых 4 сгенерированные цифры совпадут с четырьмя из шести оригинальных цифр (Также и для 5 и для 6 совпадений). Поскольку количество строк программы превышает 1000, то как можно записать в макросе счетчика, чтобы каждое совпадение фисировалось на новом листе в той же строчке? Пример программы прилагается. В приложенной программе необходимо записать данные из ячеек: BV9 - 4 любых совпадения, CD9 - 5 любых совпадений, DS9 - полное совпадение, DT9 - совпадение первых 5 чисел, DU9 - совпадение последних 5 чисел. Текст макроса счетчика:
[vba]
Код
Public Sub Counter()
Dim CounterCell As Range
Set CounterCell = ActiveSheet.Range("K1")
CounterCell.Value = 13.53
Do While CounterCell.Value < 1000000#
CounterCell.Value = CounterCell.Value + 0.01
Loop
End Sub
[/vba]
Буду очень признателен за подсказку.
Уважаемые форумчане, У меня имеется программа, записанная в ячейках Excel. Программа предусматривает сравнение результатов имеющейся комбинации цифр с комбинацией, сгенерированной при помощи счетчика. Однако формула, записанная в ячейке:
Код
=ЕСЛИ(BU9=BU$7;$K$1;BV9)
выдает только последний результат работы счетчика, а мне необходимо записать все результаты, при которых 4 сгенерированные цифры совпадут с четырьмя из шести оригинальных цифр (Также и для 5 и для 6 совпадений). Поскольку количество строк программы превышает 1000, то как можно записать в макросе счетчика, чтобы каждое совпадение фисировалось на новом листе в той же строчке? Пример программы прилагается. В приложенной программе необходимо записать данные из ячеек: BV9 - 4 любых совпадения, CD9 - 5 любых совпадений, DS9 - полное совпадение, DT9 - совпадение первых 5 чисел, DU9 - совпадение последних 5 чисел. Текст макроса счетчика:
Leon307, оформите вашу тему в соответствии с правилами форума в части использования тэгов и для формул и для кодов. пояснялка здесь Помогающих прошу пока потерпеть
Leon307, оформите вашу тему в соответствии с правилами форума в части использования тэгов и для формул и для кодов. пояснялка здесь Помогающих прошу пока потерпетькитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Уважаемый StoTisteg, я показал макрос счетчика, который в моем примере является коэффициентом, меняющимся от 0 и до верхнего предела с шагом 0,01. С каждым изменением счетчика меняются данные в строке которые сравниваются с эталонной группой цифр. При достижении некоторых показателей счетчика вычисляемые данные совпадают с эталонной группой цифр либо по четыерем, либо по пяти и 6 цифрам. Вот эти данные счетчика мне и необходимо фиксировать. А поскольку, например, для совпадения данных по 4 цифрам существет большое количество коэффициентов, то мне надо их все зафиксировать. Эталонная группа цифр находится в строке
Код
CV9:DA9
, а расчетная группа цифр - в строке
Код
CN9:CS9
. Если Вы запустите макрос в моем примере, то можете сами убедиться, что в ячейке BV9 довольно быстро появятся показания счетчика, при которых 4 расчетные цифры совпадут с эталонной группой цифр. Спасибо Вам за внимание к моей проблемме.
Уважаемый StoTisteg, я показал макрос счетчика, который в моем примере является коэффициентом, меняющимся от 0 и до верхнего предела с шагом 0,01. С каждым изменением счетчика меняются данные в строке которые сравниваются с эталонной группой цифр. При достижении некоторых показателей счетчика вычисляемые данные совпадают с эталонной группой цифр либо по четыерем, либо по пяти и 6 цифрам. Вот эти данные счетчика мне и необходимо фиксировать. А поскольку, например, для совпадения данных по 4 цифрам существет большое количество коэффициентов, то мне надо их все зафиксировать. Эталонная группа цифр находится в строке
Код
CV9:DA9
, а расчетная группа цифр - в строке
Код
CN9:CS9
. Если Вы запустите макрос в моем примере, то можете сами убедиться, что в ячейке BV9 довольно быстро появятся показания счетчика, при которых 4 расчетные цифры совпадут с эталонной группой цифр. Спасибо Вам за внимание к моей проблемме.Leon307
Сообщение отредактировал Leon307 - Пятница, 21.09.2018, 15:28
Спасибо! Только циклические ссылки были необходимы, чтобы хотя бы последнее значение фиксировалось в ячейке. Иначе по завершении цикла никаких данных не было бы видно. Так моя проблема в том и заключается, что я не знаю как записать все значения "К1", когда появляются совпадения. Ведь "К1" появляется в ячейке много раз, а в моем варианте я увижу лишь последнее значение.
Спасибо! Только циклические ссылки были необходимы, чтобы хотя бы последнее значение фиксировалось в ячейке. Иначе по завершении цикла никаких данных не было бы видно. Так моя проблема в том и заключается, что я не знаю как записать все значения "К1", когда появляются совпадения. Ведь "К1" появляется в ячейке много раз, а в моем варианте я увижу лишь последнее значение.Leon307
Так Вы вовнутрь Вашего цикла (перед Loop) напишите условие проверки (if...). И как только на каком-то значении CounterCell условие проверки сработает, то начинается кусок
то, что нужно сделать в тот момент, когда нашлось совпадение
Так Вы вовнутрь Вашего цикла (перед Loop) напишите условие проверки (if...). И как только на каком-то значении CounterCell условие проверки сработает, то начинается кусок
У меня есть макрос, который создает лист и записвает на него все меняющиеся данные в ячейке "BV11" в строчку 11 и во все строчки ниже. Но этот макрос работает только при ручном вводе данных в ячейку "BV11" и ниже. А вот как сделать, чтобы этот макрос выводил значения автоматически попадаемые в эту ячейку? Вот этот макрос:
[vba]
Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh_res As Worksheet, lc As Long, r As Long
' Смотрим, что значение больше нуля. If Target.Value <= 0 Then Exit Sub End If
' Проверяем, что изменение произошло в строке 11 и дальше. If Target.Row < 11 Then Exit Sub End If
' Отключение пересчёта формул и монитора, чтобы ускорить макрос. Dim calc As Long: calc = Application.Calculation Application.ScreenUpdating = False
' Смотрим, в каком столбце произошло изменение. Select Case Target.Column Case 74 ' Присваиваем листу-результату имя 'sh_res'. Set sh_res = Worksheets("Лист1") Case 82 Set sh_res = Worksheets("Лист2") End Select
' Копируем данные на лист-результат из ячейки, в которой произошло изменение. ' Записываем в переменную 'r' номер строки, в которой произошло изменение. r = Target.Row ' Поиск последнего столбца. End не ищет в скрытых столбцах. If sh_res.Cells(r, "A").Value = "" Then lc = 1 Else lc = sh_res.Cells(r, sh_res.Columns.Count).End(xlToLeft).Column + 1 End If ' Вставка данных. sh_res.Cells(r, lc).Value = Target.Value
' Включение того, что отключено. Application.Calculation = calc Application.ScreenUpdating = True
End Sub
[/vba]
Также прилагаю и сам пример в Excel.
У меня есть макрос, который создает лист и записвает на него все меняющиеся данные в ячейке "BV11" в строчку 11 и во все строчки ниже. Но этот макрос работает только при ручном вводе данных в ячейку "BV11" и ниже. А вот как сделать, чтобы этот макрос выводил значения автоматически попадаемые в эту ячейку? Вот этот макрос:
[vba]
Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh_res As Worksheet, lc As Long, r As Long
' Смотрим, что значение больше нуля. If Target.Value <= 0 Then Exit Sub End If
' Проверяем, что изменение произошло в строке 11 и дальше. If Target.Row < 11 Then Exit Sub End If
' Отключение пересчёта формул и монитора, чтобы ускорить макрос. Dim calc As Long: calc = Application.Calculation Application.ScreenUpdating = False
' Смотрим, в каком столбце произошло изменение. Select Case Target.Column Case 74 ' Присваиваем листу-результату имя 'sh_res'. Set sh_res = Worksheets("Лист1") Case 82 Set sh_res = Worksheets("Лист2") End Select
' Копируем данные на лист-результат из ячейки, в которой произошло изменение. ' Записываем в переменную 'r' номер строки, в которой произошло изменение. r = Target.Row ' Поиск последнего столбца. End не ищет в скрытых столбцах. If sh_res.Cells(r, "A").Value = "" Then lc = 1 Else lc = sh_res.Cells(r, sh_res.Columns.Count).End(xlToLeft).Column + 1 End If ' Вставка данных. sh_res.Cells(r, lc).Value = Target.Value
' Включение того, что отключено. Application.Calculation = calc Application.ScreenUpdating = True