Sheet1

С помощью этого листа1 есть список значений,

Мне нужно получить статус «Выполняется» и «Завершено» на основе идентификатора и списка уроков.

Sheet2

Статус из листа1 должен быть вставлен в соответствии с идентификатором и темой в лист2 с помощью VBA. Может ли кто-нибудь помочь по этой теме для достижения результатов?

-1
koti 23 Окт 2018 в 13:15

2 ответа

Лучший ответ

Просто пример возможного решения (или, может быть, подскажет):

Sub test()
    Dim dic As Object: Set dic = CreateObject("Scripting.Dictionary")
    dic.comparemode = vbTextCompare
    Dim src As Worksheet: Set src = Sheet1
    Dim dest As Worksheet: Set dest = Sheet2
    Dim id As Range, Topic As Range, Status As Range
    Dim searchStr1$, searchStr2$

    With src
        Set id = .Rows(1).Find("ID") 'assume that header in row 1
        Set Topic = .Rows(1).Find("Topic") 'assume that header in row 1
        Set Status = .Rows(1).Find("Status") 'assume that header in row 1
        Set rng = .Range(id.Offset(1), .Cells(.Rows.Count, id.Column).End(xlUp))

        For Each cl In rng
            dic.Add cl.Value2 & .Cells(cl.Row, Topic.Column).Value2, _
            .Cells(cl.Row, Status.Column).Value2
        Next cl
    End With
    With dest
        Set rng = .Range(.[A2], .Cells(.Rows.Count, id.Column).End(xlUp))
        For Each cl In rng
            searchStr1 = cl.Value2 & .[B1].Value2
            searchStr2 = cl.Value2 & .[C1].Value2
            If dic.exists(searchStr1) Then cl.Offset(, 1).Value2 = dic(searchStr1)
            If dic.exists(searchStr2) Then cl.Offset(, 2).Value2 = dic(searchStr2)
        Next cl
    End With
End Sub

< Сильный > тест введите описание изображения здесь

1
Vasily 23 Окт 2018 в 11:07

Попробуйте эту формулу в Sheet2 после внесения изменений в правильные листы и диапазоны, затем заполните вправо и вниз.

=INDEX($C:$C, AGGREGATE(15, 7, ROW(A:A)/(($A$1:$A$5=$E2)*($B$1:$B$5=F$1)), 1))

1
user4039065user4039065 23 Окт 2018 в 10:26
52946559