Поиск максимальных значений excel vba

As the name suggests, Max is used to finding the maximum value from a given data set or array. Although it is a worksheet function, one may use it with the worksheet method as a worksheet function. However, there is a limitation to this method as this function takes an array as an argument. Therefore, there can only be 30 values in the array.

Excel VBA Max Function

We have several numerical functions in Excel. We can count numerical values in the range and sum and find the minimum value and maximum value of the lot. To find the maximum value of the lot, we have an excel function called MAXThe MAX Formula in Excel is used to calculate the maximum value from a set of data/array. It counts numbers but ignores empty cells, text, the logical values TRUE and FALSE, and text values.read more, which will return the maximum value of the supplied range of numbers. In VBA, we do not have any built-in function called “MAX” to get the maximum number. We will see how to use this Excel VBA Max function.

Table of contents
  • Excel VBA Max Function
    • Example of Max Function in Excel VBA
    • Advanced Example of Max in Excel VBA
    • Things to Remember
    • Recommended Articles

VBA Max

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Max (wallstreetmojo.com)

Example of Max Function in Excel VBA

Unfortunately, we do not have the luxury of using MAX as the VBA built-in function, but we can access this function as a part of the Worksheet function class.

Now, look at the code below.

Code:

Sub MAX_Example1()

    Dim a As Integer
    Dim b As Integer
    Dim c As Integer

    Dim Result As Integer

    a = 50
    b = 25
    c = 60

    Result = WorksheetFunction.Max(a, b, c)

    MsgBox Result

End Sub

VBA MAX Example 1

We have declared three variables to store the number in the above example.

Dim a As Integer

Dim b As Integer

Dim c As Integer

We have declared one more variable to show the results.

Dim Result As Integer.

For the first 3 three variables, we assigned values like 50, 25, and 60, respectively.

a = 50

b = 25

c = 60

In the next line, we have applied the MAX as a VBA worksheet functionThe worksheet function in VBA is used when we need to refer to a specific worksheet. When we create a module, the code runs in the currently active sheet of the workbook, but we can use the worksheet function to run the code in a particular worksheet.read more class to store the result to the variable “Result.”

Result = WorksheetFunction.Max(a, b, c)

So finally, we are showing the value in the message box in VBAVBA MsgBox function is an output function which displays the generalized message provided by the developer. This statement has no arguments and the personalized messages in this function are written under the double quotes while for the values the variable reference is provided.read more.

MsgBox Result

We will run this code using F5 or manually and see the result in the message box.

VBA MAX Example 1-1

So, the result is 60.

From all the supplied numbers: 50, 25, and 60, the maximum number is 60.

Advanced Example of Max in Excel VBA

Loops are crucial in VBA to run through all the cells and arrive at the result. We will see how to combine VBA MAX with loops to arrive at the maximum value from the list of numbers.

We have a list of items and the monthly sales performance of those items, as shown below.

Example 2

Now for each item, we want to know the maximum sale number across four months, as shown in the picture.

By applying MAX to Excel, we can find this in a few seconds.

Example 2-1

We will now see how to find the maximum value using the VBA code.

The below code will perform the task of finding the maximum number for each item.

Code:

Sub MAX_Example2()

    Dim k As Integer

    For k = 2 To 9
        Cells(k, 7).Value = WorksheetFunction.Max(Range("A" & k & ":" & "E" & k))
    Next k

End Sub

Example 2-2

It will identify the maximum number easily.

Run the code manually or press the F5 key to see the result below.

VBA MAX Example 2-3

To get the maximum values month name, use the below code.

Code:

Sub MAX_Example2()

    Dim k As Integer

    For k = 2 To 9
        Cells(k, 7).Value = WorksheetFunction.Max(Range("B" & k & ":" & "E" & k))
        Cells(k, 8).Value = WorksheetFunction.Index(Range("B1:E1"), WorksheetFunction.Match _
                        (Cells(k, 7).Value, Range("B" & k & ":" & "E" & k)))
    Next k

End Sub

Example 2-4

Based on the value provided by the VBA max function, the INDEX functionThe INDEX function in Excel helps extract the value of a cell, which is within a specified array (range) and, at the intersection of the stated row and column numbers.read more & MATCH functionThe MATCH function looks for a specific value and returns its relative position in a given range of cells. The output is the first position found for the given value. Being a lookup and reference function, it works for both an exact and approximate match. For example, if the range A11:A15 consists of the numbers 2, 9, 8, 14, 32, the formula “MATCH(8,A11:A15,0)” returns 3. This is because the number 8 is at the third position.
read more
will return the associated month in the next line.

VBA MAX Example 2-5

Things to Remember

  • If their duplicate number is there, it will show only one number which comes first.
  • It is the opposite formula of the MIN function in excelIn Excel, the MIN function is categorized as a statistical function. It finds and returns the minimum value from a given set of data/array.read more.
  • The MAX function is not a VBA function. However, it is a built-in function in Excel, so use the worksheet function class.

You can download this Excel Template here – VBA Max Function Template.

Recommended Articles

This article has been a guide to VBA Max. Here, we learn how to use the Max function in VBA to find the maximum value from a supplied range of numbers, along with examples and downloadable codes. Below are some useful Excel articles related to VBA: –

  • VBA FileCopy
  • VBA Debug Print
  • VBA FileSystemObject
  • ByRef in VBA
  • VBA Find and Replace
 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

Дано:
В ячейках B1:B4 правильные даты в текстовом формате, выгружаются из внешней СУБД. мне нужно найти минимальную дату и максимальную дату. Есть вариант через вспомогательный столбик =Значен(«B1», есть вариант через формулу массива  {=МИН(ЗНАЧЕН(B1:B4))}
Мне нужно это сделать через VBA без вспомогательных ячеек. Макрорекордер записал Range(«B6»].FormulaArray = «=MIN(VALUE(R[-5]C:R[-2]C))» , а мне нужно что то типа ааа = MIN(VALUE(R[-5]C:R[-2]C))

Подскажите пожалуйста как это сделать?

Прикрепленные файлы

  • Книга1.xlsm (22.06 КБ)

 

gling

Пользователь

Сообщений: 4024
Регистрация: 01.01.1970

А почему не преобразовать в числа?  

Прикрепленные файлы

  • Книга1.xlsm (20.74 КБ)

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

а

Поиск

не помогает? :) — например,

здесь

… переменные брать типа As Date по логике тех строк — и будет вам вариант получше формулы на вба, полагаю… (изначально весь ваш Range возьмите в массив — arr)… успехов

Изменено: JeyCi17.03.2015 21:41:32

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#4

17.03.2015 21:41:26

Выводит максимальную дату в выделенном диапазоне

Код
Sub tt()
MsgBox (Format(Application.WorksheetFunction.Max(Selection), "dd/mm/yyyy"))
End Sub

 

Мотя

Пользователь

Сообщений: 3218
Регистрация: 25.12.2012

Уважаемый

tvit

!
Зачем нужны такие «заковыристые» формулы?
См. макрос: ищет MIN (MAX) в любом количестве дат в столбе А.

Изменено: Мотя17.03.2015 21:54:23

 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

Спасибо за ответы. но к сожалению все не то.

to Gling: то что предлагаете Вы у меня уже есть в моем вопросе. но тут используется дополнительная ячейка. а мне нужно сразу присвоить переменной.
to MBT: Ваш вариант вообще не работает
to Мотя: вариант решения через цикл я знаю. но мне нужно именно как одной формулой присвоить значение переменной.
Прошу прощения если не точно сформулировал свой вопрос

 

Может так? (честно не совсем понял как надо)

 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

Вы сначала вычисления присваиваете ячейке, а затем значение ячейки присваиваете переменной. А я спрашиваю как сразу присвоить переменной, не используя вспомогательных ячеек

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#9

18.03.2015 10:23:36

Цитата
tvit написал: А я спрашиваю как сразу присвоить переменной, не используя вспомогательных ячеек

tvit

я вам посоветовала воспользоваться Поиском (линки сбились — но эта вкладка находится вверху страницы около Пользователи и Правила) — MIN в Поиск — и уже с первого листа Поисковика видны примеры… вариант для любого числа (включая дробное)

Код
Sub е()
Dim arr(), min#, max#
'arr = Selection.Value
min = Application.min(Selection)
    MsgBox "min - " & min
max = Application.max(Selection)
    MsgBox "max - " & max
End Sub

в вашей ситуации, как видите, проблема НЕ в способе поиска мин и макс, а в нач

форматах

ваших данных… ищите способ объяснить xl что он смотрит на даты — я с ходу точно не знаю как… успехов
P.S. если же вы хотите использовать формулу ячейки для расчёта значения, которое нужно в переменную, то придётся итог работы этой формулы сначала выгрузить в ячейку… имхо… потом взять в переменную

Изменено: JeyCi09.05.2015 14:40:38

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#10

18.03.2015 12:11:55

tvit, думаю, что без цикла никак. Попытки запихнуть вашу функцию в Evaluate не увенчались успехом (что странно, так как массивные функции обрабатываются ею нормально), возможно, причина в том, что EVALUATE не хочет работать с вложенной VALUE или DATEVALUE из-за того, что даты не в буржуйском формате.
условно говоря, вот это работает:

Код
Worksheets(1).Evaluate("=VALUE(" & "" & "1+1" & "" & ")" & "" ) = 2 

а это нет

Код
Worksheets(1).Evaluate("=VALUE(" & "" & "05.05.15" & "" & ")" & "" ) = Error 2015

а вот это — работает, если в С1:С4 поместить например 1,2,3,4 в текстовом формате:

Код
Worksheets(1).Evaluate("=MIN(VALUE(C1:C4))")

F1 творит чудеса

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#11

18.03.2015 12:25:02

tvit,вообще-то, работает, просто не присваивает значения переменной, а выводит в текстовом формате. А для того, чтобы код знал, что вам нужна дата, то и объявите переменную, как дату:

Код
Sub tt()
Dim D As Date
D = Application.WorksheetFunction.Max(Selection)
MsgBox (D + 2)
End Sub

У меня, во всяком случае, этот макрос работает

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#12

18.03.2015 12:53:32

Цитата
Максим Зеленский написал: думаю, что без цикла никак.

думаю так же… ещё один вариант (от поисковика ;) yandex)

Код
Sub DateMinMax()
'http://www.mrexcel.com/forum/excel-questions/426072-compare-dates-visual-basic-applications.html
'compare dates in VBA
'ZVI Oct 29th, 2009, 10:57 PM
  Dim d1, min As Date, max As Date, c As Range
    min = [b1].Value: max = [b1].Value
    For Each c In Range("b1:b4")
        d1 = Split(c.Text, ".")
        d1 = DateSerial(d1(2), d1(1), d1(0))
            If d1 < min Then
                min = d1
            ElseIf d1 > max Then
                max = d1            
            End If
    Next c
  Debug.Print min & "-min; max-" & max
End Sub

Изменено: JeyCi09.05.2015 14:40:53

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#13

18.03.2015 13:10:01

Цитата
МВТ написал: У меня, во всяком случае, этот макрос работает

у меня выдает 01.01.1900 — xl 2010 ru
может быть дело в системных настройках, наверно…

Изменено: JeyCi09.05.2015 14:41:04

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

JeyCi, а Вы диапазон с датами выделили? Макрос работает с Selection

 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

Спасибо всем откликнувшимся. Если без цикла никак, тогда проще найти свободную ячейку в Excel и воспользоваться формулой массива :-)

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#16

18.03.2015 13:28:54

Цитата
МВТ написал: макрос работает с Selection

в том то и дело, что как только не выделяла — работает только на две ячейки, в которых вставлена формула (b6:b7) — на (b1:b4) не работает… выдаёт то 00:00:00, то 01.01.1900… пробовала поколдовать с форматом ячеек — тоже какие-то странные итоги… вобщем, слабо поняла, как меня понимает xl… ну и ладно, :) не тревожьтесь…  — решение по ветке общими усилиями нашли и отлично… всем успехов  

Изменено: JeyCi09.05.2015 14:41:16

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

Прикрепляю файл с вставленными макросом и пояснениями

 

МВТ, так в том и дело, что изначально даты сохранены как текст.
Вы попробуйте макрос запустить на B1:B4 в исходном файле автора. Получите результат 0.

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#19

18.03.2015 14:28:55

Максим Зеленский,понял: протупил — я сам даты вводил. Так может, проще поменять формат дат на Дату :)? Нет, можно и без этого, но не очень удобно. Тогда можно чтобы макрос сам преобразовывал текстовые значения в даты:

Код
Sub tt()
Dim D As Date, Rng As Range
Application.ScreenUpdating = False
If Selection.Count < 2 Then
    MsgBox ("Выделено менее двух ячеек. Выделите диапазон дат, например, А1:А5")
    Exit Sub
End If
Set Rng = Selection
For Each Cell In Rng
If Not IsNumeric(Cell) Then Cell.Value = CDate(Cell.Value)
On Error Resume Next
Next Cell
Rng.NumberFormat = "dd/mm/yyyy"
Rng.Value = Rng.Value
D = Application.WorksheetFunction.Max(Rng)
Application.ScreenUpdating = True
MsgBox ("Максимальная дата в выделенном диапазоне " & Replace(Selection.Address, "$", "") & ": " & D)
End Sub


Изменено: МВТ18.03.2015 15:00:00
(Добавил макрос)

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#20

18.03.2015 17:25:45

Цитата
МВТ написал: проще поменять формат дат на Дату

как вариант (с Selection) без цикла

Код
Sub e1()
Dim min As Date, max As Date
Selection.TextToColumns DataType:=xlDelimited, FieldInfo:=Array(1, 4)  '4 - DMY Date format
min = Application.min(Selection)
max = Application.max(Selection)
MsgBox min & vbNewLine & max
End Sub

ВСЁ  — думаю, короче и без цикла у меня уже точно не получится… 8)  (поправила)

Изменено: JeyCi09.05.2015 14:41:29

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

#21

18.03.2015 18:42:51

Цитата
JeyCi написал: ВСЁ  — думаю, короче и без цикла у меня уже точно не получится…

Немного не то, что я просил (все таки идет изменение исходного файла), но решение очень красивое, нужно запомнить. Мне часто нужно делать нечто подобное, но все как-то извращенными способами приходилось это делать :D

Изменено: tvit09.05.2015 14:41:47

 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

Максим Зеленский, пытался осмыслить, что Вы написали. Действительно, если в исходном файле заменить в датах точку на слеш «/» , то все начинает работать. Похоже глюк VBA, в оболочке русификация отрабатывает отлично,  а в VBA нет.

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

tvit,если для вас настолько критично сохранять даты в текстовом формате, можете прописать в макросе создание в свободной колонке временного массива в правильном формате, его обработку и последующее удаление

 

tvit

Пользователь

Сообщений: 60
Регистрация: 01.04.2014

Обрабатываемые данные выгружаются в текстовые файлы из централизованной АС и на них я повлиять ни как не могу. А поскольку объем каждого из этих файлов может занимать 300-400 Мб по 500 тысяч строк и более, то вопрос с нехваткой памяти стоит достаточно остро, поэтому прежде чем добавить вспомогательный столбец, я 10 раз подумаю.

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#25

19.03.2015 00:38:58

Цитата
tvit написал: Обрабатываемые данные выгружаются в текстовые файлы из централизованной АС и на них я повлиять ни как не могу

Но Вы можете влиять на импорт текстов в Excel. Используйте Мастер импорта текстов (он запускается автоматически при открытии файлов .txt) и задайте формат Дата:ДМГ нужному столбцу.
Можно написать макросы для импорта каждого типа файлов.

 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#26

19.03.2015 09:30:03

Цитата
tvit написал: Похоже глюк VBA, в оболочке русификация отрабатывает отлично,  а в VBA нет.

связано скорее с тем, что функции преобразования типов в VBA не работают с массивами напрямую (только с элементами), а прямого аналога функции ЗНАЧЕН в объекте WorksheetFunction нет. Фактически, в рамках поставленных вами условий (без циклов, без задействования дополнительных столбцов) получить результат можно было только при использовании метода Evaluate, запихивая в него готовую формулу. EVALUATE — наследие XML, предшественника VBA, и кроме даты в US-формате, есть еще некоторые ограничения. Для прочих сложностей с международными стандартами в VBA есть Application.International с кучей региональных настроек.

Изменено: Максим Зеленский09.05.2015 14:42:48

F1 творит чудеса

  • Что такое Max Function в VBA?

Что такое Max Function в VBA?

Макс функция используется для расчета наибольшего числа. В Excel есть несколько числовых функций, которые можно использовать для подсчета диапазона, суммирования лота или для поиска минимального или максимального значения из диапазона чисел. Функция Max используется для поиска максимального значения из диапазона значений. Это встроенная функция в Excel, которая относится к категории Max. Однако в VBA нет встроенной функции как Max, чтобы получить максимальное значение. Функция Max также может использоваться в VBA Excel. Для аргумента функции (массив, диапазон и т. Д.) Его можно либо ввести непосредственно в функцию, либо определить как переменные для использования вместо него.

Синтаксис:

=application.WorksheetFunction.max(arg1, arg2, arg3……………arg30)

Параметр или аргументы, используемые в функции Max:

arg1 …… arg30: число 1 — число 30, из которого следует вывести максимальное число. Это может быть число, именованные диапазоны, массивы или ссылки на числа.

Замечания:

  • Если аргументы не содержат чисел, MAX возвращает 0 (ноль).
  • Аргументы, которые имеют значения ошибок или текст и не могут быть переведены в числа, приведут к ошибкам.
  • Функция Max возвращает числовое значение.

Как включить вкладку «Разработчики»?

Вкладка «Разработчик» обязательна на ленте Excel для запуска и записи макроса VBA. Выполните следующие шаги, чтобы включить вкладку разработчика в Excel.

Шаг 1: Перейти к файлу .

Шаг 2: Нажмите на Опции .

Шаг 3. В открывшемся окне с именем «Параметры Excel» нажмите «Настроить ленту», чтобы получить доступ к параметрам настройки ленты.

Шаг 4: Здесь в опциях настройки вы можете увидеть опцию Разработчик (Custom) . Отметьте его, чтобы он активировался на главной ленте Excel и был легко доступен. Нажмите OK после проверки опции Разработчик.

Шаг 5. Откройте вкладку « Разработчик » и щелкните значок Visual Basic (ALT + F11).

VBA редактор появится.

Как использовать функцию Max в Excel VBA?

Ниже приведены различные примеры использования функции Max в Excel VBA:

Вы можете скачать этот шаблон VBA Max Excel здесь — Шаблон VBA Max Excel

VBA Max — Пример № 1

Возьмите четыре числа 12, 25, 36, 45. Узнайте число Макса, используя функцию max.

Код:

 Sub AA () Dim A как целое число Dim B как целое число Dim C как целое число Dim D как целое число Dim результат как целое число A = 12 B = 25 C = 36 D = 45 result = WorksheetFunction.Max (A, B, C, D) MsgBox результат End Sub 

Замечания:

  • Упомяните тип данных переменных через dim .
  • Присвойте числа переменным.

Запустите код, нажав клавишу F5 или нажав кнопку воспроизведения. Результат будет отображен в окне сообщения.

VBA Max — Пример № 2

Возьмите четыре числа 15, 34, 50, 62. Узнайте максимальное число, используя функцию Max.

Код:

 Sub AA1 () A = 15 B = 34 C = 50 D = 62 результат = WorksheetFunction.Max (A, B, C, D) MsgBox результат End Sub 

Замечания:

  • Здесь мы прямо присвоили номера четырем различным переменным, не упоминая их тип данных. Программа автоматически решает тип данных.
  • Использовали эти переменные в формуле и получили результат в окне сообщения.

Запустите код, нажав клавишу F5 или нажав кнопку воспроизведения. Результат будет отображен в окне сообщения.

VBA Max — Пример № 3

Найдите максимальное значение из диапазона, используя функцию Max.

Код:

 Функция getmaxvalue (Maximum_range As Range) Dim i As Double для каждой ячейки в Maximum_range If cell.Value> i Тогда i = cell.Value End If Next getmaxvalue = i End Function 

Замечания:

  • Функциональная процедура в коде VBA выполняет вычисления и возвращает результат.
  • Он может иметь необязательный оператор возврата. Требуется вернуть значение из функции.
  • Перед использованием функции нам нужно определить эту конкретную функцию.

Синтаксис:

Function functionname(parameter_list)
Statement 1
Statement 2
Statement 3
:
End Function

Здесь за ключевым словом функции следует уникальное имя функции, например, getmaxvalue (args_1, … args_n), и может содержать или не содержать список параметров с типом данных, например Maximum_range As Range. Он заканчивается функцией завершения, которая указывает конец функции. Упомяните тип данных переменных через dim .

Вызов функции:

Чтобы вызвать функцию, вызовите функцию, используя имя функции, например, getmaxvalue (args_1, … args_n) .

Результат будет таким, как указано ниже.

VBA Max — Пример № 4

Найдите максимальное значение из диапазона, используя функцию Max.

Код:

 Функция getmaxvalue (Maximum_range As Range) Dim i As Double для каждой ячейки в Maximum_range If cell.Value> i Тогда i = cell.Value End If Next getmaxvalue = i End Function 

Замечания:

  • Maximum_range представляет диапазон ячеек, переданных из таблицы Excel в качестве параметра.
  • Переменная i объявлена ​​как Double.
  • Цикл For повторяется. На каждой итерации условие if проверяет, является ли значение, считанное из соответствующей ячейки, больше, чем i. Если условие оценивается как истина, то значение ячейки присваивается i .
  • Когда все ячейки в Maximum_range будут повторены, максимум из них будет назначен i .
  • Наконец , я назначен getmaxvalue и возвращен в вызывающую ячейку.

Результат будет таким, как указано ниже.

Вывод

Функция VBA max используется для поиска максимального значения из диапазона чисел. Для выполнения расчетов требуется функциональная процедура. Dim используется для определения переменных. Функция завершения используется для завершения функции. Он выполняет задачу очень быстро и точно. Хотя это не встроенная функция в Excel VBA, однако, используя процедуру функции, мы можем выполнить функцию max в VBA Excel.

Рекомендуемая статья

Это руководство по VBA MAX. Здесь мы обсудим, как использовать функцию MAX в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Создание объекта коллекции в Excel VBA
  2. VBA IF Заявления | Шаблоны Excel
  3. Как использовать функцию сортировки Excel VBA?
  4. VBA While Loop (Примеры с шаблоном Excel)

1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

1

Excel

Максимальное значение

13.05.2019, 13:38. Показов 20024. Ответов 16


Студворк — интернет-сервис помощи студентам

Добрый день, даны два столбца дробных значений (А1:А47 и В1:В47), нужно, с помощью макроса, из столбца В найти максимальное значение, а затем найти в А соответствующее значение для В максимального и вывести эти числа на экран.



0



Kate_27

198 / 132 / 67

Регистрация: 27.03.2019

Сообщений: 288

13.05.2019, 13:52

2

Добрый день,
можно вот так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub MaximumAB()
    Dim B As Double
    Dim i As Integer
    Dim Msg As String
    B = Application.Max(Range("B1:B47"))
    For i = 1 To 47
        If Cells(i, 2) = B Then Msg = Msg & Cells(i, 1).Value & vbTab
    Next i
    MsgBox "Значения в А, соответствующие максимальному значению в В: " & Msg
End Sub



1



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

13.05.2019, 14:06

 [ТС]

3

Только мне надо, чтобы значения были выведены в ячейку, например, в Д 2 и С 2



0



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

13.05.2019, 14:12

 [ТС]

4

Kate_27, приложила файл



0



Kate_27

198 / 132 / 67

Регистрация: 27.03.2019

Сообщений: 288

13.05.2019, 14:18

5

лялячка,
Тогда так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub MaximumAB()
    Dim B As Double
    Dim i As Integer
    Dim Msg As String
    Dim k As Integer
    B = Application.Max(Range("B1:B47"))
    For i = 1 To 47
        If Cells(i, 2) = B Then
            Cells(2, 3 + k) = Cells(i, 1)
            k = k + 1
        End If
    Next i
End Sub

Добавлено через 3 минуты
лялячка,
Мне не понятно в файле куда выводить значения.
Либо скажите в какие ячейки, либо сами подкорректируйте строку кода:
Cells(2, 3 + k) = Cells(i, 1) на то, что Вам нужно



1



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

13.05.2019, 14:37

 [ТС]

6

В ячейку Н2 поместить максимальное число из столбца в, а в G2 соотвествующее маскимальному числу в , число из столбца а. Вот как -то так . Спасибо!!!!!!!!!!!!!!



0



Kate_27

198 / 132 / 67

Регистрация: 27.03.2019

Сообщений: 288

13.05.2019, 14:44

7

лялячка, Я так понимаю 2 максимальных значений в Вашем случае быть не может? Тогда можно цикл переписать так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub MaximumAB() 
    Dim b As Double
    Dim i As Integer
    b = Application.Max(Range("B1:B47"))
    For i = 1 To 47
        If Cells(i, 2) = b Then
            Range("H2") = b
            Range("G2") = Cells(i, 1)
            Exit For
        End If
    Next i
End Sub



0



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

13.05.2019, 18:39

 [ТС]

8

Спасибо, сделала, как вы написали, но поняла, что максимумов несколько, и мне надо взять последнее, в условии прописала (6 строчка) >=b , выводит в ячейку н2 верное значение, однако в g2 выводит неверное число, пишет там сигма. И еще мне надо столбик в разделить на ячейку h2 и вывести эти числа в столбик д, и столбик а разделить на g2 и вывести результат в столбец с, тоже с помощью макроса, вроде начала делать, но походу не правильно. Посмотрите, пожалуйста.



0



198 / 132 / 67

Регистрация: 27.03.2019

Сообщений: 288

13.05.2019, 20:24

9

лялячка, давайте так.
Киньте файл и сформируйте задачу правильно. Откуда брать данные, какой ожидается результат и куда этот результат вывести.
Просто создаётся ощущение, что вы сами не знаете чего хотите получить.



0



лялячка

1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

14.05.2019, 09:11

 [ТС]

10

Добрый день, файл с макросом не прикладывается, прикладываю без макроса, есть два столбика: 1. Из столбца В, выбрать самый последний максимум (число, которое располагается в 31 строке) и вывести в ячейку Н2. 2. Из столбца А, взять число которое стоит напротив В максимального (число, которое тоже располагается в 31 строке но в столбце А) и поместить его в G2.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub MaximumAB()
    Dim b As Double
    Dim i As Integer
    b = Application.Max(Range("B1:B47"))
    For i = 1 To 47
        If Cells(i, 2) >= b Then
        Range("H2") = b
        Range("G2") = Cells(i, 1)
    Exit For
        End If
    Next i
End Sub

Вот что я прописала в макросе, он правильно выводит значение В, но в ячейке G2 он вывод слово эксп, а должно быть значение 0,22

Вложения

Тип файла: xlsx 13.05.19.xlsx (11.5 Кб, 1 просмотров)



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

14.05.2019, 09:32

11

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub MaximumAB()
Dim b As Double
Dim i As Integer
b = Application.Max(Range("B1:B47"))
For i = 1 To 47
    If Cells(i, 2) = b Then n = Cells(i, 1)
Next i
Range("H2") = b
Range("G2") = n
End Sub

Добавлено через 3 минуты

Цитата
Сообщение от лялячка
Посмотреть сообщение

но в ячейке G2 он вывод слово эксп

это по тому что текст всегда больше числа и условие Cells(i, 2) >= b выполняется в первой же строке.
σэксп > 999,4038217



0



198 / 132 / 67

Регистрация: 27.03.2019

Сообщений: 288

14.05.2019, 09:48

12

лялячка, а зачем Вы условие Cells(i, 2)= b заменили на Cells(i, 2) >= b. Отсюда у Вас ошибка и вышла.

Добавлено через 3 минуты
лялячка, чтобы выбрать самый последний максимум уберите exit For из цикла в моем коде или воспользуйтесь модификацией Vlad999, это по сути тоже самое.



0



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

14.05.2019, 10:08

 [ТС]

13

Спасибо! Но теперь в G2 он мне 0 выдает(((((а надо 0,22



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

14.05.2019, 10:19

14

любое утверждение желательно подкреплять файлом.
xlsm в архив тогда прицепится на форум.



0



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

14.05.2019, 10:35

 [ТС]

15

Приложила



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

14.05.2019, 10:41

16

почитайте про тип переменных. Integer — это только целые числа, по этому 0,22 округлялось до 0.
Dim n As Double нужно.



0



1 / 1 / 0

Регистрация: 04.05.2011

Сообщений: 32

14.05.2019, 10:52

 [ТС]

17

Огромное спасибо! Все получилось!!!!)))))))



0



VBA Max

What is Max Function in VBA?

Max Function is used to calculate the largest number. There are several numerical functions in excel which can be used to count the range, sum up the lot or to find the minimum or maximum value from the range of numbers. Max function is used to find the maximum value out of a range of values. It is an inbuilt function in Excel and categorized as the Max function. However, in VBA, there is no inbuilt function as Max to get the maximum value. Max function can be used in VBA Excel also. For the function argument (array, range, etc.), it can be either entered directly into the function or defined as variables to use instead.

Syntax:

=application.WorksheetFunction.max(arg1,arg2,arg3……………arg30)

Parameter or Arguments used in Max function are:

arg1……arg30: number 1 to number 30 from which the maximum number is to be inferred. It can be number, named ranges, arrays or reference to numbers.

Note:

  • If the arguments contain no numbers, MAX returns 0 (zero).
  • Arguments that have error values or text and cannot be translated into numbers will throw errors.
  • Max function returns a numeric value.

How to Enable the Developers Tab?

Developer tab is mandatory on the Excel ribbon to start and write the VBA macro. Follow the below steps to enable the developer’s tab in Excel.

Step 1: Go to File.

Open File

Step 2: Click on Options.

Options

Step 3: In a window opening up named Excel Options, click on Customize Ribbon to access the ribbon customization options.

Customize Ribbon

Step 4: Here in the customization options, you can see the Developer(Custom) option. Checkmark it, so that it gets activated on the main ribbon of excel and can easily be accessed. Click OK after checking the Developer option.

Developer(Custom) option

Step 5: Click on the Developer tab and then click the Visual Basic (ALT +F11) icon.

Developer Tab>Visual Basic

VBA editor will appear.

How to Use Max Function in Excel VBA?

Below are the different examples to use Max function in Excel VBA:

You can download this VBA Max Excel Template here – VBA Max Excel Template

VBA Max – Example #1

Take four numbers 12, 25, 36, 45. Find out Max’s number by using the max function.

Code:

Sub AA()

Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
Dim result As Integer
A = 12
B = 25
C = 36
D = 45
result = WorksheetFunction.Max(A, B, C, D)
MsgBox result

End Sub

Max number Example 1

Note:

  • Mention the data type of the variables through dim.
  • Assign numbers to variables.

Run the code by pressing the F5 key or by clicking on the Play Button. The result will be displayed in the message box.

Message Box Example 1-1

VBA Max – Example #2

Take four numbers 15, 34, 50, 62. Find out max number by using the Max function.

Code:

Sub AA1()

A = 15
B = 34
C = 50
D = 62
result = WorksheetFunction.Max(A, B, C, D)
MsgBox result

End Sub

VBA Max Example 2

Note:

  • Here, we have directly assigned numbers to four different variables without mentioning their data type. The program automatically decides the data type.
  • Used those variables in the formula and got the result in the message box.

Run the code by pressing the F5 key or by clicking on the Play Button. The result will be displayed in the message box.

Message Box Example 2-2

VBA Max – Example #3

Find the maximum value from the range by using the Max function.

VBA Max Example 3-1

Code:

Function getmaxvalue(Maximum_range As Range)
Dim i As Double
For Each cell In Maximum_range
If cell.Value > i Then
i = cell.Value
End If
Next
getmaxvalue = i
End Function

VBA Max Example 4

Note:

  • A function procedure in VBA code performs calculations and returns the result.
  • It can have an optional return statement. It is required to return a value from a function.
  • Before using the function we need to define that particular function.

Syntax:

Function functionname(parameter_list)
Statement 1
Statement 2
Statement 3
:
End Function

Here, the function keyword is followed by a unique function name e.g. getmaxvalue(args_1,…args_n) and may or may not carry the list of parameters with datatype e.g. Maximum_range As Range. It ends with the End Function which indicates the end of the function. Mention the data type of the variables through dim.

Calling a function:

To invoke a function call the function by using the function name e.g getmaxvalue(args_1,…args_n).

VBA MAX Function Example 3-2

The result will be as given below.

VBA Max Example 3-3

VBA Max – Example #4

Find the maximum value from the range by using the Max function.

VBA MAX Function Example 4-1

Code:

Function getmaxvalue(Maximum_range As Range)
Dim i As Double
For Each cell In Maximum_range
If cell.Value > i Then
i = cell.Value
End If
Next
getmaxvalue = i
End Function

Range Example 4

Note:

  • Maximum_range represents a range of cells passed from the excel sheet as a parameter.
  • The variable i is declared as Double.
  • The For loop is iterated. With each iteration, the, if condition checks whether the value read from the corresponding cell, is greater than i. If the condition evaluates true then cell value is assigned to i.
  • When all the cells in the Maximum_range have been iterated, the maximum among those will be assigned to i.
  • Finally, i is assigned to getmaxvalue and returned to the calling cell.

getmaxvalue Example 4-4

The result will be as given below.

getmaxvalue Example 4-5

Conclusion

VBA max function is used to find the maximum value from a range of numbers. A function procedure is required to perform calculations. Dim is used to define variables. End function is used to end the function. It performs the task very fast and accurate. Though it is not an inbuilt function in VBA excel, however, by using function procedure we can perform the max function in VBA excel.

Recommended Article

This is a guide to VBA MAX. Here we discuss how to use MAX function in Excel VBA along with practical examples and downloadable excel template. You can also go through our other suggested articles –

  1. VBA Solver
  2. VBA IF Statements
  3. VBA Sort
  4. VBA While Loop

Like this post? Please share to your friends:
  • Поиск максимального числа в таблице excel
  • Поиск максимального значения при условии excel
  • Поиск максимального значения в столбце excel
  • Поиск максимального значения в excel если
  • Поиск максимально близкого значения в excel