【发布时间】:2021-04-26 21:54:27
【问题描述】:
我试图列出 2 个数字之间的所有值,但每组的间隔各不相同。例如,我想以 0.5 为增量列出(包括)1 - 5 之间的所有数字,以 10 为增量列出 40 - 140 之间的所有值,如下所示。输入的总数会有所不同(我目前有 15 个),所以我尽量避免为每个新输入编写一个新循环。
我找到了来自hiker95 的原始代码,除了可变步长之外,它完全符合我的要求,但我终其一生都无法弄清楚如何正确修改它。任何帮助将不胜感激 - 我认为错误必须与在循环结束时调用的步长有关?原代码如下:
Sub RangeToList()
' original code by hiker95, 08/21/2014, ME800450
' Create list of all values between upper and lower parameter values with specified interval
Dim w1 As Worksheet, wr As Worksheet
Dim a As Variant, i As Long
Dim r As Long, lr As Long, nc As Long, c As Range
Dim MyStart As Long, MyStop As Long, n As Long
Application.ScreenUpdating = False
Set w1 = Sheets("Sheet1")
lr = w1.Cells(Rows.Count, 1).End(xlUp).Row
a = w1.Range("A1:B" & lr).Value
If Not Evaluate("ISREF(Results!A1)") Then Worksheets.Add(After:=w1).Name = "Results"
Set wr = Sheets("Results")
With wr
.UsedRange.ClearContents
For i = 1 To lr
nc = nc + 1
.Cells(1, nc).Value = a(i, 1)
.Cells(2, nc).Value = a(i, 2)
Next i
For Each c In .Range(.Cells(1, 1), .Cells(1, lr))
MyStart = .Cells(1, c.Column)
MyStop = .Cells(2, c.Column)
n = (MyStop - MyStart) + 1
.Cells(3, c.Column) = "Test Points"
.Cells(4, c.Column) = MyStart
With .Range(.Cells(4, c.Column), .Cells(n + 3, c.Column))
.DataSeries Step:=1, Stop:=MyStop
End With
Next c
.Columns.AutoFit
.Activate
End With
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
是否需要在每个循环中输出整个范围?即对于输入 1,循环应该一次输出 1 到 5 之间的所有值,还是需要输出 1 和 40,然后是 1.5 和 50 等?
-
我认为这无关紧要...?所有值的最终表格都以 .csv 格式导出到仿真软件中。
-
今天有时间我会进一步回顾这个。同时,请确保您已在问题中概述了所有具体要求(以防其他人前来回答!)
-
好的,您的实际输入是否按照您的示例数据逐行排列,并且它们总是在同一列中?
-
正确 - 输入名称、低值、高值和间隔始终分别位于 a、b、c 和 d 列中。理想情况下,生成的表会转到一个新的工作表,但我认为我已经弄清楚了那部分。