【发布时间】:2019-04-01 02:13:59
【问题描述】:
我需要创建一个可以快速排序几千个数据点以找到最大值的代码。数据点依赖于一个单元格,该单元格也需要通过多个值进行评估。
我尝试仅使用 application.worksheet 函数对代码在移动到下一个数据点之前生成的数据进行排序,但我收到“编译错误:类型不匹配”消息。见代码:
Sub GenerateData()
Dim curDataPt As Long, curVal As Long
Dim rngOut As Range, rngIn As Range, rngData As Range, rngVar As Range
Const maxVal As Long = 50
Const minVal As Long = 0.02
Const stepVal As Long = 0.01
Set rngIn = Sheet2.Range("B10")
Set rngOut = Sheet2.Application.WorksheetFunction.Max(Range("H29:H1569"))
Set rngVar = Sheet2.Range("N1")
Set rngData = Sheet2.Range("O1")
For curVal = minVal To maxVal Step stepVal
curDataPt = curVal / stepVal
rngIn = curVal
rngVar.Offset(curDataPt) = curVal
rngData.Offset(curDataPt) = rngOut
Next curVal
Sheet1.Names.Add "DataIn", rngVar.Resize(curDataPt + 1)
Sheet1.Names.Add "DataOut", rngData.Resize(curDataPt + 1)
End Sub
我希望代码生成 5000 个 rngIn 和 rngOut 单元列,从 N1 和 O1 开始。我相信问题出在 Application.WorksheetFunction 代码中,但我不知道另一种方法可以有效地获取这些值。
提前致谢。
编辑: 我为使代码的框架能够正常工作而进行了一些更改,并希望能更好地解释我想要什么。
这是我试图扩展以获得我需要的代码:
子生成数据() Dim curDataPt As Long, curVal As Long Dim rngOut 作为范围,rngIn 作为范围,rngData 作为范围,rngVar 作为范围
Const maxVal As Long = 10
Const minVal As Long = 1
Const stepVal As Long = 1
Set rngIn = Sheet2.Range("B6")
Set rngOut = Sheet2.Range("H40")
Set rngVar = Sheet2.Range("AB1")
Set rngData = Sheet2.Range("AC1")
For curVal = minVal To maxVal Step stepVal
curDataPt = curVal / stepVal
rngIn = curVal
rngVar.Offset(curDataPt) = curVal
rngData.Offset(curDataPt) = rngOut
Next curVal
Sheet2.Names.Add "DataIn", rngVar.Resize(curDataPt + 1)
Sheet2.Names.Add "DataOut", rngData.Resize(curDataPt + 1)
结束子
运行时,代码会生成图 1 中的列表。
rngIn on left, rngOut on right
这通常是我想要做的;但是,我需要我的 rngOUT 是由 rngIN 控制的范围的最大值(见图 2)。
rngOUT is in the u0 column highlighted on the right
这就是为什么最初,我试图在整个 u0 范围内使用 worksheetfunction.max 命令。
我也不知道如何使我的 stepVal 和 minVAL 有理数。这可能是我在 6 年前的一门编码课上忘记的简单事情。
再次提前致谢。无论如何,我都不是编码员,所以这个网站教会了我很多东西。
【问题讨论】: