Выгрузка значений словаря - VBA

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

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

Приветствую всех! Надеюсь на Вашу помощь с выгрузкой элементов словаря из листа "источник" в указанный диапазон на листе "Лист2". Писать построчно диапазон тоже не выходит, выгружает 1 строку значений Файл прилагается ниже.
Листинг программы
  1. Sub krivoy_code()
  2. Dim A, B
  3. Dim dic
  4. Dim i As Integer, j As Integer
  5. Set dic = CreateObject("Scripting.Dictionary")
  6. A = Worksheets("источник").[a1].CurrentRegion.Value
  7. For i = 2 To UBound(A)
  8. For j = 2 To UBound(A, 2)
  9. dic(A(i, 1) & A(1, j)) = A(i, j)
  10. Next j
  11. Next i
  12. With Worksheets(1)
  13. B = [a6].CurrentRegion.Value
  14. For i = 1 To UBound(B)
  15. For j = 1 To UBound(B, 2)
  16. If dic.Exists(B(i, 1) & B(j, 1)) Then Cells(i, 9) = dic(B(i, 1) & B(j, 1))
  17. Next j
  18. Next i
  19. 'выгружает на весь диапазон только первую строку значений
  20. .Range("I9:M28") = dic.Items
  21. 'выгружает на весь диапазон только Статья1Подразделение5
  22. '.Range("I9:M28") = dic.Items ()(i)
  23. End With
  24.  
  25. End Sub

Решение задачи: «Выгрузка значений словаря»

textual
Листинг программы
  1. Sub pramoy_code()
  2.     Dim A, B
  3.     Dim dic
  4.     Dim i As Integer, j As Integer
  5.     Set dic = CreateObject("Scripting.Dictionary")
  6.     A = Worksheets("источник").[a1].CurrentRegion.Value
  7.     For i = 2 To UBound(A)
  8.         For j = 2 To UBound(A, 2)
  9.             dic(A(i, 1) & A(1, j)) = A(i, j)
  10.         Next j
  11.     Next i
  12.     With Worksheets(1)
  13.         'B = .[a6].CurrentRegion.Value  ' пропущена первая .
  14.        ' Получается результирующий диапазон A4:M28 - из-за шапки
  15.        ' Для точной  разметки В в A6:M29 :
  16.        B = .UsedRange.Offset(5, 0).Resize(.UsedRange.Rows.Count - 5, .UsedRange.Columns.Count).Value
  17.         For i = 4 To UBound(B)
  18.             'For j = 1 To UBound(B, 2)
  19.            ' Если выводим в диапазон 2016 года I9:M28 без повторения в 2015
  20.            For j = 9 To UBound(B, 2)
  21. 'Неправильно: If dic.Exists(B(i, 1) & B(j, 1)) Then Cells(i, 9) = dic(B(i, 1) & B(j, 1)) 'Пропущена первая .
  22.              If dic.Exists(B(i, 1) & B(1, j)) Then .Cells(i + 5, j) = dic(B(i, 1) & B(1, j))
  23.             Next j
  24.         Next i
  25.     End With
  26. End Sub

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


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

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

13   голосов , оценка 4.154 из 5

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

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

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