Как запомнить значения первой строки выбранного диапазона? - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д