Страницы: 1
RSS
Выбрать в диапазоне значения по заданному промежутку и перенести выбранные значения на другой лист excel vba
 
Уважаемые форумчане!

Пожалуйста, подскажите как сделать выборку значений в диапазоне по заданному промежутку. (Из-за отсутствия функции between, не знаю как это решается).
Диапазон включает в себя 3 столбца.
После выборки, в каждой строке этого диапазона нужно определить минимальное значение и перенести это минимальное значение на лист results так же (т.е. если минимальное значение из 1-го столбца диапазона, то и перенести его в 1-й и т.д.)
Файл в скрепке (попытка начала кода).
 
Не понял, как должен выглядеть результат.
Зачем такой большей и разноцветный пример?
between замените через if a>=b and a<=c then ......
 
Цитата
Не понял, как должен выглядеть результат.
В листе main в textbox-ах задан промежуток выбираемых значений.
На листе results должны быть только строки из заданного промежутка.

Цитата
between замените через if a>=b and a<=c then ......
Так и сделал, но что то некорректно выбирает.
 
Если у вас код в модуле листа main, то зачем применять конструкцию
   With Sheets("main")
Уж лучше применить With Sheets("results")

Что это за диапазон ? .Range("Таблица1[[DY]:[FC]]").Select
Это так в умных таблицах принято?
 
Цитата
Это так в умных таблицах принято?
Ну как бы да.
 
У меня 2003 и на листе main нет объектов TextBox и CommandButton
 
Цитата
У меня 2003 и на листе main нет объектов TextBox и CommandButton
В текстбоксах промежуток - от и до. Кнопка для запуска макроса
 
Цитата
В текстбоксах промежуток - от и до
А чем оправдано применение текстбоксов? Можно просто записывать
значения в две ячейки и с ними сравнивать. Попробуйте такой вариант

Код
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Long
Dim j As Integer
Dim iLastRow_m As Long
Dim iLastRow_r As Long
Dim iCell As Range
    Application.ScreenUpdating = False
With Sheets("results")
           iLastRow_r = .Cells(.Rows.Count, 1).End(xlUp).Row
           
           ' очистить диапазон на листе "results" под новые данные
           ' написать код
           
           iLastRow_m = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To iLastRow_m
        j = 0
        Do
            j = j + 1
        Loop Until Cells(i, 2 + j) = WorksheetFunction.Min(Range(Cells(i, 3), Cells(i, 5)))
           
           ' проверить вхождение Cells(i, 2 + j) в диапазон From:To
           ' если входит в диапазон, то переносим на лист "results"
           
           iLastRow_r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
             .Cells(iLastRow_r, 1) = Cells(i, 1)
             .Cells(iLastRow_r, 2) = Cells(i, 2)
             .Cells(iLastRow_r, 2 + j) = Cells(i, 2 + j)
    Next
End With
    Application.ScreenUpdating = True
End Sub

 
Очистку диапазона и проверку вхождения значения в диапазон From:To допишите сами
 
Kuzmich, спасибо. И действительно можно использовать ячейки для выбора диапазона, но в полной программе выбор будет производиться из формы, поэтому так и начал.
 
Уважаемый Kuzmich, подскажите пожалуйста, как это будет выглядеть если просматриваемый диапазон вместо листа main будет находиться в другой книге к примеру
Код
Dim WbMP As Workbook

Set WbMP = Workbooks.Open("C:\Users\A. Shvechkov\Desktop\A300_MP_Task_Status.xlsm") 
WbMP.Sheets("A300_MP_Task_Status") 
......
 
 
Я бы код макроса разместил в модуле листа "results"
и вставил туда кусок открытия файла WbMP в режиме только чтение.
А дальше With WbMP.Sheets("A300_MP_Task_Status") . Только правильно
поставьте точки относительно этого листа. После переноса данных
закройте книгу  WbMP без сохранения.
Страницы: 1
Читают тему
Наверх