Скрипт (VBA) на распределение предметов
Формулировка задачи:
Лист 4. Сводная таблица на распределение предметов / зарядок по постройкам.
Скрипт на распределение предметов / зарядок по постройкам:
1. ID постройки.
2. Группа ценности # / ID. В данных столбцах указываются зарядки и предметы которые можно найти в указанной постройке с разделением по группам ценности. Заполнение указанных столбцов осуществляется при помощи написанного скрипта. Запуск скрипта осуществляется через кнопку на этом же листе.
Прикреплю весь документ, где задание, если не понятно, и соответственно, сам Excel.
Решение задачи: «Скрипт (VBA) на распределение предметов»
textual
Листинг программы
- Sub Raspredelenie()
- Dim i%, j%, k%, S$, A, Dic, Msg$
- Dim B, Z, C 'переменные для массивов значений с листов "buildings", "chargers" , "collections"
- B = Sheets("buildings").Range("B4:C15").Value
- Z = Sheets("chargers").Range("A11:N40").Value
- C = Sheets("collections").Range("A4:R33").Value
- Set Dic = CreateObject("Scripting.Dictionary") 'создаем объект словарь
- Dic.CompareMode = 1 'независимое от регистра сравнение
- For i = 1 To UBound(Z)
- For j = 7 To 8
- If Trim(Z(i, j)) <> "" Then
- S = Z(i, j) & "_" & format(Z(i, 4))
- If Dic.Exists(S) Then
- Dic(S) = Dic(S) & "|" & Z(i, 3)
- Else
- Dic(S) = Z(i, 3)
- End If
- End If
- Next j
- Next i
- For i = 1 To UBound(C)
- S = C(i, 13) & "_" & format(C(i, 5))
- If Dic.Exists(S) Then
- Dic(S) = Dic(S) & "|" & C(i, 4)
- Else
- Dic(S) = C(i, 4)
- End If
- Next i
- With Sheets("items")
- .Range("C4:G183").ClearContents
- For i = 1 To 12
- For j = 1 To 5
- S = B(i, 1) & "_" & format(j)
- If Dic.Exists(S) Then
- A = Split(Dic(S), "|")
- For k = 0 To UBound(A)
- .Cells(i * 15 - 11 + k, j + 2) = A(k)
- If k = 15 And UBound(A) > 14 Then
- Msg = Msg & "В блоке " & S & " не хватило ячеек для распределения " & A(15) & vbCrLf
- .Cells(i * 15 - 11 + k, j + 2) = Mid(Dic(S), InStr(1, Dic(S), A(k)))
- Exit For
- End If
- Next
- End If
- Next j
- Next i
- End With
- Set Dic = Nothing
- If Msg <> "" Then MsgBox Msg
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д