Создаем свою первую функцию в Excel. Функция в vba


3.9. Встроенные функции языка VBA

Dim nResult As Integer

nMult1 = CInt(InputBox("Введите первое число: ")) nMult2 = CInt(InputBox("Введите второе число: ")) nResult = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

End Sub

4.Для того чтобы закомментировать код AutoNew(), выделите весь код этой процедуры (включаяPublic Sub AutoNew() иEnd Sub) и нажмите кнопкуComment Block на панели инструментовEdit.

3.9.1. Что такое встроенные функции

Вязыке программирования VBA предусмотрено несколько десятков встроенных функций. Они доступны в любой программе на языке VBA, при этом безразлично, в среде какого программного продукта мы находимся — Excel, Word, Access или, к примеру, AutoCAD. Используются они очень активно, и во многих ситуациях без них не обойтись. Профессиональные программисты применяют их совершенно автоматически, а обычным пользователям хочется посоветовать потратить несколько часов на знакомство с ними, потому что без знания этих функций эффективно работать в VBA не получится. Дополнительным аргументом в пользу их изучения является то, что практически идентичный набор функций есть в обычном Visual Basic и VBScript, а многие из этих функций с теми же названиями и синтаксисом встречаются и в других языках программирования — C++, Delphi, Java, JavaScript и т. п.

Всправке по VBA встроенные функции сгруппированы по буквам (рис. 3.2).

Многие слушатели на курсах задавали вопрос: а нет ли справки по этим функциям на русском языке? К сожалению, такой справки мне найти не удалось, поэтому попытаюсь привести краткую справку в этой книге. Далее будет рассказано про большинство активно используемых функций языка VBA (математические функции, такие как косинус или тангенс, которые в практической работе почти не используются, и финансовые функции мы рассматривать не будем). Полный синтаксис функций для экономии места приводиться не будет: главное — понимание, что делает каждая функция и в каких ситуациях ее можно использовать.

Функции в следующих разделах сгруппированы по своей функциональности. Если нужно найти информацию просто по имени функции, можно воспользоваться предметным указателем в конце книги.

Синтаксис и программные конструкции VBA

75

 

 

 

 

 

 

Рис. 3.2. Справка по встроенным функциям

3.9.2. Функции преобразования и проверки типов данных

В программах на VBA очень часто приходится преобразовывать значения из одного типа данных в другой. Приведу несколько типичных ситуаций, когда этим приходится заниматься:

преобразование из строкового значения в числовое при приеме значения от пользователя через InputBox();

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

преобразование значения из строкового в дату/время для применения специальных функций даты/времени.

Чаще всего для конвертации типов данных используются функции, имя которых складывается из префикса 'C' (от словаConvert) и имени типа данных. Перечень этих функций следующий:CBool(),CByte(),CCur(),CDate(),

CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Просмотреть, что в итоге получилось, можно при помощи функции TypeName(), которая возвращает имя используемого типа данных, например:

nVar1 = CInt(InputBox("Введите значение")) MsgBox TypeName(nVar1)

В данном случае эта функция вернет "Integer".

Кроме того, существует еще несколько полезных для конвертации функций.

Str() — позволяет перевести числовое значение в строковое. Делает почти то же самое, что иCStr(), но при этом вставляет пробел перед положительными числами.

Val() — "вытаскивает" из смеси цифр и букв только числовое значение. При этом функция читает данные слева направо и останавливается на первом нечисловом значении (допускается единственное нечисловое значение — точка, которая будет отделять целую часть от дробной). Очень удобно, когда у нас вперемежку с числовыми данными прописываются единицы измерения или валюта.

IsNumeric() иIsDate() — проверяют значения на соответствие, чтобы не возникло ошибок при конвертации. Для проверки на соответствие специальным значениям можно использовать функцииIsArray(),IsEmpty(),

IsError(), IsMissing(), IsNull()и IsObject(). Все эти функции возвраща-

ют True илиFalse в зависимости от результатов проверки переданного им значения.

Hex() иOct() — преобразовывают десятичные данные в строковое представление шестнадцатеричных и восьмеричных значений.

3.9.3. Строковые функции

Это наиболее часто используемые функции. Требуются они постоянно, и необходимо знать их очень хорошо.

Asc() — эта функция позволяет вернуть числовой код для переданного символа. Например,Asc("D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функциейChr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду. Например, такой код в Excel позволяет написать в ячейки с A1 по A20 последовательно буквы русского алфавита от A до У:

Dim n, nCharCode As Integer n = 1

nCharCode = Asc("А") Do While n <= 20

ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)

Синтаксис и программные конструкции VBA

77

n = n + 1

nCharCode = nCharCode + 1 Loop

Варианты этой функции — AscB() иAscW().AscB() возвращает только первый байт числового кода для символа, аAscW() возвращает код для символа в кодировке Unicode.

Chr() — возвращает символ по его числовому коду. Помимо того, что используется в паре с функциейAsc() (см. предыдущий пример), без нее не обойтись еще в одной ситуации: когда нужно вывести служебный символ. Например, нам нужно напечатать в Word значение"Газпром" (в кавычках). Кавычка — это служебный символ, и попытка использовать строку вида:

Selection.Text = ""Газпром""

приведет к синтаксической ошибке. А вот так все будет в порядке:

Selection.Text = Chr(34) & "Газпром" & Chr(34)

Есть варианты этой функции — ChrB() иChrW(). Работают аналогично таким же вариантам для функцииAsc().

InStr() иInStrRev() — одни из самых популярных функций. Позволяют обнаружить в теле строковой переменной последовательность символов и вернуть ее позицию. Если последовательность не обнаружена, то возвращается 0. ФункцияInStr() ищет с начала строки, аInStrRev() — с конца.

Left(),Right(),Mid() — позволяют взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.

Len() — возвращает число символов в строке (длину строки). Часто используется с циклами, операциями замены и т. п.

LCase() иUCase() — переводят строку в нижний и верхний регистры соответственно. Часто используются для подготовки значения к сравнению, когда регистр не важен (фамилии, названия фирм, городов и т. п.).

LSet() иRSet() — заполняют одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.

LTrim(),RTrim(),Trim() — убирают пробелы соответственно слева, справа или и слева, и справа.

Replace() — заменяет в строке одну последовательность символов на другую.

Space() иString() — возвращают строку из указанного вами количества пробелов или символов соответственно. Обычно используются для форма-

studfiles.net

Функции в vba

В VBAиспользуются следующие виды функций:

- математические встроенные функции;

- математические функции, не представленные в VBA;

- функции форматирования данных;

- функции преобразования типов

Математические встроенные функции

Функция

Возвращаемое значение

Abs (x)

- абсолютная величина числа

Atn (x)

arctg(x) – арктангенс от значения параметра, заданного в радианах

Sin (x)

sin(x) – возвращает синус угла от значения параметра, заданного в радианах

Cos (x)

cos(x) – косинус указанного в радианах угла

Tan (x)

tg(x) – возвращает тангенс угла от значения параметра, заданного в радианах

Exp (x)

ex– возвращает числоe, возведенное в указанную степень, где е – основание натурального логарифма

Log (x)

ln(x) – возвращает натуральный логарифм от значения числового выражения

Sqr (x)

- возвращает квадратный корень числового выражения

Rnd (x)

Случайное число из интервала [0,1). Перед вызовом функции надо использовать оператор Randomize(рандомизации) – запуск генератора псевдослучайных чисел)

Sgn (x)

Возвращает +1, если значение параметра положительно,

-1, если отрицательное,

0, если 0

Fix (x)

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

Int(x)

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

Математические функции, не представленные в vba

Функция

Возвращаемое значение

Log(X)/Log(10)

lg(х) – возвращает десятичный логарифм от значения числового выражения

Atn

arcsin(x) – возвращает арксинус угла от значения параметра, заданного в радианах

Atn

arccos(x) – возвращает арккосинус угла от значения параметра, заданного в радианах

Cos (x)/Sin (x)

ctg(x) - возвращает котангенс угла от значения параметра, заданного в радианах

Значение числа π

Pi = 4 * Atn (1)

Функция форматирования данных

Для того чтобы представить выражение отформатированным в специфицированном формате, необходимо воспользоваться функцией Format. Она возвращает значение типаVariant(String), содержащее выражение, отформатированное согласно указанным спецификациям.

Синтаксис:

Format(выражение [ , «Имя формата (или символ формата)»])

Именованные числовые форматы

Имя формата

Описание

GeneralNumber

Число без разделителя тысяч

Currency

Отображает две цифры справа от десятичной точки

Fixed

Отображает одну цифру слева и две справа от десятичной точки

Standard

Отображает одну цифру слева и две справа от десятичной точки и выводит разделитель тысяч

Percent

Отображает число в виде процентов и выводит две цифры справа от десятичной точки

Scientific

Использует формат с плавающей десятичной точкой

Yes/No

Отображает No, если число равно 0, иYes– в противном случае

True/False

Отображает False, если число равно 0, иTrue– в противном случае

On/Off

Отображает Off, если число равно 0, иOn– в противном случае

studfiles.net

Пользовательские функции в VBA для Excel

Функция представляет собой группу повторно используемого кода , который может быть вызван в любом месте в вашей программе. Это устраняет необходимость повторного написания одного и того же кода. Это позволяет программистам разделить большую программу на множество небольших и управляемых функций.

 

Помимо встроенных функций, VBA также позволяет писать пользовательские функции. В этой статье вы узнаете, как писать свои собственные функции в VBA.

Определение функции

Функция VBA может иметь необязательный оператор return. Это необходимо, если вы хотите вернуть значение из функции.

Например, вы можете передать два числа в функции, а затем вы можете ожидать от функции возврата своего умножения в вашу вызывающую программу.

Примечание . Функция может возвращать несколько значений, разделенных запятой, как массив, назначенный самому имени функции.

Прежде чем использовать функцию, нам нужно определить эту конкретную функцию. Наиболее распространенным способом определения функции в VBA является использование ключевого слова Function , за которым следует уникальное имя функции, и оно может содержать или не содержать список параметров и оператор с ключевым словом End Function , который указывает конец функции. Ниже приведен базовый синтаксис.

Синтаксис

Добавьте кнопку и добавьте следующую функцию.

Function Functionname(parameter-list) statement 1 statement 2 statement 3 ....... statement n End Function

Пример

Добавьте следующую функцию, которая возвращает область. Обратите внимание, что значение / значения могут быть возвращены с именем самой функции.

Function find_area(Length As Double, Optional Width As Variant) If IsMissing(Width) Then find_area = Length * Length Else find_area = Length * Width End If End Function

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

Чтобы вызвать функцию, вызовите функцию, используя имя функции, как показано на следующем снимке экрана.

Вывод области, как показано ниже, будет отображаться пользователю.

 

 С уважением, авторы сайта Компьютерапия

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

maxfad.ru

Создаем свою первую функцию в Excel

Что такое функция в VBA?

Функция написанная на VBA - это код, который выполняет вычисления и возвращает значение (или массив значений). Создав функцию вы можете использовать ее тремя способами:

  1. В качестве формулы на листе, где она может принимать аргументы и возвращать значения.
  2. Как часть вашей подпрограммы VBA. В процедуре Sub или внутри других функций.
  3. В правилах условного форматирования.

Хотя Excel уже содержит более 450 встроенных функций, но их тоже периодически не хватает. Иногда встроенные функции не могут выполнить то, что вы хотите сделать. Иногда для достижения результата необходимо создать огромную и сложную формулу, которая не понятна окружающим. В этом случае вы можете создать пользовательскую функцию, которую легко читать и использовать.

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

Встроенными функциями можете пользоваться не только вы, но и ваши коллеги. Написанные вами функции будут появляться наряду с другими в диалоговом окне Мастер функций. Возможно вас пугает процесс создания функций, но спешу вас уверить, что это достаточно просто.

В чем отличие процедуры (Sub) от функции (Function)?

Основное отличие в том, что процедура (sub) используется для выполнения набора команд, и не призвана в отличие от функции (function) возвращать  значение (или массив значений).

Для демонстрации приведем пример. Например есть ряд чисел от 1 до 100 и необходимо отделить четные от нечетных.

С помощью процедуры (sub) вы можете, к примеру, пройтись по ячейкам и выделить нечетные с помощью заливки. А функцию можно использовать в соседнем столбце и она вернет ИСТИНА или ЛОЖЬ в зависимости от того четное значение или нет. Т.е. вы не сможете изменить цвет заливки с помощью функции на листе.   

Создание простой пользовательской функции в VBA

Давайте создадим простую пользовательскую функцию на VBA и посмотрим как там все работает.

Ниже представлен код функции, которая из текста оставляет только цифры, отбрасывая буквенные значения.

Function Цифры(Текст As String) As Long Dim i As Long Dim result As String For i = 1 To Len(Текст) If IsNumeric(Mid(Текст, i, 1)) Then result = result & Mid(Текст, i, 1) Next Цифры = CLng(result) End Function

Чтобы у вас все заработало, необходимо вставить данный код в модуль книги. Если вы не знаете как это сделать, то начните со статьи Как записать макрос в Excel.

Теперь посмотрим как функция работает, попробуем использовать ее на листе:

Прежде чем разбирать саму функцию отметим 2 приятных момента, которые появились после создания:

  • Она стала доступна, как и любая другая встроенная функция (как создать скрытую функцию, расскажем далее).
  • Когда вы ввели знак "=" и начинаете вводить имя функции, то Excel выводит все совпадения и показывает не только встроенные функции, но и пользовательские.

Разбираем функцию пошагово

Теперь давайте глубоко погрузимся и посмотрим, как эта функция создавалась. Начинается функция со строки

Function Цифры(Текст As String) As Long

Слово Function говорит о начале функции, далее идет ее название, в нашем случае Цифры.

  • Имя функции не может содержать пробелов. Кроме того, вы не можете назвать функцию, если она сталкивается с именем ссылки на ячейку. Например, вы не можете назвать функцию ABC123, так как это имя также относится к ячейке в листе Excel.
  • Вы не должны указывать на свою функцию то же имя, что и у существующей функции. Если вы это сделаете, Excel будет отдавать предпочтение встроенной функции.
  • Вы можете использовать символ подчеркивания, если хотите разделить слова. Например, Сумма_Прописью является допустимым именем.

После названия в круглых скобках  описываются аргументы функции. По аналогии со встроенными функциями Excel. В нашем случае используется единственный аргумент Текст. После названия аргумента мы указали As String, это означает, что наш аргумент - текстовое значение или ссылка на ячейку, содержащее текстовое значение. Если вы не укажете тип данных, VBA рассмотрит его как Variant (что означает, что вы можете использовать любой тип данных, VBA его определит самостоятельно).

Последняя часть первой строки As Long задает тип данных, которая возвращает функция. В нашем случае функция будет возвращать целые значения. Это также не обязательно.

Вторая и третья строка функции объявляет дополнительные внутренние переменные, которые мы будем использовать.

Dim i As Long Dim result As String

Переменную i мы буем использовать для перебора символов. А переменную result для хранения промежуточного результата функции.

Задача функции - пройти по всем символам переменной Текст и сохранить только те, что являются цифрами. Поэтому начнем цикл с 1 и до последнего символа.

For i = 1 To Len(Текст)

Len - функция, которая определяет количество символов.

Основная строка функции - это проверка является ли очередной символ текста цифрой и если да - то сохранение его в переменной result

If IsNumeric(Mid(Текст, i, 1)) Then result = result & Mid(Текст, i, 1)

Для этого нам потребуется функция IsNumeric - она возвращает True если текст - число и False в противном случае.

Функция Mid берет из аргумента Текст i-ый символ (значение 1, указывает что функция Mid берет только 1 символ)/

Функция Next - закрывает цикл For тут все понятно.

Цифры = CLng(result)

Этой строкой мы преобразовываем текстовую переменную result, которая содержит все цифры аргумента Текст, в числовое значение. И говорим какой результат должна вывести наша функция Цифры.

Последняя строка кода - End Function. Это обязательная строка кода, которая сообщает VBA, что код функции заканчивается здесь.

В приведенном выше коде описаны различные части типичной пользовательской функции, созданной в VBA. В следующих статьях мы более подробно разберем эти элементы, а также рассмотрим различные способы выполнения функции VBA в Excel.

Скачать

micro-solution.ru

Лекция 7. Процедуры и функции в vba

  1. Процедуры, функции и макросы

Использование языка VBA отличается от использования других языков, в частности, языка Паскаль. На языке Паскаль обычно пишутся программы, которые преобразуются в исполняемый файл и запускаются по требованию пользователя. Программа на языке Паскаль соответствует приложению MicrosoftExcelв целом. Язык VBA (VisualBasicforApplication) предназначен для написания кода, работающего внутри приложенияMicrosoftExcel. Поэтому код на языке VBA оформляется не в виде самодостаточной программы, а в видеподпрограмм.

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

Можно также сказать, что подпрограмма – это логическиобъединённый набор действий, оформленный по правилам языка программирования.

Подпрограммы делятся на процедуры и функции.

Процедура– это подпрограмма, которая выполняет некоторые действия, но не возвращает никакого значения.

Функция– это подпрограмма, которая возвращает значение.

В офисных пакета используется также термин «макрос». Макрос– это процедура, записанная с помощью специального средства, встроенного в офисное приложение.

  1. Вставка процедур и функций

Процедуры, функции и макросы хранятся в модулях. Модуль– это специальная часть рабочей книги, предназначенная для хранения процедур и функций. До написания процедур и функций в рабочую книгу необходимо вставить модуль с помощью пункта менюVBEInsert  Module.

Затем можно вставить процедуру или функцию с помощью пункта меню VBEInsert  Procedure…. В появившемся диалоговом окне необходимо указать имя подпрограммы и тип подпрограммы – процедура (Sub) или функция (Function). Остальные параметры можно оставить без изменения. Однако список параметров и тип результата функции придётся вписывать вручную. В принципе, использовать пункт меню вставки подпрограммы и соответствующий диалог совсем не обязательно. Можно просто набрать в тексте модуля строкуPublic Sub …илиPublic Function …, и после нажатия клавишиВводредактор VBA вставит завершающую строкуEnd SubилиEnd Functionи отделит новую подпрограмму чертой.

  1. Процедуры

    1. Определение процедуры

Как было сказано, процедура– это подпрограмма, которая выполняет некоторые действия, но не возвращает никакого значения. Процедура имеет следующий синтаксис:

Sub<имя> (<список параметров>)

<инструкции>

[Exit Sub]

<инструкции>

End Sub

Первая строка, содержащая имя процедуры и список параметров, называется заголовкомпроцедуры. Имя процедуры должно бытьидентификатором. Принято давать процедурам значи­мые имена – в идеальном случае имя процедуры должно описывать, что делает эта процедура.

Список параметров определяет параметры, которые надо передать в процедуру. Эти параметры будут управлять поведением процедуры. Список параметров может быть пустым.

Public Sub CountOfSheets()

MsgBox "Всего листов - " & Sheets.Count & vbNewLine & _

"Рабочих листов - " & Worksheets.Count & vbNewLine & _

"Листов диаграмм - " & Charts.Count

End Sub

Public Sub ChangeNegatives()

Dim cell As Range, n As Integer

n = 0

For Each cell In Selection

If cell.Value < 0 Then

cell.Value = -cell.Value

n = n + 1

End If

Next cell

MsgBox "Обработано ячеек - " & Selection.Count & vbNewLine & "Изменено ячеек - " & n

End Sub

studfiles.net

3.3. Процедуры и функции vba Описание процедур и функций vba

Процедуры VBA бывают двух типов:

• процедуры обработки событий;

• общие процедуры.

Имя процедуры обработки события, связанного с элементом управления, состоит из имени элемента управления, символа подчеркивания и имени события, например Закрытъ_ click – процедура обработки нажатия кнопки Закрыть в форме.

Общие процедуры VBA могут храниться в любом типе модулей VBA, так как они не связаны с конкретным объектом. Они выполняются только тогда, когда явно вызываются другими процедурами. Обычно эти процедуры реализуют какие-то общие действия, которые могут вызываться разными процедурами обработки событий.

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

В свою очередь, процедуры VBA делятся на подпрограммы и функции. Они являются фрагментами программного кода, который заключается между операторами Sub и End Sub или между FunctioNи End FunctioNсоответственно. Процедуры-подпрограммы выполняют действия, но не возвращают значение, поэтому они не могут быть использованы в выражениях. Процедуры обработки событий представляют собой процедуры-подпрограммы. Процедуры-функции всегда возвращают значение, поэтому они обычно используются в выражениях. Общие процедуры могут быть как процедурами-подпрограммами, так и процедурами-функциями.

Синтаксис процедуры-подпрограммы VBA:

Sub <имяПроцедуры> (<аргумент1>, <аргумент2>, …) <оператор1>

<оператор2>

End Sub

Список аргументов у процедуры может отсутствовать и может содержать необязательные аргументы.

Объявление каждого аргумента имеет следующий синтаксис:

<имяАргумента> [As <типДанных> [=<значениеПоУмолчанию>]],

где <имяАргумента> – идентификатор, составленный согласно правилам создания имен и представляющий аргумент в теле процедуры;

<типДанных> – это либо встроенный тип данных, либо тип, определенный пользователем. Тип данных аргумента может не указываться, и тогда считается, что он имеет тип Variant. Аргументом процедуры может быть и массив. Тогда после имени аргумента должны стоять круглые скобки.

Для необязательного аргумента может быть указано <значение по умолчанию>, которое будет использоваться, если этот аргумент будет опущен. Если значение по умолчанию не указано, необязательный аргумент инициируется точно так же, как переменная, т. е. числовой аргумент – в 0, строковый – в строку нулевой длины и т. д.

Описание функции:

FunctioN<имяФункции> (<аргумент1>, <аргумент2>, …) [As

<типЗначение>]

<оператор1>

<оператор2>

<имяФункции> = <возвращаемоеЗначение>

End Function

Кроме того что ключевое слово Sub заменяется на Function, в теле функции обязательно присутствует оператор присваивания имени функции какого-нибудь значения. Это значение и возвращается функцией. В заголовке функции может быть описан тип возвращаемого значения. Если этот тип не указан, функция возвращает значение Variant.

Рассмотрим два примера объявления подпрограмм и функций.

studfiles.net

Решение: Функция в VBA - VBA

помогите найти ошибкуz1.txt

textual Option Base 1 Option Explicit Dim n_min, n_max 'n_min и n_max - индексы, общие для всего модуля!   Sub Laba_SH() Dim i As Integer Dim Нечто  'Нечто - для вызова функции (функцию надо чему-то присваивать) Dim a(20) ' As Integer ("контрольный" Join работает с типом Variant) Dim b(20) ' As Integer Dim a_min, b_max 'соответственно минимум 1-го массива и максимум 2-го         For i = 1 To 20         a(i) = Worksheets(1).Cells(i, 2).Value '1 вместо "Sheet 1"        b(i) = Worksheets(1).Cells(i, 5).Value '1 вместо "Sheet 1"    Next i         MsgBox "Массив a: " & Join(a) & vbCr & "Массив b: " & Join(b)         a_min = a(1)     b_max = b(1)     n_min = 1    'индекс минимума 1-го массива (начальное значение, если Option Base 1)    n_max = 1    'индекс максимума 2-го массива         For i = 1 To 20         If a(i) < a_min Then             a_min = a(i)             n_min = i         End If                 If b(i) > b_max Then             b_max = b(i)             n_max = i         End If     Next i         Нечто = Замена(a(n_min), b(n_max)) ' так можно ВЫЗВАТЬ функцию         Cells(2, 7) = "Минимальное значение массива а = " & a_min     Cells(3, 7) = "Его индекс был (до обмена) а_min = " & n_min     Cells(5, 7) = "Максимальное значение массива b = " & b_max     Cells(6, 7) = "Его индекс был (до обмена) b_max = " & n_max     Cells(9, 7) = "Теперь элемент в 1-м массиве a(" & n_min & ") = " & b(n_max)     Cells(10, 7) = "Теперь элемент вo 2-м массиве b(" & n_max & ") = " & a(n_min) End Sub     Function Замена(ByVal a, ByVal b) '(она ничего не возвращает, просто обменивает 2 ячейки)    Cells(n_min, 2) = b 'в колонку с 1-м массивом ставим максимум 2-го    Cells(n_max, 5) = a 'в колонку со 2-м массивом ставим минимум 1-го End Function

studassistent.ru