Скрипт (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

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


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

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

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