Уважаемые профи форума. С Вашей помощью я смог немного освоить использование словаря, НО вылез следующий вопрос. Сейчас для формирования данных для listbox, находящегося на UserForm6, используется столбец 15 на листе "Приход". Данные в этот столбец попадают в результате работы макроса (также предложенного на этом уважаемом мною форуме

). Я попытался исключить этап работы этого макроса и сэкономить время

. На листе "Тест" по нажатию кнопки срабатывает макрос:
Код |
---|
Application.ScreenUpdating = False
Dim i As Long, j As Long, a As Variant, k As Variant, x As Variant
With CreateObject("Scripting.Dictionary")
.CompareMode = 1 'если в массиве только числа, то можно без этой строки
x = Sheets("Приход").Range("B2:N" & Sheets("Приход").Cells(Rows.Count, 8.End(xlUp).Row).Value 'данные в массив
For i = 1 To UBound(x)
If Month(CDate(x(i, 4))) & Year(CDate(x(i, 4))) = Month([A1] & "." & Year([B1])) & Year([B1]) Then
.Item(x(i, 1) & "|" & x(i, 3) & "|" & x(i, 6) & "|" & x(i, 5)) = .Item(x(i, 1) & "|" & x(i, 3) & "|" & x(i, 6) & "|" & x(i, 5)) + x(i, 13)
End If
Next i
ReDim a(1 To .Count, 1 To 5)
For Each k In .keys
j = j + 1
a(j, 1) = Format(Split(k, "|")(0), "П-0000")
a(j, 2) = Format(Split(k, "|")(1), "dd.mm.yyyy")
a(j, 3) = Split(k, "|")(2)
a(j, 4) = Split(k, "|")(3)
a(j, 5) = Format(Split(.Item(k), "-")(0), "0.00")
Next k
[A11].Resize(UBound(a, 1), UBound(a, 2)).Value = a 'выгрузка результата
End With
Application.ScreenUpdating = True |
который с помощью словаря правильно и быстро отбирает данные. Как эти полученные данные выгрузить на лист, мне было показано, когда я поднимал тему формирования массивов, и это у меня получается. А вот как поместить эти данные в Listbox я пока не знаю. Будьте добры, покажите как это сделать на примере моей формы (учитывая, что параметр
Month([A1] & "." & Year([B1])) & Year([B1]) Then для формы будет выглядеть как
Month(Me.Mes.Value & "." & Year(Date)) & Me.God Then. Заранее спасибо всем откликнувшимся.