Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выбор строк по дате - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор строк по дате (Макросы/Sub)
Выбор строк по дате
Marisa Дата: Вторник, 29.03.2016, 23:32 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Доброго времени! Хочу попросить помочь поправить код, который исходя из условий дата и значение из списка1 если стоит галочка и из списка 2 (если нет галочки) выбирает значения. Код работает, но нужно еще чтобы если указана дата, но не выбрано значение из списка 1 или 2 (ячейка со значением пуста) фильтр выводил все значения за указанную дату. Вот код
[vba]
Код
Sub ChoiceOfData2()
Dim ArrData, ArrRes
Dim dtDateS As Date, dtDateF As Date
Dim sObj As String, bGroup As Boolean
Dim lRws As Long
Dim i As Long, k As Long
    With wsKt
        lRws = .Cells(.Rows.Count, 5).End(xlUp).Row
        If lRws < 5 Then Exit Sub
        ArrData = .Range("E5:I" & lRws).Value ' расход
    End With
    
    With wsAnalytic
        sObj = .Cells(4, 13).Value
        dtDateS = .Cells(2, 12).Value: dtDateF = .Cells(4, 12).Value
        bGroup = .Cells(2, 14).Value
    End With
    
    If dtDateF = 0 Then dtDateF = 100000 ' если нет конечной даты
    lRws = UBound(ArrData): ReDim ArrRes(1 To lRws, 1 To 5)
    
    For i = 1 To lRws
        If ArrData(i, 1) >= dtDateS Then
            If ArrData(i, 1) <= dtDateF Then
                If bGroup Then ' группа статей
                    If Replace(UCase(ArrData(i, 5)), UCase(sObj), "") = _
                    UCase(ArrData(i, 5)) Then GoTo AA
                Else ' статья
                    If ArrData(i, 3) <> sObj Then GoTo AA
                End If
                
                k = k + 1
                ArrRes(k, 1) = ArrData(i, 1)
                ArrRes(k, 2) = ArrData(i, 2)
                ArrRes(k, 3) = ArrData(i, 3)
                ArrRes(k, 4) = ArrData(i, 4)
                ArrRes(k, 5) = ArrData(i, 5)
            End If
        End If
AA:
    Next i

    If k > 0 Then wsAnalytic.Cells(7, 12).Resize(k, 5).Value = ArrRes
End Sub
[/vba]

[moder]Переназовите тему более конкретно и пример с Вашими данными покажите.[/moder]


Сообщение отредактировал Marisa - Среда, 30.03.2016, 10:57
 
Ответить
СообщениеДоброго времени! Хочу попросить помочь поправить код, который исходя из условий дата и значение из списка1 если стоит галочка и из списка 2 (если нет галочки) выбирает значения. Код работает, но нужно еще чтобы если указана дата, но не выбрано значение из списка 1 или 2 (ячейка со значением пуста) фильтр выводил все значения за указанную дату. Вот код
[vba]
Код
Sub ChoiceOfData2()
Dim ArrData, ArrRes
Dim dtDateS As Date, dtDateF As Date
Dim sObj As String, bGroup As Boolean
Dim lRws As Long
Dim i As Long, k As Long
    With wsKt
        lRws = .Cells(.Rows.Count, 5).End(xlUp).Row
        If lRws < 5 Then Exit Sub
        ArrData = .Range("E5:I" & lRws).Value ' расход
    End With
    
    With wsAnalytic
        sObj = .Cells(4, 13).Value
        dtDateS = .Cells(2, 12).Value: dtDateF = .Cells(4, 12).Value
        bGroup = .Cells(2, 14).Value
    End With
    
    If dtDateF = 0 Then dtDateF = 100000 ' если нет конечной даты
    lRws = UBound(ArrData): ReDim ArrRes(1 To lRws, 1 To 5)
    
    For i = 1 To lRws
        If ArrData(i, 1) >= dtDateS Then
            If ArrData(i, 1) <= dtDateF Then
                If bGroup Then ' группа статей
                    If Replace(UCase(ArrData(i, 5)), UCase(sObj), "") = _
                    UCase(ArrData(i, 5)) Then GoTo AA
                Else ' статья
                    If ArrData(i, 3) <> sObj Then GoTo AA
                End If
                
                k = k + 1
                ArrRes(k, 1) = ArrData(i, 1)
                ArrRes(k, 2) = ArrData(i, 2)
                ArrRes(k, 3) = ArrData(i, 3)
                ArrRes(k, 4) = ArrData(i, 4)
                ArrRes(k, 5) = ArrData(i, 5)
            End If
        End If
AA:
    Next i

    If k > 0 Then wsAnalytic.Cells(7, 12).Resize(k, 5).Value = ArrRes
End Sub
[/vba]

[moder]Переназовите тему более конкретно и пример с Вашими данными покажите.[/moder]

Автор - Marisa
Дата добавления - 29.03.2016 в 23:32
Marisa Дата: Вторник, 29.03.2016, 23:38 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Как то странно оформился мой код... Даже не знаю как поправить.
[moder]Исправила[/moder]


Сообщение отредактировал Pelena - Среда, 30.03.2016, 07:54
 
Ответить
СообщениеКак то странно оформился мой код... Даже не знаю как поправить.
[moder]Исправила[/moder]

Автор - Marisa
Дата добавления - 29.03.2016 в 23:38
Marisa Дата: Среда, 30.03.2016, 11:15 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Мой файл
К сообщению приложен файл: 160302.xlsm(37Kb)
 
Ответить
СообщениеМой файл

Автор - Marisa
Дата добавления - 30.03.2016 в 11:15
Manyasha Дата: Среда, 30.03.2016, 12:11 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 1587
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
Marisa, для переменной bGroup наверное надо значение чекбокса брать?
[vba]
Код
bGroup = .Cells(4, 15).Value' а не Cells(2, 14)
[/vba]
все значения за указанную дату

Вот здесь условие добавьте
[vba]
Код
                Else ' статья
                    If ArrData(i, 3) <> sObj And sObj <> "" Then GoTo AA
                End If
[/vba]
К сообщению приложен файл: 160302-1.xlsm(38Kb)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеMarisa, для переменной bGroup наверное надо значение чекбокса брать?
[vba]
Код
bGroup = .Cells(4, 15).Value' а не Cells(2, 14)
[/vba]
все значения за указанную дату

Вот здесь условие добавьте
[vba]
Код
                Else ' статья
                    If ArrData(i, 3) <> sObj And sObj <> "" Then GoTo AA
                End If
[/vba]

Автор - Manyasha
Дата добавления - 30.03.2016 в 12:11
Marisa Дата: Среда, 30.03.2016, 12:46 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Manyasha, Спасибо огромное, что помогли мне в который раз! По поводу
Цитата
для переменной bGroup наверное надо значение чекбокса брать?
, я вставляла столбцы и этот момент проворонила. Еще раз СПАСИБО!
[moder]Для цитат есть своя кнопка (слева от fx). Или можно выделить нужный текст и нажать "Цитата" под сообщением[/moder]


Сообщение отредактировал Manyasha - Среда, 30.03.2016, 12:49
 
Ответить
СообщениеManyasha, Спасибо огромное, что помогли мне в который раз! По поводу
Цитата
для переменной bGroup наверное надо значение чекбокса брать?
, я вставляла столбцы и этот момент проворонила. Еще раз СПАСИБО!
[moder]Для цитат есть своя кнопка (слева от fx). Или можно выделить нужный текст и нажать "Цитата" под сообщением[/moder]

Автор - Marisa
Дата добавления - 30.03.2016 в 12:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор строк по дате (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!