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

Вход

Регистрация

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

 

= Мир MS Excel/Отбор данных после их проверки по столбцу на другом листе. - Мир MS Excel

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

Excel 2016
Добрый вечер!
Помогите одолеть очередную трудность, а именно:
в книге имеются лист "База", на котором хранятся данные, лист "Отбор", на котором временно размещаются отобранные данные для печати и лист "Напечатанные", на котором хранятся уникальные коды ранее напечатанных данных.
Также имеется форма, на форме ListBox, который заполняется повторяющимися данными после фильтрации (кодами).
А проблема в том, что после выбора нужного кода в ListBox и нажатии кнопки <Выполнить>, данные на лист "Отбор" с листа "База" должны попадать только после проверки по листу "Напечатанные": если уникального кода выбранной записи нет на листе "Напечатанные", она добавляется на лист "Отбор", если есть - не добавляется. То, что я изобразил, добавляет данные на лист в любом случае: есть он на листе "Напечатанные" или нет их там. Файл прилагаю. Весь проблемный код относится к кнопке <cmdExecute>.
Заранее благодарю всех, кто поможет.
К сообщению приложен файл: _7.xlsm(59.2 Kb)
 
Ответить
СообщениеДобрый вечер!
Помогите одолеть очередную трудность, а именно:
в книге имеются лист "База", на котором хранятся данные, лист "Отбор", на котором временно размещаются отобранные данные для печати и лист "Напечатанные", на котором хранятся уникальные коды ранее напечатанных данных.
Также имеется форма, на форме ListBox, который заполняется повторяющимися данными после фильтрации (кодами).
А проблема в том, что после выбора нужного кода в ListBox и нажатии кнопки <Выполнить>, данные на лист "Отбор" с листа "База" должны попадать только после проверки по листу "Напечатанные": если уникального кода выбранной записи нет на листе "Напечатанные", она добавляется на лист "Отбор", если есть - не добавляется. То, что я изобразил, добавляет данные на лист в любом случае: есть он на листе "Напечатанные" или нет их там. Файл прилагаю. Весь проблемный код относится к кнопке <cmdExecute>.
Заранее благодарю всех, кто поможет.

Автор - vigl
Дата добавления - 26.02.2018 в 23:30
nilem Дата: Вторник, 27.02.2018, 09:02 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1453
Репутация: 512 ±
Замечаний: 0% ±

Excel 2013
vigl, привет
попробуйте (немного кривовато, ну как есть)
[vba]
Код
Private Sub cmdExecute_Click()
Dim r As Range
Стр_База = Sheets("База").Cells(Rows.Count, 4).End(xlUp).Row
Кат = lstKod.Value

'***************лист "База"******************************************************************************
For i = 1 To Стр_База
    If Cells(i, 4) = Кат Then
        УКод = Cells(i, 2)
        ФИО = Cells(i, 3)

        '***************лист "Напечатанные"******************************************************************
        Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)

        If r Is Nothing Then
            Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 2).Value = Array(УКод, ФИО)
            Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод
        End If

    End If
Next
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеvigl, привет
попробуйте (немного кривовато, ну как есть)
[vba]
Код
Private Sub cmdExecute_Click()
Dim r As Range
Стр_База = Sheets("База").Cells(Rows.Count, 4).End(xlUp).Row
Кат = lstKod.Value

'***************лист "База"******************************************************************************
For i = 1 To Стр_База
    If Cells(i, 4) = Кат Then
        УКод = Cells(i, 2)
        ФИО = Cells(i, 3)

        '***************лист "Напечатанные"******************************************************************
        Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)

        If r Is Nothing Then
            Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 2).Value = Array(УКод, ФИО)
            Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод
        End If

    End If
Next
End Sub
[/vba]

Автор - nilem
Дата добавления - 27.02.2018 в 09:02
vigl Дата: Вторник, 27.02.2018, 23:31 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
nilem, спасибо Вам большое! после незначительного тюнинга и улучшайнинга, все прекрасно заработало.
 
Ответить
Сообщениеnilem, спасибо Вам большое! после незначительного тюнинга и улучшайнинга, все прекрасно заработало.

Автор - vigl
Дата добавления - 27.02.2018 в 23:31
nilem Дата: Среда, 28.02.2018, 07:57 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1453
Репутация: 512 ±
Замечаний: 0% ±

Excel 2013
vigl,
если не сложно, покажите, пожалуйста, тюнингованный вариант. Ну так, для общего развития. )


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеvigl,
если не сложно, покажите, пожалуйста, тюнингованный вариант. Ну так, для общего развития. )

Автор - nilem
Дата добавления - 28.02.2018 в 07:57
Karataev Дата: Среда, 28.02.2018, 08:09 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1235
Репутация: 465 ±
Замечаний: 0% ±

Excel
...


Киви-кошелек: 9166309108
Яндекс-деньги: 410014131888288


Сообщение отредактировал Karataev - Среда, 28.02.2018, 08:41
 
Ответить
Сообщение...

Автор - Karataev
Дата добавления - 28.02.2018 в 08:09
vigl Дата: Среда, 28.02.2018, 09:01 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
nilem,
[vba]
Код

Sheets("База").Select
Стр_База= ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
Код = lstKod.Value

'****************************************************************************************************************
For i = 1 To Стр_База
    Cells(i, 14).Select
    sm = ActiveCell.Value
    If Format(sm) = Код Then
        УКод = Cells(i, 2)
        Фам = Cells(i, 4)
        Имя = Cells(i, 5)
        Отч = Cells(i, 6)
        ДР = Cells(i, 7)
        МР = Cells(i, 8)
        НП = Cells(i, 9)
        Улица = Cells(i, 10)
        Дом = Cells(i, 11)
        Корп = Cells(i, 12)
        Кварт = Cells(i, 13)

'****************************************************************************************************
        Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)

        If r Is Nothing Then
            Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 11).Value = Array( УКод, Фам, Имя, Отч, ДР, МР, НП, Улица, Дом, Корп, Кварт)
            'Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод
        End If

    End If
Next

End If
[/vba]
 
Ответить
Сообщениеnilem,
[vba]
Код

Sheets("База").Select
Стр_База= ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
Код = lstKod.Value

'****************************************************************************************************************
For i = 1 To Стр_База
    Cells(i, 14).Select
    sm = ActiveCell.Value
    If Format(sm) = Код Then
        УКод = Cells(i, 2)
        Фам = Cells(i, 4)
        Имя = Cells(i, 5)
        Отч = Cells(i, 6)
        ДР = Cells(i, 7)
        МР = Cells(i, 8)
        НП = Cells(i, 9)
        Улица = Cells(i, 10)
        Дом = Cells(i, 11)
        Корп = Cells(i, 12)
        Кварт = Cells(i, 13)

'****************************************************************************************************
        Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)

        If r Is Nothing Then
            Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 11).Value = Array( УКод, Фам, Имя, Отч, ДР, МР, НП, Улица, Дом, Корп, Кварт)
            'Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод
        End If

    End If
Next

End If
[/vba]

Автор - vigl
Дата добавления - 28.02.2018 в 09:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отбор данных после их проверки по столбцу на другом листе. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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