В качестве альтернативы, вот формула решения:
=IF(ROW(D1)>INDEX($A:$B,COLUMN(D1)-COLUMN($C1),2)-INDEX($A:$B,COLUMN(D1)-COLUMN($C1),1)+1,"",INDEX($A:$B,COLUMN(D1)-COLUMN($C1),1)+ROW(D1)-1)
Хотя я понимаю, что формула решения не может быть осуществимо на основе этого заявления:
Столбцы A и B имеют тысячи значений.
EDIT: Чистый массив VBA решение:
Sub tgr()
Dim ws As Worksheet
Dim rData As Range
Dim aData As Variant
Dim aResults() As Variant
Dim lMaxDiff As Long
Dim i As Long, j As Long
Dim rIndex As Long, cIndex As Long
Set ws = ActiveWorkbook.ActiveSheet
Set rData = ws.Range("A1", ws.Cells(Rows.Count, "B").End(xlUp))
lMaxDiff = Evaluate("MAX(" & rData.Columns(2).Address(external:=True) & "-" & rData.Columns(1).Address(external:=True) & ")") + 1
aData = rData.Value2
ReDim aResults(1 To lMaxDiff, 1 To rData.Rows.Count)
For i = LBound(aData, 1) To UBound(aData, 1)
If IsNumeric(aData(i, 1)) And IsNumeric(aData(i, 2)) Then
rIndex = 0
cIndex = cIndex + 1
For j = Int(aData(i, 1)) To Int(aData(i, 2))
rIndex = rIndex + 1
aResults(rIndex, cIndex) = j
Next j
End If
Next i
ws.Range("D1").Resize(UBound(aResults, 1), UBound(aResults, 2)).Value = aResults
End Sub
Вы ищете ответ VBA? Может быть решение формулы. Быстро: если вы скопируете столбец A, а затем вставьте (транспонируете) в D, вы получите список ... тогда в D2 вы можете сделать '= IF (AND (D1 <>" ", D1 <> $ B $ 1), D1 + 1, "") '... единственное, что я не знаю, как заставить это перетащить и правильно обновить, какую строку/столбец посмотреть. – BruceWayne
Для следующего цикла для значения i = range ("a1"). Value to range ("b1"). Для номера строки вам понадобится счетчик. –
Я провел несколько тестов на более чем 10 000 строк. Рейтинг в скорости от самого быстрого до самого медленного, 1. tigeravatar, 2.Mine (ScottCraner), 3.Jeeped, 4.Manu, 5, BruceWayne. Фактические результаты могут незначительно отличаться. –