Имеется массив данных, где в первых 2 столбцах указаны номер автомобиля и номер смены, последующие столбцы (31) содержат Ф.И.О. водителей для каждого дня месяца.
Задача - в реестре, состоящем из 4 столбцов "номер машины", "дата", "смена", "Ф.И.О." заполнить столбец Ф.И.О. на основании данных массива.
Если бы водители имели просто числовой номер вместо фамилии, решение было-бы простым "СУММЕСЛИ" с фигурными скобочками.
Но необходимо оперировать именно фамилиями.
Прикрепил файл с примером.
Буду признателен за подсказку.
Как вариант макросом, хотя вероятно можно сделать и формулами. Но если данных много, лучше макросом.
Option Explicit
Sub tt()
Dim a(), b(), i As Long, ii As Long, iii As Long
a = Sheets(1).[b2:h8].Value
b = Sheets(2).[b3:e20].Value
For i = 1 To UBound(a)
For ii = 1 To UBound(b)
If a(i, 1) = b(ii, 1) Then
If a(i, 2) = b(ii, 2) Then
For iii = 3 To 7
If b(ii, 3) = a(1, iii) Then b(ii, 4) = a(i, iii): Exit For
Next
Exit For
End If
End If
Next ii, i
Sheets(2).[b3:e20].Value = b
End Sub
Диапазоны можно сделать динамическими, и можно результат собирать в третий массив, будет быстрее выгрузка, но чуть непонятнее код :)
E3:
=ИНДЕКС(Табель!$D$3:$H$8;ПОИСКПОЗ(B3&C3;Табель!$B$3:$B$8&Табель!$C$3:$C$8;0);ПОИСКПОЗ(D3;Табель!$D$2:$H$2;0))
формула массива
Пара вариантов во вложении:
упс, один вариант (
формулу массива) уже дали :)
Спасибо!!!!
Это круто!!
Для простоты избрал второе.
Dmitr68,
Спасибо за интересное решение для определения строки:
ЦитироватьПОИСКПОЗ(2;МУМНОЖ(СЧЁТЕСЛИ(B3:C3;Табель!B$3:C$8);{1:1});0)