#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.
В общем, это то, что я хочу сделать; однако мне нужно, чтобы мой rngOUT был максимальным значением диапазона, которым управляет rngIN (см. Изображение 2).
rngOUT находится в столбце u0, выделенном справа
Вот почему изначально я пытался использовать команду worksheetfunction.max во всем диапазоне значений u0.
Я также не могу понять, как сделать мои stepVal и minVAL рациональными числами. Вероятно, это что-то простое, что я забыл из моего единственного курса по кодированию 6 лет назад.
Еще раз заранее спасибо. Я ни в коем случае не программист, поэтому этот веб-сайт многому меня научил.
Ответ №1:
Мне очень неясно, чего вы пытаетесь здесь достичь. Одна ошибка, из-за которой возникает следующее:
rngIn = curVal
Это не сработает по двум причинам: rngIn — это диапазон, который является объектом, который необходимо установить. А curVal — это Long, который никогда не поместится в диапазон. Эта ошибка приведет к той, которую, как вы говорите, вы получите. Если вам нужна дополнительная помощь, пожалуйста, опубликуйте пример ваших данных, информацию о функции worksheet, которую вы пытаетесь использовать, и информацию о выходных данных, которые вы ожидаете от этого подраздела.
Комментарии:
1. Спасибо за ваш комментарий, я попытался прояснить ситуацию с помощью редактирования.