Option Explicit
Sub TEST()
Dim Brr, Crr, V&, i&, R, N&, S%
Brr = Range([序號新增!Q3], [序號新增!M65536].End(xlUp))
ReDim Crr(1 To 60000, 1 To 11)
For i = 1 To UBound(Brr)
S = IIf(Brr(i, 2) <= Brr(i, 3), 1, -1)
For R = Val(Brr(i, 2)) To Val(Brr(i, 3)) Step S
V = V + 1
N = N + 1
Crr(V, 1) = N
Crr(V, 3) = Brr(i, 1)
Crr(V, 4) = R
Crr(V, 11) = Brr(i, 5)
Next
N = 0
Next
If V = 0 Then Exit Sub
Sheets("序號新增").UsedRange.Offset(5, 0).Delete
With Sheets("序號新增").[A6].Resize(V, 11)
.Value = Crr
With .Columns(6)
.Value = "=IF(E6="""","""",RIGHT(E6,5)-RIGHT(D6,5)+1)"
End With
Application.Goto .Item(6)
End With
Erase Brr, Crr
End Sub作者: abc9gad2016 時間: 2023-6-21 17:20
Option Explicit
Sub TEST()
Dim Brr, Crr, V&, i&, R, N&, S%
'↑宣告變數(&是長整數,%是短整數,沒有帶符號的是通用型變數)
Brr = Range([序號新增!Q3], [序號新增!M65536].End(xlUp))
'↑令Brr變數是 二維陣列,以M~Q欄儲存格值帶入陣列中
ReDim Crr(1 To 60000, 1 To 11)
'↑令Crr變數是 二維空陣列,縱向範圍1~6萬索引號,橫向範圍1~11索引號
For i = 1 To UBound(Brr)
'↑設順迴圈,i從1到Brr陣列縱向最大索引列號
S = IIf(Brr(i, 2) <= Brr(i, 3), 1, -1)
'↑令S變數是 1或 -1
For R = Val(Brr(i, 2)) To Val(Brr(i, 3)) Step S
'↑設順迴圈,R從Brr陣列值(序號-前到 序號-後),迴圈級距是 S變數
V = V + 1
'↑令V變數累加1 (這是要記錄累計的陣列索引列號)
N = N + 1
'↑令N變數累加1 (這是要累計項次欄的項次)
Crr(V, 1) = N
'↑令Crr陣列(累計的陣列索引列號,第1欄)陣列值是 N變數
Crr(V, 3) = Brr(i, 1)
'↑令Crr陣列(累計的陣列索引列號,第3欄)陣列值是 ,
'是i迴圈第1欄Brr陣列值(機種)
Crr(V, 4) = R
'↑令Crr陣列(累計的陣列索引列號,第4欄)陣列值是 R迴圈數
Crr(V, 11) = Brr(i, 5)
'↑令Crr陣列(累計的陣列索引列號,第11欄)陣列值是 (版本)
Next
N = 0
'↑令N變數歸零 (項次歸零)
Next
If V = 0 Then Exit Sub
'↑令如果沒有資料就結束程式執行
Sheets("序號新增").UsedRange.Offset(5, 0).Delete
'↑令舊資料刪除
With Sheets("序號新增").[A6].Resize(V, 11)
'↑以下是關於從[A6]儲存格開始擴展必要儲存格範圍的程序
.Value = Crr
'↑令儲存格值是 Crr陣列值
With .Columns(6)
'↑以下是這範圍儲存格第6欄的程序
.Value = "=IF(E6="""","""",RIGHT(E6,5)-RIGHT(D6,5)+1)"
'↑令這第6欄值是 公式~~ (PS:只要給第1列的公式,EXCEL會自動下刷)
End With
Application.Goto .Item(6)
End With
Erase Brr, Crr
'↑令釋放變數
End Sub