Как запомнить значения первой строки выбранного диапазона? - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы