Возник такой вопрос: можно ли используя VBA проводить проверку ряда чисел на разницу между самым большим и самым малым числом? При этом важно, что разница превышающая 1 недопустима.
Положим, что имеется следующий ряд:
15 15 15 15 14 14 14.
В данном случае проверка пройдена. Однако, если представить другой ряд, например:
15 15 15 15 14 13 13.
То в данном случае проверка не проходится, так как разница самого большого и самого малого числа составляет уже 2.
Буду благодарен любым ответам.
Доброго времени суток!
Возник такой вопрос: можно ли используя VBA проводить проверку ряда чисел на разницу между самым большим и самым малым числом? При этом важно, что разница превышающая 1 недопустима.
Положим, что имеется следующий ряд:
15 15 15 15 14 14 14.
В данном случае проверка пройдена. Однако, если представить другой ряд, например:
15 15 15 15 14 13 13.
То в данном случае проверка не проходится, так как разница самого большого и самого малого числа составляет уже 2.
китин, на самом деле не так уж это и критично, лишь бы была возможность появления UserForm'a, позволяющая либо остаться на данном листе либо "пойти" дальше.
китин, на самом деле не так уж это и критично, лишь бы была возможность появления UserForm'a, позволяющая либо остаться на данном листе либо "пойти" дальше.walkinghome
Если я правильно понимаю, то в окончательном документе будет много листов. В том случае, если проверяемые данные находятся в пятой строке каждого листа и не содержат пустых значений можно попробовать так: [vba]
Код
Private Sub Check_diff() Dim r Dim sh As Worksheet Dim i%, min%, max% For Each sh In ThisWorkbook.Worksheets r = sh.Range(sh.Cells(5, 2), sh.Cells(5, sh.Range("a1").End(xlToRight).Column)) min = r(1, 1) For i = LBound(r, 2) To UBound(r, 2) If r(1, i) > max Then max = r(1, i) If r(1, i) < min Then min = r(1, i) Next i If max - min > 1 Then If MsgBox("Разница на листе " & sh.Name & " больше единицы. Минимальное значение - " & min & ", максимальное - " & max & _ ". Продолжить проверку для останых листов?", vbYesNo + vbQuestion + vbDefaultButton2, "Подтверждение") = vbNo Then sh.Activate Exit Sub End If End If Next End Sub
[/vba]
Если я правильно понимаю, то в окончательном документе будет много листов. В том случае, если проверяемые данные находятся в пятой строке каждого листа и не содержат пустых значений можно попробовать так: [vba]
Код
Private Sub Check_diff() Dim r Dim sh As Worksheet Dim i%, min%, max% For Each sh In ThisWorkbook.Worksheets r = sh.Range(sh.Cells(5, 2), sh.Cells(5, sh.Range("a1").End(xlToRight).Column)) min = r(1, 1) For i = LBound(r, 2) To UBound(r, 2) If r(1, i) > max Then max = r(1, i) If r(1, i) < min Then min = r(1, i) Next i If max - min > 1 Then If MsgBox("Разница на листе " & sh.Name & " больше единицы. Минимальное значение - " & min & ", максимальное - " & max & _ ". Продолжить проверку для останых листов?", vbYesNo + vbQuestion + vbDefaultButton2, "Подтверждение") = vbNo Then sh.Activate Exit Sub End If End If Next End Sub
Во вкладке ТО-10 при нажатии на кнопку "пересчитать" макрос дрлден переделать даты в столбцах согласно ячейки w1 но выходит ошибка type mismatch. Я не вижу ошибки.
Во вкладке ТО-10 при нажатии на кнопку "пересчитать" макрос дрлден переделать даты в столбцах согласно ячейки w1 но выходит ошибка type mismatch. Я не вижу ошибки.Andrei0926
Andrei0926, У вас в коде ссылка Cells(1,21) указывает на ячейку U1. Ячейка W1 это Cells(1,23), или более наглядно - Cells(1,"W"). Дальше не проверял. А вообще то вы влезли в чужую тему с вопросом, который к ней не имеет никакого отношения, это нарушение правил форума.
Andrei0926, У вас в коде ссылка Cells(1,21) указывает на ячейку U1. Ячейка W1 это Cells(1,23), или более наглядно - Cells(1,"W"). Дальше не проверял. А вообще то вы влезли в чужую тему с вопросом, который к ней не имеет никакого отношения, это нарушение правил форума.i691198
Сообщение отредактировал i691198 - Четверг, 28.08.2025, 16:12