Excel - Как собрать максимальное значение массива ячеек, зависящих от одной другой ячейки - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно создать код, который может быстро разобрать пару тысяч точек данных, чтобы найти максимальное значение. Точки данных зависят от одной ячейки, которая также должна оцениваться по нескольким значениям.

Я пытался просто использовать функцию 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 лет назад.

Еще раз спасибо заранее. Я ни в коем случае не кодер, так что этот сайт учит меня тонне.

1 Ответ

0 голосов
/ 01 апреля 2019

Мне очень непонятно, чего вы здесь пытаетесь достичь. Одна ошибка, которая выскакивает это следующее:

rngIn = curVal 

Это не будет работать по 2 причинам: rngIn - это диапазон, который является объектом, который необходимо установить. И CurVal - это Long, который никогда не будет вписываться в Range. Эта ошибка приведет к тому, что вы говорите, что получаете. Если вам нужна дополнительная помощь, пожалуйста, опубликуйте пример ваших данных, информацию о функции листа, которую вы пытаетесь использовать, и информацию о выводе, который вы ожидаете от этого подпункта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...