Как создать в (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