Я думаю, что у меня есть лучший подход. Я говорю: подумайте, потому что это было бы лучше, если у вас много данных или они распределены по нескольким рабочим листам (или даже рабочим книгам). Это также хороший подход, потому что приведенный ниже макрос может использоваться для множества других целей при попытке найти совпадающие данные (или, в зависимости от обстоятельств, несоответствующие данные).
Таким образом, этот макрос позволяет вам находить совпадающие данные между двумя диапазонами, либо в пределах одного листа, либо между листами. Я вставил код макроса внизу этого ответа. На этом этапе я предполагаю, что вы будете знать, что с этим делать. Я также предполагаю, что вы используете версию Excel, которая работает в Windows.
Сводка шагов макроса
- Когда вы запустите макрос, он попросит вас выбрать диапазон ячеек, содержащих данные, которые вы ищете. Например, если на первом листе у вас есть все адреса электронной почты в столбце C от C2 до C101, вы должны выбрать этот диапазон.
- Затем макрос попросит вас выбрать диапазон, который вы хотите исследовать. Просто выберите диапазон, содержащий адреса электронной почты для вашего второго события.
- Затем макрос попросит вас указать "комментарий" для макроса, который будет использоваться, чтобы указать, что он нашел соответствующий элемент. Здесь можно указать что угодно, например "Найдено", "Да" и т.д.
- Наконец макрос попросит вас ввести букву столбца. Это столбец, в который макрос поместит ваш "комментарий" из предыдущего шага.
Например
Предположим, у вас есть пять одинаковых листов в вашей книге, каждый лист для каждого списка посещаемости. Давайте предположим, что столбцы от A до F заполнены на каждом листе, и что это столбец C, который содержит адреса электронной почты. Предположим также, что у вас есть 100 участников, поэтому адреса электронной почты отображаются на каждом листе от C2 до C101.
Запустите макрос.
На шаге 1 выберите диапазон C2:C101 в первом рабочем листе. На шаге 2 выберите диапазон C2:C101 во втором рабочем листе. На шаге 3 введите "Да" в качестве комментария. А для шага 4 введите букву G (просто потому, что это мой первый пустой столбец в моем примере, но в вашем случае это, скорее всего, будет другая буква столбца).
При запуске макроса в столбце G вашего первого листа будет текст "Да" в любой строке, где адрес электронной почты также был найден во втором списке участников.
Теперь, в вашем случае, вам нужно будет запустить макрос снова. Выполните вышеуказанные шаги, за исключением того, что на этот раз на шаге 2 выберите диапазон C2:C101 на третьем листе, а на шаге 4 выберите следующий столбец после того, который вы выбрали ранее. В моем сценарии это был бы столбец H.
При запуске макроса столбец H вашего первого рабочего листа будет содержать текст "Да" в любой строке, где адрес электронной почты также был найден в третьем списке участников.
К настоящему времени вы начнете видеть, что происходит. К тому времени, когда вы повторите эти шаги, чтобы охватить все ваши списки посещаемости, у вас будет четыре столбца с текстом "Да", где это уместно. Теперь вы можете сортировать / фильтровать ваши данные так, чтобы отображались только строки, содержащие "Да" во всех этих столбцах. Это те, кто посещал все мероприятия.
Наконец, перед использованием любого макроса сделайте резервную копию ваших файлов Excel, чтобы у вас была чистая копия!
Sub FindMatchingData()
'This macro and Excel Add-In was designed by Monomeeth to allow users an easy
'way to find matching data between two ranges, either within the same worksheet or
'across worksheets within the same workbook.
Dim MySearchRange As Range
Dim c As Range
Dim findC As Variant
Set MyRange = Application.InputBox( _
Prompt:="Select the range of cells containing the data you are looking for:", Type:=8)
Set MySearchRange = Application.InputBox( _
Prompt:="Select the range you wish to investigate:", Type:=8)
Response = InputBox(Prompt:="Specify the comment you wish to appear to indicate the data was found:")
MyOutputColumn = Application.InputBox( _
Prompt:="Enter the alphabetical column letter(s) to specify the column you want the message to appear in.")
Set Sht = MyRange.Parent
For Each c In MyRange
If Not c Is Nothing Then
Set findC = MySearchRange.Find(c.Value, LookIn:=xlValues)
If Not findC Is Nothing Then
Sht.Range(MyOutputColumn & c.Row).Cells.Value = Response
End If
End If
Next
Excel.Application.SendKeys Keys:="^{HOME}", Wait:=True
DoEvents
MsgBox "Investigation completed."
End Sub