Безразмерный массив в VBA

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

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

Добрый день, уважаемые коллеги Подскажите, пожалуйста, кто сталкивался с безразмерными массивами в VBA? Для примера, приложил файл-набросок. Допустим у нас две колонки. Количество элементов не известно и постоянно меняется. По условию, что если во второй колонке "единичка" то в первой колонке "нужным нам элемент", если 0 то "не нужный". "Нужные элементы" необходимо сложить и записать их таблицей на втором листе. Посчитать сколько их. Если возможно упорядочить по возрастанию. Элементы всегда 3-х значные целочисленные. Например:
На втором листе должна появится таблица:
Проблема в том, что количество элементов заранее неизвестно и границы массива соответственно, хз как применить ubount / lbount, а для того, что бы использовать динамический массив в VBA его сначала нужно переопределить. По 1 элементу пихать и переопределять? Я если элемент повторяется preserve и во второй уровень массива? В общем, что то я мозг сломал как в VBA это сделать.... Заранее благодарю за любую помощь!

Решение задачи: «Безразмерный массив в VBA»

textual
Листинг программы
Option Explicit
 
Sub tt()
    Dim a, i&, t$
 
    With CreateObject("scripting.dictionary"): .comparemode = 1
        a = Sheets("Данные").[h1].CurrentRegion.Value
        For i = 2 To UBound(a)
            t = a(i, 4) & "|" & a(i, 1)    '1. Сколько раз мастера попадали в статистику
            .Item(t) = .Item(t) + 1
            t = a(i, 4) & "|" & a(i, 3)    '2. Сколько раз заканчивали работу, именно мастера (но и ученики, но можно отфильтровать сразу или в конце)
            .Item(t) = .Item(t) + 1
        Next
        Workbooks.Add(1).Sheets(1).[a1].Resize(.Count, 2) = Application.Transpose(Array(.keys, .items))
    End With
 
End Sub

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


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

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

8   голосов , оценка 4.375 из 5