Чтобы сделать это по формуле я предлагаю что-то вроде этого:
В строке 1 мы используем вспомогательную-клетку сейчас (чтобы ускорить его для более длинных списков)
В графах А D У меня есть некоторые переменные (от 3 до 5), а для моего списка я использую столбцы F для I.F1 просто имеет =COUNTA(A:A)
(скопировано до I1 ->=COUNTA(D:D)
)
F2: =INDEX(A:A,MOD(INT((ROW()-2)/PRODUCT(G$1:$I$1)),F$1)+1)
Может быть autofilled Н2
G2: =INDEX(B:B,MOD(INT((ROW()-2)/PRODUCT(H$1:$I$1)),G$1)+1)
H2: =INDEX(C:C,MOD(INT((ROW()-2)/PRODUCT(I$1:$I$1)),H$1)+1)
I2 получить небольшую другую формулу:
I2: =INDEX(D:D,MOD(ROW()-2,$I$1)+1)
Теперь выберите F2 к I2 и автоматически заполнить до тех пор, пока столбец F не покажет первое значение снова ... или не сделает =PRODUCT(F1:H1)+1
-> это ваша последняя строка;)
его можно просто увеличить, потому что, за исключением правой колонки, формулы автоматически заполняются. просто вставьте столбец перед столбцом A и F и введите A, что вам также необходимо. Столбец G может быть автоматически заполнен из столбца H. Не забудьте расширить список вниз по мере необходимости. если у вас все еще есть вопросы, просто спросите.
Делать это с помощью VBA является предложить что-то вроде этого:
Sub test()
Dim inputRng As Range
Set inputRng = ThisWorkbook.Sheets("Sheet1").Range("A:E") 'change this to fit your needs
Dim inputVal() As Variant
ReDim inputVal(1 To inputRng.Columns.Count)
Dim holder() As Variant
Dim i, j, k, xCol, xRow
j = 1: k = 1
'load in values
For Each xCol In inputRng.Columns
xRow = Cells(1, xCol.Column).End(xlDown).Row
ReDim holder(0 To xRow)
holder(0) = xRow
j = j * xRow
For i = 1 To xRow
holder(i) = xCol.Cells(i).Value
Next
inputVal(k) = holder
k = k + 1
Next
Dim outputVal() As Variant
ReDim outputVal(1 To j, 1 To inputRng.Columns.Count)
k = 1
For i = UBound(outputVal, 2) To 1 Step -1
For j = 0 To UBound(outputVal) - 1
outputVal(j + 1, i) = inputVal(i)((Int(j/k) Mod inputVal(i)(0)) + 1)
Next
k = k * inputVal(i)(0)
Next
Dim outputRng As Range
Set outputRng = ThisWorkbook.Sheets("Sheet1").Range("G1") 'set here the first cell to start output
outputRng.Resize(UBound(outputVal), UBound(outputVal, 2)).Value = outputVal
End Sub
Он предназначен для работы с различными размерами для каждого пятна и вам нужно изменить только 2 линии, чтобы полностью соответствовать вашим потребностям , :)
Предупреждение: Если в одном месте только 1 элемент, он не сработает! (Excel больше не может отвечать)
У вас есть несколько ответов, чтобы сделать то, что вы просите. Некоторые отзывы о методах были бы замечательными. Что сработало, чего нет. Если кто-то работал на вас, то отметьте его как правильно. Нажмите зеленую галочку по ответу, который сработал для вас. Это то, что вы можете сделать. Он закроет вопрос как ответ и вознаградит ту сторону, которая была бы в состоянии помочь вам. –