Excel - Найти ячейку, содержащую n-е вхождение данных - PullRequest
0 голосов
/ 24 января 2020

У меня есть набор данных в Excel, который выглядит примерно так:

24/01/2020      25/01/2020      26/01/2020      27/01/2020
Item A          Item A          Item B          Item C
Item B          Item C          Item C          Item D
Item C                          Item D

Я могу запустить формулу, чтобы определить, сколько раз определенный элемент встречается в dataRange: =COUNTIF(dataRange,"Item C")

Теперь я хочу получить дату, связанную с каждым n-м вхождением. Все, что я нашел в Интернете, касается только поиска n-го вхождения в одном столбце, тогда как мне нужна формула, которая бы указала, что ячейка для каждого вхождения встречается во всем диапазоне. Например, первое вхождение 'Item C' находится в ячейке A4, а второе - B3, третье - C3 и четвертое - в ячейке D2.

Спасибо всем!

Ответы [ 2 ]

1 голос
/ 24 января 2020

Спасибо @JvdV за помощь в этом. Используя Microsoft Docs, я смог найти комбинацию Range.Find и FindNext, что привело к следующему:

Sub cellAddresses()

    With Range("A1:D6")

        Set c = .Find("Item A", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                MsgBox c.Address
                Set c = .FindNext(c)
                Loop While c.Address <> firstAddress
        End If
    End With

End Sub

Это возвращает адреса ячеек для каждого вхождения и гарантирует, что после того, как все вхождения были зацикливается, дальнейшая информация не возвращается.

Еще раз спасибо!

0 голосов
/ 24 января 2020

Вы также можете попробовать Worksheet Change Event:

Импортировать код элемента в ячейке G1

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Me.Range("G1")) Is Nothing Then

        Dim i As Long, j As Long, Counter As Long, LastRow As Long
        Dim ItemCode As String

        Counter = 1

        With Me

            ItemCode = Target.Value

            For i = 1 To 4

                For j = 2 To .Cells(.Rows.Count, i).End(xlUp).Row

                    If .Cells(j, i).Value = ItemCode Then

                        LastRow = .Cells(.Rows.Count, "I").End(xlUp).Row + 1

                        Application.EnableEvents = False

                            .Range("I" & LastRow).Value = .Cells(1, i).Value
                            .Range("J" & LastRow).Value = Counter
                            .Range("K" & LastRow).Value = .Cells(j, i).Address

                        Application.EnableEvents = True

                        Counter = Counter + 1

                    End If


                Next j

            Next i

        End With

    End If

End Sub

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...