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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 23:13   #1
negnaya111
 
Регистрация: 08.03.2012
Сообщений: 7
По умолчанию Макрос для выборки автомобилей,выпущенных не раньше определённого года

Помогите,пожалуйста,написать макрос.Никак не получается.
В таблице находятся ведомости об автомобилях:марка,серийный номер,регистрационный номер,цвет,количество дверей,год выпуска,цена.Необходимо написать макрос для выборки автомобилей определённого цвета,выпущенных не раньше определённого года.Необходимый цвет и год выпуска задаются с клавиатуры.Результат записать на новый рабочий лист.
Помогите,пожалуйста.

Последний раз редактировалось EducatedFool; 31.03.2012 в 00:33. Причина: убрал вырвиглазный цвет и размер шрифта
negnaya111 вне форума Ответить с цитированием
Старый 30.03.2012, 23:25   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ого!
Я пока читал, представил, как выглядит рабочий файл
Когда дочитал до "Необходимый цвет и год выпуска задаются с клавиатуры" - понял, что никакого рабочего файла нет... Переубедите меня
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.03.2012, 23:33   #3
negnaya111
 
Регистрация: 08.03.2012
Сообщений: 7
По умолчанию

Я макрос создания таблицы с необходимыми данными написала.Написала так же чтобы вводилось окно запроса о вводе года выпуска.А вот выборка автомобилей,выпущенных не раньше введённого числа у меня не получается.
negnaya111 вне форума Ответить с цитированием
Старый 30.03.2012, 23:34   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

И где это всё?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.03.2012, 23:41   #5
negnaya111
 
Регистрация: 08.03.2012
Сообщений: 7
По умолчанию

Вот я прикрепила файл.
Вложения
Тип файла: rar Книга1.rar (36.0 Кб, 13 просмотров)
negnaya111 вне форума Ответить с цитированием
Старый 31.03.2012, 00:00   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

А цвет?
А куда отбирать?
Я бы делал на массивах - исходные данные берём в массив, когда выяснили цвет и год - перебираем массив и отбираем подходящие строки в другой созданный заранее под максимальный размер массив, его заполненную часть выгружаем.
Так будет быстрее. Но в этой учебной задаче можно просто пройтись циклом по строкам, или использовать фильтр, затем видимые строки скопировать (куда?)

Например, заготовка:
Код:
Sub tt()
    Sheets(1).AutoFilterMode = 0
    With Sheets(1).[A2].CurrentRegion
        .AutoFilter 4, "Серый", 1: .AutoFilter 6, ">1995", 1
        .SpecialCells(12).Copy Sheets(2).[A1]
    End With
    Sheets(1).AutoFilterMode = False
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.03.2012, 00:13   #7
negnaya111
 
Регистрация: 08.03.2012
Сообщений: 7
По умолчанию

Выдаёт ошибку Subscript out of range.
negnaya111 вне форума Ответить с цитированием
Старый 31.03.2012, 00:16   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Subscript out of range - это потому, что не создали сперва второй лист.
Так можно автофильтром отобрать (версия 2, лист создаётся сам):
Код:
Sub tt()
    Dim sh As Worksheet
    Application.ScreenUpdating = False

    Set sh = ThisWorkbook.Sheets.Add(after:=Sheets(Sheets.Count))
    Sheets("Лист1").AutoFilterMode = 0
    With Sheets("Лист1").[A2].CurrentRegion
        .AutoFilter 4, "Серый", 1: .AutoFilter 6, ">1995", 1
        .SpecialCells(12).Copy sh.[A1]
        sh.Cells.EntireColumn.AutoFit
    End With
    Sheets("Лист1").AutoFilterMode = False

    Application.ScreenUpdating = True
End Sub
Но что-то тут не получается красиво подстраховаться от того, что вдруг отберётся только шапка - тогда ведь незачем лист создавать.
А если делать перебором - то можно посчитать количество отобранных строк.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.03.2012, 00:29   #9
negnaya111
 
Регистрация: 08.03.2012
Сообщений: 7
По умолчанию

Оно то выводит на другой лист,но только шапку таблицы или нужно в макросе указать конкретный цвет и год.А если каждый раз вводить другой год выпуска,то тогда не получится.
negnaya111 вне форума Ответить с цитированием
Старый 31.03.2012, 00:31   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так получилось не копировать, если нечего:
Код:
Sub tt()
    Dim sh As Worksheet
    Application.ScreenUpdating = False

    Sheets("Лист1").AutoFilterMode = 0
    With Sheets("Лист1").[A2].CurrentRegion
        .AutoFilter 4, "Серый", 1: .AutoFilter 6, ">2000", 1
        If .SpecialCells(12).Rows.Count > 1 Then
            Set sh = ThisWorkbook.Sheets.Add(after:=Sheets(Sheets.Count))
            .SpecialCells(12).Copy sh.[A1]
            sh.Cells.EntireColumn.AutoFit
        End If
    End With
    Sheets("Лист1").AutoFilterMode = False

    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формула для выборки данных из динамического ряда столбцов AlWin Microsoft Office Excel 11 25.11.2010 15:38
Макрос для сложной выборки DJspam894 Microsoft Office Excel 3 18.04.2010 10:32
Нужна прога для автонумерации определённого повторяюшегося слова в тексте типа: word(n+1) Pin Софт 7 05.10.2009 09:42
создание выборки и отчетов для бд в С# P'er Общие вопросы .NET 3 15.09.2009 16:42
Как правильно построить цикл для выборки? Tanuska___:) БД в Delphi 1 12.01.2009 14:50