Excel — Как собрать максимальное значение массива ячеек, зависящих от одной другой ячейки

#excel #vba

#excel #vba

Вопрос:

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

Я пробовал просто использовать приложение.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 amp; O1. Проблема в приложении.Я верю в код WorksheetFunction, но я не знаю другого способа эффективно выводить эти значения.

Заранее спасибо.


Редактировать: я внес некоторые изменения, чтобы заставить код работать и, надеюсь, немного лучше объяснить, чего я хочу.

Вот код, который я пытаюсь расширить, чтобы получить то, что мне нужно:

Sub 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)
  

End Sub

При запуске код выдает список, показанный на рисунке 1.

rngIn слева, rngOut справа

В общем, это то, что я хочу сделать; однако мне нужно, чтобы мой rngOUT был максимальным значением диапазона, которым управляет rngIN (см. Изображение 2).

rngOUT находится в столбце u0, выделенном справа

Вот почему изначально я пытался использовать команду worksheetfunction.max во всем диапазоне значений u0.

Я также не могу понять, как сделать мои stepVal и minVAL рациональными числами. Вероятно, это что-то простое, что я забыл из моего единственного курса по кодированию 6 лет назад.

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

Ответ №1:

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

 rngIn = curVal 
  

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

Комментарии:

1. Спасибо за ваш комментарий, я попытался прояснить ситуацию с помощью редактирования.