Мне нужно создать код, который может быстро разобрать пару тысяч точек данных, чтобы найти максимальное значение. Точки данных зависят от одной ячейки, которая также должна оцениваться по нескольким значениям.
Я пытался просто использовать функцию 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, но я не знаю другого способа эффективного получения этих значений.
Заранее спасибо.
Edit:
Некоторые изменения, которые я сделал, чтобы заставить работать код и, надеюсь, немного лучше объяснить, что я хочу.
Вот код, который я пытаюсь развернуть, чтобы получить то, что мне нужно:
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 = 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)
End Sub
При запуске код создает список, показанный на рисунке 1.
rngIn слева, rngOut справа
Это вообще то, что я хочу сделать; однако мне нужно, чтобы мой rngOUT был максимальным значением диапазона, контролируемого rngIN (см. изображение 2).
rngOUT находится в столбце u0, выделенном справа
Именно поэтому изначально я пытался использовать команду worksheetfunction.max во всем диапазоне u0.
Я также не могу понять, как сделать мои stepVal и minVAL рациональные числа. Вероятно, это что-то простое, что я забыл из своего одного урока кодирования 6 лет назад.
Еще раз спасибо заранее. Я ни в коем случае не кодер, так что этот сайт учит меня тонне.