Как запомнить значения первой строки выбранного диапазона? - VBA
Формулировка задачи:
Уважаемые! Доброго времени суток, Нужна ваша помощь... Есть диапазон ячеек в несколько десятков строк. Пример привожу во вложении. Первый столбец содержит номера, которые одинаковы для одного наряда (указывается номер этого наряда). В одном наряде работают несколько человек. Все объемы отражены только в первой строке диапазона. Нужно;
Запомнить значения только первой строки, Получить весь список людей (он нужен для дальнейшей обработки в другой программе), по окончании переходим к следующему наряду, и повторяем цикл.
Решение вижу примерно так: Загружаю в массив диапазон для одного наряда. Беру и запоминаю первую строку как константу. Загружаю в словарь всех людей. Беру значения первой строки и потом, по одному забираю из словаря людей. Отработав, словарь очищаю. Перехожу к следующему наряду. Вопрос? Как запомнить значения первой строки выбранного диапазона? Как выбрать в словарь список людей одного наряда?
Решение задачи: «Как запомнить значения первой строки выбранного диапазона?»
textual
Листинг программы
Sub tt() Dim a, b, i&, t$, d1 As Object, d2 As Object Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1 Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1 a = [a1].CurrentRegion.Value For i = 1 To UBound(a) t = a(i, 1) 'критерий, тут бы trim() ещё может нужен... If Len(Trim(a(i, 3))) Then 'если шапка наряда ReDim b(1 To 10) b(1) = a(i, 2) b(2) = a(i, 3) b(3) = a(i, 4) b(4) = a(i, 5) b(5) = a(i, 6) b(6) = a(i, 7) b(7) = a(i, 8) b(8) = a(i, 10) b(9) = a(i, 12) b(10) = a(i, 13) d1.Item(t) = b End If If Not d2.exists(t) Then d2.Add t, New Collection d2.Item(t).Add a(i, 11) 'в коллекцию критерия добавляем человека Next Dim s$, el s = InputBox("Введите номер наряда (896 или 325 в данном случае)") ' Вариант; После создания словарей вывести окно с запросом на выбор нужных S (Заказов) _ а потом цикл подстановки выбранных заказов. b = d1.Item(s) ' Нужно взять из шапки заказа S эти позиции, для подстановки, в этот же обрабатываемый заказ Zakaz = s '! Дата_пров = b(1) '! Кол_Факт1 = b(3) '? Кол_Факт2 = b(4) '? Ном_нар = b(10) '? Текст_подтв = b(6) '? ' & ", " & "Cells(Z, 6).Value" (Сцепка двух значений "шапки") Время = b(7) '? For Each el In d2.Item(s) Исполнитель = el ' Действие 1 MsgBox "По наряду " & s & " работал " & Исполнитель, 64 Next MsgBox "ЗАКАЗ ПОДТВЕРЖДЕН, СОХРАНИТЕ ФАЙЛ", 64 End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д