The easiest way to retrieve the maximum (I can think of) is iterating through the array and comparing the values. The following two functions do just that:
Option Explicit
Public Sub InitialValues()
Dim strValues(1 To 3) As String
strValues(1) = 3
strValues(2) = "af"
strValues(3) = 6
Debug.Print GetMaxString(strValues)
Debug.Print GetMaxNumber(strValues)
End Sub
Public Function GetMaxString(ByRef strValues() As String) As String
Dim i As Long
For i = LBound(strValues) To UBound(strValues)
If GetMaxString < strValues(i) Then GetMaxString = strValues(i)
Next i
End Function
Public Function GetMaxNumber(ByRef strValues() As String) As Double
Dim i As Long
For i = LBound(strValues) To UBound(strValues)
If IsNumeric(strValues(i)) Then
If CDbl(strValues(i)) > GetMaxNumber Then GetMaxNumber = CDbl(strValues(i))
End If
Next i
End Function
Note, that each time a string (text) array is passed to the function. Yet, one function is comparing strings (text) while the other is comparing numbers. The outcome is quite different!
The first function (comparing text) will return (with the above sample data) af
as the maximum, while the second function will only consider numbers and therefore returns 6
as the maximum.
на сайте
http://msoffice.nm.ru/faq/macros/variables.htm#faq548
примеры посмотрел
Sub primer()
Dim iMassiv()
‘Здесь идёт заполнение массива некими данными
iMassiv = [a1:e10].Value
MsgBox Join(Application.Transpose(Application.Index(iMassiv, 0, 1)), vbNewLine), , «Первый столбец :»
‘или так
With Application
MsgBox Join(.Transpose(.Index(iMassiv, 0, 3)), _
Chr(10)), , «Третий столбец :»
End With
With WorksheetFunction
MsgBox Join(.Transpose(.Index(iMassiv, 0, 5)), _
Chr(13)), , «Пятый столбец :»
End With
Dim iAverage#, iMin#, iMax#, iSum#, iProduct
‘ For iCount = 1 To 100
‘ iMassiv(iCount) = Rnd * 1000
‘ Next
With Application
iAverage = .Average(iMassiv)
iMin = .Min(.Transpose(.Index(iMassiv, 0, 3)))
iMax = .Max(.Transpose(.Index(iMassiv, 0, 4)))
iSum = .Sum(iMassiv)
iProduct = .Product(iMassiv)
End With
End Sub
all_angarsk, Вы меня не поняли. Я имел ввиду, что не нужно усложнять. Любой модуль/процедуру Вы легко отправите в экспорт на флэшку в формате *.bas. И так точно вытянете его оттуда в любом месте, на любом компе, в любой документ. А с модулем кнопки — тяжелее. Ну и с самой кнопкой — нарисуйте встроенными инстр-ми фигуру (или обьект WordArt) что Вам нравится, и назначьте ей нужную процедуру (правая кнопка > Назначить макрос (или как там у Вас по локализации)). Всего пару кликов. И практично, и веселее, и проще, а не унылая серость.
А про «…регулярные выражения…«. Что Вы имели ввиду? Я их там не вижу.
Добавлено через 25 минут
Кажется, я понял про регулярку. Смотрите, у Тoiai грамотный и лаконичный код. Лично я бы все-таки сгенерированный массив выгрузил на лист, чтоб было видно. I.e., после next я бы добавил строку:
[a1].resize(1, ubound(a)).value=a
Дальше он вызывает окно сообщения MsgBox, в котором использует фукции не VBA, а Excel — Min и Max. Поэтому его тяжелая жизнь заставила вызывать их такими фразами Application.Max(a), Application.Min(a)…
Кстати, что б, если не нужно, не выкладывать массив на лист, его тоже можно одним движение загнать в этот же MsgBox.
Максимальное значение элемента массива. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
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
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
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.
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.
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.
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
It will identify the maximum number easily.
Run the code manually or press the F5 key to see the result below.
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
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.
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
- Remove From My Forums
-
Question
-
in column A have a value related column D.
In effect in D are the value of Principal Agency and in column A are the
value of Sub Agency of Principal Agency.
Now based column D how to ,(with a function or macro) get and store in a
variable the value of min and max of Sub Agengy?Example:
for all 4580 in column D get the min and max from column A.
In this case the min is 4500 the max is 6552
The name of variable is MIN_Agency and MAX_Agency
Tks.Note: all column are in Text format
column A column D
0500 0580
0501 0580
0502 0580
0503 0580
0504 0580
0505 0580
0506 0580
0507 0580
0543 0580
0546 0580
0549 0580
0552 0580
0555 0580
0558 0580
0561 0580
0564 0580
0567 0580
0570 0580
0576 0580
0579 0580
0580 0580
0582 0580
1700 4780
1701 4780
1702 4780
1703 4780
1704 4780
1743 4780
1746 4780
1749 4780
1752 4780
1755 4780
1758 4780
2000 2380
2043 2380
2044 2380
2046 2380
2049 2380
2052 2380
2055 2380
2300 2380
2301 2380
2302 2380
2343 2380
2346 2380
2349 2380
2352 2380
2355 2380
2380 2380
2900 0580
2911 0580
2943 0580
2946 0580
2949 0580
3700 0580
3701 0580
3743 0580
3752 0580
3755 0580
3758 0580
4200 4780
4201 4780
4210 4780
4243 4780
4246 4780
4500 4580
4501 4580
4502 4580
4503 4580
4504 4580
4505 4580
4506 4580
4507 4580
4508 4580
4509 4580
4510 4580
4511 4580
4512 4580
4513 4580
4514 4580
4515 4580
4516 4580
4532 4580
4534 4580
4535 4580
4536 4580
4543 4580
4546 4580
4549 4580
4552 4580
4555 4580
4556 4580
4557 4580
4558 4580
4561 4580
4562 4580
4564 4580
4567 4580
4569 4580
4573 4580
4576 4580
4579 4580
4580 4580
4582 4580
4700 4780
4701 4780
4702 4780
4703 4780
4704 4780
4705 4780
4706 4780
4743 4780
4746 4780
4749 4780
4752 4780
4755 4780
4758 4780
4761 4780
4773 4780
4775 4780
4776 4780
4780 4780
5900 2380
5901 2380
5902 2380
5943 2380
5946 2380
6500 4580
6501 4580
6502 4580
6543 4580
6546 4580
6549 4580
6552 4580
6800 0580
6801 0580
6803 0580
6804 0580
6805 0580
6811 0580
6843 0580
6846 0580
Answers
-
Hi,
Note that this is a forum target at VSTO issues. There is also a VBA forum in this site.
However, I think, you can iterate through the Column D to finish that. You can refer all the cells in Column D using this statement: Me.Cells(4.i).Value (i is the row index). If this value is equal to 4580, then you get Me.Cells(1.i).Value. If this Value is greater than MAX_Agency, replace the Max_Agencey with it. If it is less than MIN_Agency, replace the MIN_Agency with it. After the iteration, you will get the max and min values in column A of 4580.
As to other values in Column D, the manipulate process is same.
Thanks
Ji
-
#2
Try posting a sample of your data and the required result.
-
#3
I don’t think you need VBA for this. Suppose your dates are in cells A1:A200, the fund names are in cells B1:B200, and the prices are in cells C1:C200. In cell D1, enter this formula:
=B1&C1
Copy this formula down through cell D200. Now, enter the fund name that you want to analyze in cell F1. Below that, in cell F2, enter the following array formula, and hit [Ctrl] + [Shift] + [Enter] (not just [Enter]):
=LARGE(($B$1:$B$200=$F$1)*($C$1:$C$200), 1)
If you used [Ctrl] + [Shift] + [Enter], you will see braces ({}) around the formula. This will find the largest price for the fund. Now, enter the following in cell F3:
=INDEX($A$1:$A$200, MATCH($F$1&$F$2, $D$1:$D$200, 0))
This will look up the first date that the highest price is hit for that fund.
Does that help?
-
#4
Code:
[FONT=Arial]Dim y As Integer<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>[/FONT]
[FONT=Arial]Dim Maximum As String<o:p></o:p>[/FONT]
[FONT=Arial]Maximum = 0<o:p></o:p>[/FONT]
[FONT=Arial]<o:p> </o:p>[/FONT]
[FONT=Arial]For y = 1 To UBound(vtresult)<o:p></o:p>[/FONT]
[FONT=Arial] If vtresult(y, a, 0, 1) > Maximum Then<o:p></o:p>[/FONT]
[FONT=Arial] Maximum = vtresult(y, 0, 0, 1)<o:p></o:p>[/FONT]
[FONT=Arial] End If<o:p></o:p>[/FONT]
[FONT=Arial]Next<o:p></o:p>[/FONT]
[FONT=Arial]<o:p> </o:p>[/FONT]
[FONT=Arial]Range("K5") = Maximum[/FONT]
We have the above code, de a stands for the number of companies. We need to search the max for all companies and place this in a new array but we are stucked and don’t know how to procede!
-
#5
Basic algorithm for finding the max is like this:
Code:
Public Function FindMax(arr() As Variant, col As Long) As Long
Dim myMax As Long
Dim i As Long
For i = LBound(arr, 1) To UBound(arr, 1)
If arr(i, col) > myMax Then
myMax = arr(i, col)
FindMax = i
End If
Next i
End Function
FindMax(arr, 3) will return the index position of the largest number in column 3. You can then use that to return a corresponding value in a different column.
-
#6
Placing the max to an array seems to work now, but instead of stepping from a = a + 1 the process skips a = 1 and after de first loop it recognise a as 2 instead of 1. How is this possible and how can we fix this?
Rich (BB code):
Dim maxima() As Variant<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>
ReDim maxima(company)<o:p></o:p>
<o:p></o:p>
Dim y As Integer<o:p></o:p>
Dim Maximum As String<o:p></o:p>
<o:p></o:p>
For a = 0 To company<o:p></o:p>
For y = 0 To UBound(vtresult)<o:p></o:p>
If vtresult(y, a, 0, 1) >= Maximum Then<o:p></o:p>
Maximum = vtresult(y, a, 0, 1)<o:p></o:p>
End If<o:p></o:p>
Next<o:p></o:p>
maxima(a) = Maximum<o:p></o:p>
a = a + 1<o:p></o:p>
Maximum = 0<o:p></o:p>
Next
-
#7
Basic algorithm for finding the max is like this:
Code:
Public Function FindMax(arr() As Variant, col As Long) As Long Dim myMax As Long Dim i As Long For i = LBound(arr, 1) To UBound(arr, 1) If arr(i, col) > myMax Then myMax = arr(i, col) FindMax = i End If Next i End Function
FindMax(arr, 3) will return the index position of the largest number in column 3. You can then use that to return a corresponding value in a different column.
Can you also give the respective code for finding the minimum? Just switching > to < doesn’t do the trick
Held would be much appreciated.
Many thanks!
-
#8
Remove the a= a + 1 The loop already is incrementing a. HTH. Dave
-
#9
Remove the a= a + 1 The loop already is incrementing a. HTH. Dave
But there is no a=a+1 in the maximization function given in my quote. Are you referrin to the question asked above mine?
-
#10
Yes. U need to start a new thread. Dave
- Что такое 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. Вы также можете просмотреть наши другие предлагаемые статьи —
- Создание объекта коллекции в Excel VBA
- VBA IF Заявления | Шаблоны Excel
- Как использовать функцию сортировки Excel VBA?
- VBA While Loop (Примеры с шаблоном Excel)