Excel-如何收集依赖于另一个单元格的单元格数组的最大值

时间:2019-04-01 02:13:59

标签: excel vba

我需要创建一个可以快速对数千个数据点进行排序以找到最大值的代码。数据点取决于一个单元,该单元也需要通过多个值进行评估。

我尝试仅使用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年前就从我的一个编码课程中忘记了。

再次感谢。我绝对不是编码员,所以这个网站教了我很多知识。

1 个答案:

答案 0 :(得分:0)

我不清楚您要在这里完成什么。跳出以下内容的一个错误:

rngIn = curVal 

由于两个原因,该方法将不起作用:rngIn是一个范围,这是一个需要设置的对象。而且curVal是一个Long,永远​​不会适合Range。此错误将导致您所说的错误。如果您需要进一步的帮助,请在此子目录中发布数据示例,有关您要使用的工作表功能的信息以及有关您期望从此子项获得的输出的信息。