我需要创建一个可以快速对数千个数据点进行排序以找到最大值的代码。数据点取决于一个单元,该单元也需要通过多个值进行评估。
我尝试仅使用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
我希望代码生成从N1和O1开始的rngIn和rngOut的5000个单元格列。我相信问题出在Application.WorksheetFunction代码中,但是我不知道另一种有效获取这些值的方法。
谢谢。
编辑: 为了使代码有效工作,我进行了一些更改,并希望解释一下我想要的更好一点。
这是我要扩展以获取所需内容的代码:
子GenerateData() Dim curDataPt尽可能长,curVal尽可能长 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年前就从我的一个编码课程中忘记了。
再次感谢。我绝对不是编码员,所以这个网站教了我很多知识。
答案 0 :(得分:0)
我不清楚您要在这里完成什么。跳出以下内容的一个错误:
rngIn = curVal
由于两个原因,该方法将不起作用:rngIn是一个范围,这是一个需要设置的对象。而且curVal是一个Long,永远不会适合Range。此错误将导致您所说的错误。如果您需要进一步的帮助,请在此子目录中发布数据示例,有关您要使用的工作表功能的信息以及有关您期望从此子项获得的输出的信息。