Разместите вашу первую таблицу следующим образом, т.е. добавьте заголовки столбцов. (это мой существующий код, для которого требуется заголовок столбца. Слишком ленив для его изменения, поэтому, пожалуйста, следуйте)
Измените значение paraVal
ниже Sub
будет диапазон вашей первой таблицы (включая заголовки) и запустите ее. Комбинация будет сгенерирована ниже вашей первой таблицы (поэтому убедитесь, что места достаточно для результата). Объедините полученные столбцы по-своему (например, TEXTJOIN
, CONCAT
...)
Sub CombinationTable()
Dim paraVal As Range
Dim paraInfo() As Long
Dim rowTtl As Long
Dim colIdx As Long
Dim repIdx As Long
Dim colIdxG As Long
Dim rowIdxG As Long
Dim rowStartG As Long
Dim rowEndG As Long
Dim colCell1 As Range
Dim colCellN As Range
Dim repeat As Range
Set paraVal = Range("F4", "G7")
On Error GoTo 0
With paraVal
rowTtl = 1
ReDim paraInfo(1 To .Columns.Count)
For colIdx = 1 To .Columns.Count
If IsEmpty(.Cells(.Rows.Count - 1, colIdx)) Then ' .rows.count-1 = 1st value
paraInfo(colIdx) = 0
Else
Set colCellN = .Cells(.Rows.Count, colIdx)
Set colCell1 = colCellN.End(xlUp)
paraInfo(colIdx) = colCellN.Row - colCell1.Row ' no +1 bcoz last row is header, not value
rowTtl = rowTtl * paraInfo(colIdx)
End If
Next colIdx
rowStartG = .Row + .Rows.Count
rowEndG = rowStartG + rowTtl - 1
For colIdx = 1 To .Columns.Count
If paraInfo(colIdx) > 0 Then
rowTtl = rowTtl / paraInfo(colIdx)
rowIdxG = rowStartG
colIdxG = .Columns(colIdx).Column
Set colCellN = .Columns(colIdx).Cells(.Columns(colIdx).Rows.Count).Offset(-paraInfo(colIdx)).Resize(paraInfo(colIdx))
For Each colCell1 In colCellN.Cells
ActiveSheet.Range(ActiveSheet.Cells(rowIdxG, colIdxG), ActiveSheet.Cells(rowIdxG + rowTtl - 1, colIdxG)).Value = colCell1.Value
rowIdxG = rowIdxG + rowTtl
Next colCell1
Set repeat = ActiveSheet.Range(ActiveSheet.Cells(rowStartG, colIdxG), ActiveSheet.Cells(rowIdxG - 1, colIdxG))
If colIdx > 1 Then
repeat.Copy Destination:=ActiveSheet.Range(ActiveSheet.Cells(rowIdxG, colIdxG), ActiveSheet.Cells(rowEndG, colIdxG))
End If
End If
Next colIdx
End With
End Sub