Комбинации участников на собраниях (Microsoft Excel)
У Боба есть рабочий лист, в котором имена участников указаны внизу слева, а месяцы года вверху. В каждой ячейке сетки он вводит даты, когда происходят собрания, на которых присутствовал участник. Боб ищет способ сразу определить, кто с кем не встречался.
Есть несколько способов решения этой проблемы. Если дизайн вашего стола гибкий, вы можете «упростить» ситуацию, изменив способ его расположения. Вместо того, чтобы помещать месяцы в столбцы, вы можете просто указать в каждом столбце дату встречи.
Затем каждая ячейка может содержать какой-то индикатор (число или символ), который указывает, что человек присутствовал на встрече в этот конкретный день. Было бы относительно легко выяснить, кто с кем не встречался:
-
Выберите ключевого члена, которого вы хотите проверить, и переместите его / ее в верхнюю часть таблицы данных.
-
Сортируйте таблицу данных по горизонтали в строке ключевого члена, чтобы все собрания, на которых присутствовал ключевой член, находились в крайних левых столбцах.
-
Рассортируйте всех, кроме ключевого, по вертикали в первые три даты встречи. Все, кто встречался с ключевым участником на этих трех встречах, теперь находятся в верхней части таблицы данных, чуть ниже ключевого участника.
-
Переместитесь вниз по таблице данных и выберите всех, кто еще не встречался с ключевым участником, и отсортируйте следующие три даты встречи.
-
Повторяйте шаги 3 и 4, пока все даты встреч не будут отсортированы.
-
Все, кто остался внизу таблицы данных (те, кто не был выбран на шагах 3 и 4), никогда не встречали ключевого члена.
Если вы не можете изменить формат своей таблицы, тогда требуется макрорешение. Есть много подходов, которые можно использовать в макросе, но, пожалуй, наиболее прямым является следующий:
Sub PeopleNotMet() Dim rTable As Range Dim rOutput As Range Dim iCols As Integer Dim iCol As Integer Dim iRows As Integer Dim iRow As Integer Dim iCompRow As Integer Dim sNotMet As String Dim sMet As String Set rTable = Worksheets("Sheet1").Range("A1").CurrentRegion Set rOutput = Worksheets("Sheet2").Range("a1") sNotMet = "X" sMet = "" Application.ScreenUpdating = False With rTable iRows = .Rows.Count iCols = .Columns.Count .Columns(1).Copy With rOutput .PasteSpecial .PasteSpecial Transpose:=True Application.CutCopyMode = False Range(.Offset(1, 1), .Offset(iRows - 1, _ iRows - 1)).Value = sNotMet Range(.Offset(1, 1), .Offset(iRows - 1, _ iRows - 1)).HorizontalAlignment = xlCenter End With End With With rTable.Cells(1) For iRow = 1 To iRows - 1 For iCol = 1 To iCols - 1 For iCompRow = 1 To iRows - 1 If Not (IsEmpty(.Offset(iRow, iCol))) Then If Not (IsEmpty(.Offset(iCompRow, iCol))) Then If .Offset(iRow, iCol).Value = _ .Offset(iCompRow, iCol).Value Then _ rOutput.Offset(iRow, iCompRow).Value = sMet End If End If Next Next Next End With Set rTable = Nothing Set rOutput = Nothing Application.ScreenUpdating = True End Sub
Этот макрос предполагает несколько вещей. Во-первых, предполагается, что исходная таблица данных Боба находится на Sheet1, начиная с ячейки A1. Во-вторых, предполагается, что таблица «кто с кем не встречался» должна находиться на Листе 2, начиная с ячейки A1. Если эти предположения верны, то при запуске макроса таблица, созданная на Sheet2, показывает имена внизу слева и имена вверху. Пересекающиеся ячейки не будут содержать ничего (это означает, что люди встретились) или заглавную букву X (что означает, что они не встретились).
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (248) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Combinations_for_Members_in_Meetings [Комбинации для участников в собраниях]
.