Скрипт (VBA) на распределение предметов

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

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

Лист 4. Сводная таблица на распределение предметов / зарядок по постройкам. Скрипт на распределение предметов / зарядок по постройкам: 1. ID постройки. 2. Группа ценности # / ID. В данных столбцах указываются зарядки и предметы которые можно найти в указанной постройке с разделением по группам ценности. Заполнение указанных столбцов осуществляется при помощи написанного скрипта. Запуск скрипта осуществляется через кнопку на этом же листе. Прикреплю весь документ, где задание, если не понятно, и соответственно, сам Excel.

Решение задачи: «Скрипт (VBA) на распределение предметов»

textual
Листинг программы
  1. Sub Raspredelenie()
  2.     Dim i%, j%, k%, S$, A, Dic, Msg$
  3.     Dim B, Z, C 'переменные для массивов значений с листов "buildings", "chargers" , "collections"
  4.    B = Sheets("buildings").Range("B4:C15").Value
  5.     Z = Sheets("chargers").Range("A11:N40").Value
  6.     C = Sheets("collections").Range("A4:R33").Value
  7.     Set Dic = CreateObject("Scripting.Dictionary") 'создаем объект словарь
  8.    Dic.CompareMode = 1 'независимое от регистра сравнение
  9.    For i = 1 To UBound(Z)
  10.         For j = 7 To 8
  11.             If Trim(Z(i, j)) <> "" Then
  12.                 S = Z(i, j) & "_" & format(Z(i, 4))
  13.                 If Dic.Exists(S) Then
  14.                    Dic(S) = Dic(S) & "|" & Z(i, 3)
  15.                 Else
  16.                    Dic(S) = Z(i, 3)
  17.                 End If
  18.             End If
  19.         Next j
  20.     Next i
  21.     For i = 1 To UBound(C)
  22.         S = C(i, 13) & "_" & format(C(i, 5))
  23.         If Dic.Exists(S) Then
  24.            Dic(S) = Dic(S) & "|" & C(i, 4)
  25.         Else
  26.            Dic(S) = C(i, 4)
  27.         End If
  28.     Next i
  29.     With Sheets("items")
  30.         .Range("C4:G183").ClearContents
  31.         For i = 1 To 12
  32.              For j = 1 To 5
  33.                  S = B(i, 1) & "_" & format(j)
  34.                  If Dic.Exists(S) Then
  35.                      A = Split(Dic(S), "|")
  36.                      For k = 0 To UBound(A)
  37.                         .Cells(i * 15 - 11 + k, j + 2) = A(k)
  38.                          If k = 15 And UBound(A) > 14 Then
  39.                             Msg = Msg & "В блоке " & S & " не хватило ячеек для распределения " & A(15) & vbCrLf
  40.                             .Cells(i * 15 - 11 + k, j + 2) = Mid(Dic(S), InStr(1, Dic(S), A(k)))
  41.                             Exit For
  42.                          End If
  43.                      Next
  44.                  End If
  45.              Next j
  46.         Next i
  47.     End With
  48.     Set Dic = Nothing
  49.     If Msg <> "" Then MsgBox Msg
  50. End Sub

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


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

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

10   голосов , оценка 4.2 из 5

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

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

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