Структура данных vba для выполнения различного анализа

Есть ли какая-то структура данных, которую я мог бы использовать для следующего анализа? Визуально так выглядят мои данные в Excel

Condition ID       Item1        Item2        Item3        ...
Ex A      1        A            B            C            ...
Ex B      2       
Ex C      3        C     
Ex A      5        D            A    
Ex C      5      

Каждая строка соответствует идентификатору, и может быть несколько одинаковых идентификаторов. Условие - это строка (также может быть несколько одинаковых условий, показанных выше), связанная с любым # элементов (может быть ни одного, а также может повторяться).

Функции, которые я хочу выполнить, - это такие вещи, как определение общего количества уникальных элементов среди всех условий, просмотр того, какие элементы появляются чаще / реже всего, какая комбинация из условия и отдельного элемента является наиболее частой, а также разбивка идентификаторов по каждому условию.

Лучше всего было бы просто перебрать каждый из вопросов, на которые я хочу ответить? Например, для первой части поиска всех уникальных целей, должен ли я просто перебирать каждую ячейку строки до значения Value в ячейке = "", добавляя каждый элемент в коллекцию, если он еще не существует в коллекции? Мне кажется, что это и другой анализ, который я хочу выполнить, займет слишком много времени с точки зрения кодирования и времени выполнения, может быть?

Возможно, вы могли бы забыть о VBA и использовать сводная таблица. В VBA словарь казался бы естественным.

John Coleman 10.08.2018 17:09
1
1
30
1

Ответы 1

Думаю, я понял, как сделать одну часть (подсчитывая количество экземпляров каждого элемента), используя словарь

For row = 1 To lastRow
    For col = 1 To lastCol
        If arrayOfValues(row, col) <> "" Then
            If rawString.Exists(arrayOfValues(row, col)) Then
                rawString.Item(arrayOfValues(row, col)) = rawString.Item(arrayOfValues(row, col)) + 1
            Else
                rawString.Add arrayOfValues(row, col), 1
            End If
            Debug.Print arrayOfValues(row, col), rawString(arrayOfValues(row, col))
        End If
    Next col
Next row

Другие вопросы по теме