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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 21:15   #1
fsf
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 1
По умолчанию Помогите сделать сложную выборку с помощью макросов в Excel

Доброго вечера суток (по Киеву))
Учусь заочно, через неделю сессия. Вот никак не могу сделать выборку с помощью макросов VBA в Excel...
Смысл задачи таков: написать макрос для выборки стадионов, построенных не раньше некоторого года и при этом их вместимость находится в определенном диапазоне. Границы диапазона и год вводятся с клавиатуры...
Таблица прилагается ниже.
Заранее спасибо за помощь!
Вложения
Тип файла: zip №8 - копия.zip (8.3 Кб, 18 просмотров)

Последний раз редактировалось fsf; 03.11.2013 в 21:20.
fsf вне форума Ответить с цитированием
Старый 04.11.2013, 11:25   #2
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Плохо что в примере даже попытки не обнаружено решение Вашей задачи
Попробуйте так:

Код:
Option Explicit

Sub Stadion()
    Dim arr(), i&, s_1&, s_2&, s_3&, lsRow&, n&, j&, aSh As Worksheet
    Set aSh = ActiveSheet
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With
    
    s_1 = Application.InputBox(Prompt:="Введите год, стадиона построенного не раньше...", Title:="Год", Type:=1)
    If s_1 = 0 Then GoTo Cansel_InputBox
    s_2 = Application.InputBox(Prompt:="Вместимость от (число)...", Title:="Вместимость", Type:=1)
    If s_2 = 0 Then GoTo Cansel_InputBox
    s_3 = Application.InputBox(Prompt:="Вместимость до (число)...", Title:="Вместимость", Type:=1)
    If s_3 = 0 Then GoTo Cansel_InputBox
    
    With aSh.UsedRange
        lsRow = .Row + .Rows.Count - 1
    End With
    
    n = 1
    
    arr = aSh.Range("A1:F" & lsRow).Value
    For i = 2 To UBound(arr)
        If arr(i, 3) >= s_1 Then
            If arr(i, 5) >= s_2 Then
                If arr(i, 5) <= s_3 Then
                    n = n + 1
                    For j = 1 To UBound(arr, 2)
                        arr(n, j) = arr(i, j)
                    Next j
                End If
            End If
        End If
    Next i
    
    If n > 1 Then
        Worksheets.Add(After:=Worksheets(Sheets.Count)).Name = "Готово" & Fix(1000 * Rnd)
        Range("A1").Resize(n, UBound(arr, 2)) = arr
        Range("A1:F" & n).Borders.LineStyle = xlContinuous
        Range("A1:F1").Font.Bold = True
        Columns("A:F").EntireColumn.AutoFit
    End If
    
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
    Exit Sub

Cansel_InputBox:
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 04.11.2013 в 11:31.
staniiislav вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к таблицам с помощью макросов Anbor Microsoft Office Access 1 14.10.2013 18:55
Помогите сделать объединение ячеек с помощью макроса miraxgr Microsoft Office Excel 2 30.09.2013 12:16
Помогите сделать выборку по популярности bubna77 PHP 4 29.11.2009 20:17
Не могу сделать выборку с нужными полями, помогите чайнику! kadet.rus Microsoft Office Access 2 26.04.2008 14:12
Помогите сделать выборку! Adm Microsoft Office Access 1 06.02.2008 19:10