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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2015, 11:51   #1
MIKID
Пользователь
 
Регистрация: 30.08.2013
Сообщений: 29
По умолчанию Сравнить массивы скрыть строки с несовпадениями

Приветствую сей уважаемый форум!
Не могу справиться с задачей, прошу помощи.
Нужно сравнить два списка на разных листах и скрыть строки на первом листе где нет совпадений с листом 2.
Сейчас использую решение - фильтр по значению в ячейке, это не удобно и не совсем подходит, хотя результат тот же.
Нужно что бы сравнивались листы и на первом оставались только строки с совпадениями без дополнительных признаков.
Спасибо если кто то поможет мне это решить.
Вложения
Тип файла: rar Вопрос х.rar (21.6 Кб, 11 просмотров)
MIKID вне форума Ответить с цитированием
Старый 18.12.2015, 13:08   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
управляется двойным кликом по 1-й строке:
- в колонке А, С видим данные совпавшие с данными листов А, С
- по любой другой ячейке - видим все данные.
Вложения
Тип файла: rar Вопрос х.rar (19.1 Кб, 8 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.12.2015, 13:29   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

можно так:
Код:
Private Sub CommandButton1_Click()
Dim cell As Range, cell_C As Range, ii As Long, sh As Object, sh_C As Object, lsRow As Long, lsRow_C As Long
Set sh = ThisWorkbook.Sheets(1): Set sh_C = ThisWorkbook.Sheets(3)

If CommandButton1.BackColor = &HFF& Then
CommandButton1.BackColor = &HC0C0C0
    Application.ScreenUpdating = False
        lsRow = sh.Cells(Rows.Count, "C").End(xlUp).Row
        lsRow_C = sh_C.Cells(Rows.Count, 1).End(xlUp).Row
        ii = 0
        For Each cell In sh.Range("C4:C" & lsRow)
            If ii = 0 Then
                For Each cell_C In sh_C.Range("A1:A" & lsRow_C)
                    If cell = cell_C Then ii = ii + 1: Exit For
                Next
            End If
            If ii = 0 Then cell.EntireRow.Hidden = True: ii = 0 Else ii = 0
        Next
    Application.ScreenUpdating = True
Else
CommandButton1.BackColor = &HFF&
    Application.ScreenUpdating = False
        sh.Range("C4:C400").EntireRow.Hidden = False
    Application.ScreenUpdating = True
End If
End Sub

Private Sub CommandButton2_Click()
Dim cell As Range, cell_A As Range, ii As Long, sh As Object, sh_A As Object, lsRow As Long, lsRow_A As Long
Set sh = ThisWorkbook.Sheets(1): Set sh_A = ThisWorkbook.Sheets(2)

If CommandButton1.BackColor = &HFF& Then
CommandButton1.BackColor = &HC0C0C0
    Application.ScreenUpdating = False
        lsRow = sh.Cells(Rows.Count, "C").End(xlUp).Row
        lsRow_A = sh_A.Cells(Rows.Count, 1).End(xlUp).Row
        ii = 0
        For Each cell In sh.Range("C4:C" & lsRow)
            If ii = 0 Then
                For Each cell_A In sh_A.Range("A1:A" & lsRow_A)
                    If cell = cell_A Then ii = ii + 1: Exit For
                Next
            End If
            If ii = 0 Then cell.EntireRow.Hidden = True: ii = 0 Else ii = 0
        Next
    Application.ScreenUpdating = True
Else
CommandButton1.BackColor = &HFF&
    Application.ScreenUpdating = False
        sh.Range("C4:C400").EntireRow.Hidden = False
    Application.ScreenUpdating = True
End If
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 18.12.2015, 13:41   #4
MIKID
Пользователь
 
Регистрация: 30.08.2013
Сообщений: 29
По умолчанию

Уважаемый Игорь, не могли бы Вы расписать как работает код, что то я не пойму, как мне сделать сравнение теперь с листом С. Нужно отдельно оставлять на 1 листе совпадения с А и отдельно с С, желательно кнопками. Я тогда уже все адаптирую в свой файл.
MIKID вне форума Ответить с цитированием
Старый 18.12.2015, 13:46   #5
MIKID
Пользователь
 
Регистрация: 30.08.2013
Сообщений: 29
По умолчанию

Спасибо Луганск!!!!! staniiislav
Буду разбираться, мне так более понятно :).
Но все же код Игоря хотелось бы понять как работает то же.
MIKID вне форума Ответить с цитированием
Старый 18.12.2015, 13:50   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код не закрыт. в модуле Лист1 две простые процедуры
Код:
Private Sub worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Row <> 1 Then Exit Sub
  Cancel = True
  If Target.Column = 1 Or Target.Column = 3 Then ShowRows Target.Column Else Rows.Hidden = False
End Sub



Sub ShowRows(n As Long)
  Dim ws As Worksheet, rg As Range, R1 As Long, R2 As Long, r As Long
  R1 = 4
  For Each ws In Worksheets
    If ws.CodeName = Chr(64 + n) Then Exit For
  Next
  Rows.Hidden = False:  Set rg = Nothing:  R2 = Cells(Rows.Count, 3).End(xlUp).Row
  For r = R1 To R2
    If WorksheetFunction.CountIf(ws.Columns(1), Cells(r, 3)) = 0 Then
      If rg Is Nothing Then Set rg = Cells(r, 3) Else Set rg = Union(rg, Cells(r, 3))
    End If
  Next
  If Not rg Is Nothing Then rg.EntireRow.Hidden = True
End Sub
первая срабатывает на двойной клик и вызывает (если нужно) вторую, которая показывает (скрывает строки).
приблизительно так это все работает.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.12.2015, 14:59   #7
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от MIKID Посмотреть сообщение
Но все же код Игоря хотелось бы понять как работает то же.
ЛКМ два раза на ячейках A1,B1,C1 на основном листе. Увидите как работает макрос Игоря
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 18.12.2015, 15:04   #8
MIKID
Пользователь
 
Регистрация: 30.08.2013
Сообщений: 29
По умолчанию

Разобрался, спасибо!!!
MIKID вне форума Ответить с цитированием
Старый 18.12.2015, 15:17   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

так в сообщении 2 была написана
"инструкция пользователю по эксплуатации программного комплекса по скрытию (отображению) строк основного листа в случае наличия совпадений в данных на смежном листе книги", которая описывает какими действиями оператор может управлять внешним видом листа

Цитата:
управляется двойным кликом по 1-й строке:
- в колонке А, С видим данные совпавшие с данными листов А, С
- по любой другой ячейке - видим все данные.
из сказанного очевидно, что программа различает двойной клик по А1, С1 и любой другой ячейке 1-й строки.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.12.2015, 17:49   #10
MIKID
Пользователь
 
Регистрация: 30.08.2013
Сообщений: 29
По умолчанию

:) Как работает понятно. Не понятен сам код.
с кодом Станислава разобрался и переделал его под свои нужды, единственное он сравнивает последовательно и если последовательность нарушается, то строки выпадают. Код Игоря то что нужно, только я плохо знаю VBA, хотя стараюсь и адаптировать его под себя у меня не получится. Так как у меня больше листов для сравнения с первым, сравнивать нужно другие столбцы. В общем вот так.
Спасибо!
MIKID вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнить две строки horpenst Microsoft Office Excel 4 29.03.2012 17:53
сравнить строки Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.08.2011 08:56
сравнить две строки maxs7 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 01.10.2010 05:27
Сравнить строки. FASM. Crivel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 15.09.2009 17:27
сравнить разные строки Katovski Общие вопросы Delphi 8 02.05.2008 21:10