Создать декартово произведение значений атрибутов в одной таблице Excel - PullRequest
0 голосов
/ 24 апреля 2019

Как создать в (Excel) VBA декартово произведение атрибутов значений нескольких атрибутов, хранящихся в одной и той же таблице?

Код должен иметь дело с динамическим числом атрибутов (первый столбец) и значениями атрибутов на атрибут (второй столбец).

Пример ввода:

  • А | A1
  • А | A2
  • A | A3
  • B | B1
  • B | B2
  • С | С1

Результат:

  • A1, B1, C1
  • А1, В2, С1
  • A2, B1, C1
  • А2, В2, С1
  • A3, B1, C1
  • A3, B2, C1

Решение в Power Query for Excel также подходит для меня.

Для фиксированного количества атрибутов я мог бы хранить значения атрибутов в массиве для каждого атрибута, а затем использовать вложенные для циклов. Но я ищу решение с динамическим количеством атрибутов.

Это код, который я создал для фиксированного количества атрибутов. Примечание: заполнение массивов из таблицы Excel не является проблемой, поэтому я опускал это, пока не нашел решение для продукта Cartesion.

Sub GenerateItems()

Dim strAttributeValues1 As String
Dim strAttributeValues2 As String
Dim strAttributeValues3 As String

Dim arrAttributeValues1() As String
Dim arrAttributeValues2() As String
Dim arrAttributeValues3() As String

Dim strItemName As String

strAttributeValues1 = "A1,A2,A3"
arrAttributeValues1 = Split(strAttributeValues1, ",")

strAttributeValues2 = "B1,B2"
arrAttributeValues2 = Split(strAttributeValues2, ",")

strAttributeValues3 = "C1"
arrAttributeValues3 = Split(strAttributeValues3, ",")

Dim a, b, c As Integer

For a = 0 To UBound(arrAttributeValues1)
    For b = 0 To UBound(arrAttributeValues2)
        For c = 0 To UBound(arrAttributeValues3)
            strItemName = arrAttributeValues1(a) & " " & arrAttributeValues2(b) & " " & arrAttributeValues3(c)
            Debug.Print strItemName
        Next c
    Next b
Next a

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...