Не уверен, что я полностью понимаю ваш вопрос, но я думаю, вы хотите изменить это:
100 102
103 103
104 105
106 110
в это?
100 102 100, 101, 102
103 103 103
104 105 104, 105
106 110 106, 107, 108, 109, 110
Если это так, следующий код позволит добиться этого:
Private Sub getListsOfNumbers()
Dim inputRange As String
Dim x As Long
Dim y As Long
'Get input range of data
inputRange = InputBox("Enter input range", "Start", "A1:A4")
'Clear output range (two column offset)
Range(inputRange).Offset(0, 2).ClearContents
With Range(inputRange)
'Loop through input range
For x = 1 To .Cells.Count
'Loop through difference between second column and first column
For y = 0 To (.Cells(x, 2) - .Cells(x, 1))
'Add value to output column
.Cells(x, 3) = .Cells(x, 3) & (.Cells(x, 1) + y) & ", "
Next y
'Tidy up output by removing trailling comma
.Cells(x, 3) = CStr(Left(.Cells(x, 3), Len(.Cells(x, 3)) - 2))
Next x
End With
End Sub
Если я неправильно прочитал ваш запрос, дайте мне знать.
Изменить: просто попробовал это по-настоящему, и с большими наборами данных это будет так медленно, как можно было бы предсказать. Если ваши данные содержат 100/1000 строк и / или разница между числами в столбцах A и B значительно больше, чем в примере, то вы, вероятно, захотите минимизировать задержку, отключив вычисления и screenUpdating в начало процедуры и восстановление после завершения.
В справке Excel есть синтаксис и примеры, которые помогут вам, если вам нужно это реализовать.
person
Lunatik
schedule
12.03.2009