Как запомнить значения первой строки выбранного диапазона? - VBA

Узнай цену своей работы

Формулировка задачи:

Уважаемые! Доброго времени суток, Нужна ваша помощь... Есть диапазон ячеек в несколько десятков строк. Пример привожу во вложении. Первый столбец содержит номера, которые одинаковы для одного наряда (указывается номер этого наряда). В одном наряде работают несколько человек. Все объемы отражены только в первой строке диапазона. Нужно; Запомнить значения только первой строки, Получить весь список людей (он нужен для дальнейшей обработки в другой программе), по окончании переходим к следующему наряду, и повторяем цикл. Решение вижу примерно так: Загружаю в массив диапазон для одного наряда. Беру и запоминаю первую строку как константу. Загружаю в словарь всех людей. Беру значения первой строки и потом, по одному забираю из словаря людей. Отработав, словарь очищаю. Перехожу к следующему наряду. Вопрос? Как запомнить значения первой строки выбранного диапазона? Как выбрать в словарь список людей одного наряда?

Решение задачи: «Как запомнить значения первой строки выбранного диапазона?»

textual
Листинг программы
  1. Sub tt()
  2.     Dim a, b, i&, t$, d1 As Object, d2 As Object
  3.     Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1
  4.     Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1
  5.     a = [a1].CurrentRegion.Value
  6.     For i = 1 To UBound(a)
  7.         t = a(i, 1)   'критерий, тут бы trim() ещё может нужен...
  8.        If Len(Trim(a(i, 3))) Then    'если шапка наряда
  9.            ReDim b(1 To 10)
  10.             b(1) = a(i, 2)
  11.             b(2) = a(i, 3)
  12.             b(3) = a(i, 4)
  13.             b(4) = a(i, 5)
  14.             b(5) = a(i, 6)
  15.             b(6) = a(i, 7)
  16.             b(7) = a(i, 8)
  17.             b(8) = a(i, 10)
  18.             b(9) = a(i, 12)
  19.             b(10) = a(i, 13)
  20.             d1.Item(t) = b
  21.         End If
  22.         If Not d2.exists(t) Then d2.Add t, New Collection
  23.         d2.Item(t).Add a(i, 11)   'в коллекцию критерия добавляем человека
  24.    Next
  25.  
  26.     Dim s$, el
  27.     s = InputBox("Введите номер наряда (896 или 325 в данном случае)")    ' Вариант; После создания словарей вывести окно с запросом на выбор нужных S (Заказов) _
  28.                                                                           а потом цикл подстановки выбранных заказов.
  29.    b = d1.Item(s)
  30.     ' Нужно взять из шапки заказа S эти позиции, для подстановки, в этот же обрабатываемый заказ
  31.    Zakaz = s    '!
  32.    Дата_пров = b(1)    '!
  33.    Кол_Факт1 = b(3)    '?
  34.    Кол_Факт2 = b(4)    '?
  35.    Ном_нар = b(10)    '?
  36.    Текст_подтв = b(6)    '?  ' & ", " & "Cells(Z, 6).Value" (Сцепка двух значений "шапки")
  37.    Время = b(7)    '?
  38.  
  39.     For Each el In d2.Item(s)
  40.         Исполнитель = el
  41.         ' Действие 1
  42.        MsgBox "По наряду " & s & " работал " & Исполнитель, 64
  43.     Next
  44.     MsgBox "ЗАКАЗ ПОДТВЕРЖДЕН, СОХРАНИТЕ ФАЙЛ", 64
  45.  
  46. End Sub

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы