Страницы: 1
RSS
Определение макросом номера строки по соответствию значений в двух не смежных ячейках умной таблицы, Аналогично названию темы
 
Братцы, доброго выходного дня вам всем!
Есть у кого-нибудь желание отвлечься и подсобить?)
Есть умная таблица с одной строкой шапки(заголовки). На другом листе есть два комбобокса, в которых отбираются значения из не смежных столбцов этой самой умной таблицы . Нужно определить номер строки, в которой есть и значение комбобокса1 и значение комбобокса2. Первое же совпадение будет и последним, другого не дано.
Есть соображения на сей счет?)
Изменено: Эльбрус - 09.06.2019 17:03:53
 
Эльбрус, пример есть?
 
iMrTidy, к сожалению, у меня под рукой сейчас нет своего файла - лежу в палате, домой отпустят только завтра. Пока лежал перебирал в голове недоделанное, придумать ничего не смог вот и обратился за помощью. Если есть идеи по написанному выше, набросайте, пожалуйста, а я уже доведу до нужной кондиции.)
Изменено: Эльбрус - 09.06.2019 16:31:20
 
Например, если значения находятся в первом и четвертом столбцах, тогда можно так попробовать:
Код
For i = 2 To Cells(Rows.Count, 1).End(xlUp).row
    If Cells(i, 1).Value = ComboBox1.Value And _
       Cells(i, 4).Value = ComboBox2.Value Then
       MsgBox "Совпадение в строке " & (i)
       Exit For
    End If
Next i
 
_Igor_61, спасибо большое, что откликнулись! Примерно так я себе это и представлял в голове, :D  но не могу сложить в ней же - в голове - как без MsgBoxа загнать этот i (этот номер строки) в переменную (задать как переменную), чтобы использовать ее дальше в коде для копирования нужных ячеек из искомой строки на другой лист. :cry:  
Изменено: Эльбрус - 09.06.2019 19:38:11
 
Цитата
Эльбрус написал: загнать этот i (этот номер строки) в переменную (задать как переменную), чтобы использовать ее дальше в коде для копирования нужных ячеек из искомой строки на другой лист
Зачем еще какая-то переменная если она (i) и так уже переменная? Да и копирование можно тут же организовать
Код
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(I, 1) = ComboBox1.Value And Cells(I, 4) = ComboBox2.Value Then
        Cells(I, 3).Copy Worksheets("Другой_лист").Range("A1")
        Exit For
    End If
Next I
Согласие есть продукт при полном непротивлении сторон
 
переменная уже задана i и № строки в нее загонит написанная  _Igor_61, процедура
а MsgBox - ничего никуда не загоняет, а сообщает, в какой строке найдено совпадение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Sanja, и Вам моя искренняя благодарность!
Да, пожалуй, Вы правы. Просто я изначально замысливал (не очень грамотно, наверное) первым макросом определить номер строки, а вторым уже копировать нужные ячейки. Но Ваш вариант лучше, конечно же. Когда файла перед глазами нет, то трудновато приходится, особенно мне, который с vba на очень почтительное ВЫ. :)
Спасибо ещё раз!
 
Думаю, что можно и без For-Next: два раза Find.
 
Юрий М, добрый вечер! А в Findе в What=.... указывать cbx1.Value? И как в Finde прописать двойное условие: последовательно или в две строчки?
Изменено: Эльбрус - 09.06.2019 21:42:12
 
Привет! Наверное,я погорячился: если в пределах одного столбца есть повторяющиеся значения, то придётся перебирать тем или иным способом - Find ведь найдёт только первое (или последнее) значение. Если же дубликатов в каждом из столбцов не будет, то можно ))
 
В модуль второго листа:
Код
Sub Macro1()
Dim Rng As Range, iRow As Long
    With Sheets("Лист1")
        Set Rng = .Columns(1).Find(what:=Me.ComboBox1, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Rng Is Nothing Then
            iRow = Rng.Row
            Set Rng = .Columns(3).Find(what:=Me.ComboBox2, LookIn:=xlValues, LookAt:=xlWhole)
            If Not Rng Is Nothing Then
                If Rng.Row = iRow Then MsgBox "Совпадение найдено в строке " & iRow
            End If
        End If
    End With
End Sub
Если делать в стандартном модуле, то вместо Ме указать имя второго листа.
 
Перемудрил - можно и один Find:
Код
Sub Macro2()
Dim Rng As Range
    With Sheets("Лист1")
        Set Rng = .Columns(1).Find(what:=Me.ComboBox1, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Rng Is Nothing Then
            If Rng.Offset(0, 2) = Me.ComboBox2 Then MsgBox "Совпадение найдено в строке " & Rng.Row
        End If
    End With
End Sub
 
Юрий М, повторений сочетания двух ячеек у меня не будет, так что об этой проблеме я не волнуюсь. Опробовать Ваш код не могу до завтра, но и так знаю, что это будет то, что надо.) Спасибо ещё раз!
Страницы: 1
Наверх