Аналоги функций excel в vba

 

Существуют ли справочники  соответствий функций Экселя и VBA? Т.е. справочник в котором, зная функцию Экселя, можно  быстро найти ее аналог в VBA?    

  Если да, то где его можно посмотреть?

 

VBA имеет свои функции. Некоторые из них похожи на функции рабочего листа Excel.  

  Но в VBA можно использывать и функции листа Excel. Для этого надо написать слово Worksheetfunction. (точка обязательна). Поставив точку в конце этого слова у вас выскочит список функций рабочего листа.  

  Как пример  

  Sub Макрос1()  
   MsgBox WorksheetFunction.Sum(7, 3, 5)  
End Sub  

  P.S. Список соответсвий русскому и английскому названию функций можете посмотреть в приложенном файле

 

NIKOLASCS

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

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

А можно выложить файлик без пароля на VBA. Очень заинтересовала возможность сортировки на листе.

 

Это не причуда ув. Pavel55, пароль на VBA мелкомягкие поставили :)  
Сами можете убедится найдя его у себя на диске. Путь такой:  
C:Program FilesMicrosoft OfficeOFFICE111049FUNCS.XLS  
для 2003-го офиса.

 

Лузер™, наверное, в Вашем сообщение вы обращались к NIKOLASCS, а не ко мне )

 

Это было не обращение, я его обычно занятыми выделяю. Это сокращение. Правильно читать так: «… уважаемого Pavel55 …»  
:-)

 

аа )))  

  P.S. кто сломает пароль на проект VBA из моего файла? )  

  P.P.S. это не призыв, это слова вслух )

 

Если что сломать, так это мы любим :)  
Естественно, цифровая подпись мелкомягких на проект пропала.

 

{quote}{login=Pavel55}{date=11.04.2008 12:07}{thema=}{post}кто сломает пароль на проект VBA из моего файла? {/post}{/quote}  
3FA2

 

PAVEL55! На форуме вычитал о использовании функциий листа Excel в VBA. Для этого надо написать слово Worksheetfunction. (точка обязательна). Поставив точку в конце этого слова у вас выскочит список функций рабочего листа.  
Все так и получается.  
Функция листа Отбросить «ОТБР()» для русской версии или «TRUNC()» для английской версии отказывается работать.  
Прикладываю файл:ФУНКЦИЯ.xls  
Возможно ли это выполнить?

 

Используйте VBA функцию Fix, и писать меньше :)  
Вместо ЦЕЛОЕ — VBA функцию Int.

 

Не все функции рабочего листа поддерживаются в VBA  
Но есть и более универсальное средство  

  Попробуйте добавить в Вашу процедуру:  
MsgBox Application.Evaluate(Range(«D3»).Formula) или  
MsgBox Application.ActiveSheet.Evaluate(Range(«D3»).Formula)  

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

 

При работе с Evaluate надо быть осторожным — возможны ошибки, связанные с локализацией (стоит попробовать выражения в английском и русском вариантах)  

  Лучший способ — использовать Evaluate только в случае крайней необходимости, а вместо непоодерживаемых функций применять их Basic-аналоги (их потому и нет, что существуют аналоги)

 

БОРИС

Гость

#14

28.03.2012 13:27:15

Спасибо! Буду пробовать!

0 / 0 / 0

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

Сообщений: 25

1

12.06.2012, 12:59. Показов 3605. Ответов 3


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

Здравствуйет всем!
Вопрос такого плана: существуют ли аналоги всех функций, которые записываются в ячейках образуя формулы. Вопрос может показаться бестолковым, но в книжках которые мне попадаются я не нахожу ответа. В Справке речь идет только о части функций. Если есть у кого в электронном виде сбросьте на igorshostak@rambler.ru. Буду очень благодарен.
Спасибо.



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

12.06.2012, 12:59

3

0 / 0 / 0

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

Сообщений: 265

12.06.2012, 16:44

2

А про макрорекордер в книжках ничего не пишут?



0



5 / 5 / 3

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

Сообщений: 1,119

12.06.2012, 18:06

3

Nevsky,

Ya v spravke nashel takuyu temu:

«Worksheet functions listed by category»

Ne sovsem ponyatna neobxodimost’ znaniya suschestvovaniya VBA analogov vsex worksheet funkcij. Штурмaн upomyanul макрорекордер. Ya ego ponimayu: takim obrazom mrosto viyavlyaetsya sintaksis ispol’zovaniya worksheet funkcij v VBA i takim obrazom kak bi apriori snimaetsya neobxodimost’ ispol’zovaniya VBA metodov, dostigayuschix shozhix s worksheet funkciyami rezul’tatov. Odnako togda kak bi i VBA metodi ne nuzhni?

K sozhaleniyu, takoj pryamolinejnij spisok funkzional’nix sootvetstvij mne neizvetsen.

vladconn



0



1 / 1 / 0

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

Сообщений: 80

12.06.2012, 18:44

4

Если в Help редактора VBA ввести запрос на WorksheetFunction, то в появившейся справке можно найти ссылку на List of Worksheet Functions Available to Visual Basic. В этом списке представлены все функции в алфавитном порядке. Но, как отмечалось выше, чтобы определить доступ к конкретной функции желательно использовать макрорекодер.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

12.06.2012, 18:44

Помогаю со студенческими работами здесь

Формулы или макросы в EXEL
Здравствуйте, очень нужна помощь, ни как не могу сообразить как написать формулу. Документ разбит…

VBA Exel
Прошу помочь в корректировке кода, сам сколько не пытался не получается требуемый вариант:

Microsoft Exel VBA
Подскажите как сделать все одним циклом?
Private Sub CommandButton1_Click()
s = 0
For i = 3 To…

VBA Exel Сравнить даты
Добрый день.
Есть задача такого типа
нужно искать совпания в датах. Есть книга в которой каждий…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

Содержание

  1. Аналог функций excel vba
  2. Использование функций листов Excel в Visual Basic
  3. Вызов функции листа из Visual Basic
  4. Вставка функции листа в ячейку
  5. Пример
  6. См. также
  7. Поддержка и обратная связь
  8. Аналог функций excel vba
  9. Список функций листов, доступных для Visual Basic
  10. Поддержка и обратная связь
  11. Функции VBA и массивы значений
  12. Создание функций с бесконечным количеством аргументов
  13. Создание функций с неопределенным количеством аргументов
  14. Создание функции, возвращающих массив значений

Аналог функций excel vba

ВПР = Application.WorksheetFunction.VLook up
ГПР = Application.WorksheetFunction.HLook up
ПОИСКПОЗ = Application.WorksheetFunction.Match

Пройдите по этой ссылке,
пролистайте страницу до конца вниз, и скачайте Справочник по функциям MS Excel от Microsoft Office.
Вот прямая ссылка на скачивание файла
В этом файле описаны аналоги встроенных функций Excel для работы из VBA

Во-вторых что значит Like, и чем он отличается от простого равно?

Выражение c.Value Like «*MS*» будет истинно, если c.Value содержит текст MS
(например, 123MSasd, Mspoi, и т.д.)

Выражение c.Value = «*MS*» будет истинно, только если c.Value состоит из 4-х указанных символов *MS*

И ещё: на сайте http://msoffice.nm.ru/faq/macros.htm есть много полезной информации по работе с VBA Excel

А самой полной и полезной литературой по VBA является файл справки:
C:Program FilesMicrosoft OfficeOFFICE111049VBAXL10.CHM

——— готовое решение для замены формулы ВПР (VLOOKUP) —————

Надстройка LOOKUP предназначена для сравнения и подстановки значений в таблицах Excel.

Если вам надо сравнить 2 таблицы (по одному столбцу, или по нескольким),
и для совпадающих строк скопировать значения выбранных столбцов из одной таблицы в другую,
надстройка «Lookup» поможет сделать это нажатием одной кнопки.

В настройках программы можно задать:

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

Скачать надстройку для сравнения таблиц Excel и копирования данных из одинаковых строк

Источник

Использование функций листов Excel в Visual Basic

В операторах Visual Basic можно использовать большинство функций листов Microsoft Excel. Список функций листов, которые можно использовать, см. в статье Список функций листов, доступных для Visual Basic.

Некоторые функции листов не используются в Visual Basic. Например, не требуется функция Concatenate, так как в Visual Basic можно использовать оператор & для объединения нескольких текстовых значений.

Вызов функции листа из Visual Basic

В Visual Basic функции листов Excel доступны через объект WorksheetFunction.

В следующей процедуре Sub используется функция листа Min для определения наименьшего значения в диапазоне ячеек. Сначала переменная myRange объявляется как объект Range, а затем ей присваивается диапазон A1:C10 на листе Sheet1. Другой переменной, answer , назначается результат применения функции Min к myRange . В конце значение answer отображается в окне сообщения.

Если вы используете функцию листа, для которой требуется ссылка на диапазон в качестве аргумента, необходимо указать объект Range. Например, можно использовать функцию листа Match (ПОИСКПОЗ) для поиска диапазона ячеек. В ячейке листа потребовалось бы ввести формулу, например =ПОИСКПОЗ (9;A1:A10;0). Однако в процедуре Visual Basic необходимо указать объект Range, чтобы получить такой же результат.

Функции Visual Basic не используют квалификатор WorksheetFunction. Функция может иметь такое же имя, что и функция Microsoft Excel, но работать по-другому. Например, Application.WorksheetFunction.Log и Log возвращают разные значения.

Вставка функции листа в ячейку

Чтобы вставить функцию листа в ячейку, укажите функцию в качестве значения свойства Formula соответствующего объекта Range. В следующем примере функция листа RAND (создающая случайное число), назначается свойству Formula диапазона A1:B3 на листе Sheet1 в активной книге.

Пример

В этом примере используется функция листа Pmt, чтобы рассчитать кредитный платеж по ипотечной ссуде. Обратите внимание, что в этом примере используется метод InputBox вместо функции InputBox, чтобы метод мог выполнять проверку типов. Операторы Static приводят к тому, что Visual Basic сохраняет значения трех переменных; они отображаются как значения по умолчанию при следующем запуске программы.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Аналог функций excel vba

Задача: есть таблица значений «Смежники.таблица», в которой 5 столбцов. Есть переменная в которой есть значение из первого столбца. Нужно получить значение любого столбца из строки в которой находиться значение.

В экселе решаю задачу так:
«=IF(ISNA(VLOOKUP(I9,Смежники.табли ца,2,FALSE)),»111″,VLOOKUP(I9,Смежн ики.таблица,5,FALSE))»

В VBA написал так:
WorksheetFunction.IF(WorksheetFunct ion.IsNA(WorksheetFunction.VLookup( смежники(n, i), «смежники.таблица», 2, False)), «111», WorksheetFunction.VLookup(смежники( n, i), «смежники.таблица», 5, False))

Вместо ячейки «I9» значения нужно брать из массива «смежники».

При попытке выполнить вылетает матерная фраза «Невозможно получить свойство VLookup класса WorksheetFunction». Хотя основную часть я «подсмотрел» у самого экселя.

Как быть? Куда рыть?

А что это такое — смежники(n, i)?

Скорее всего эта функция возвращает значение не того типа, которое требуется функции VLookup в качестве параметра.

Или попробуйте заменить «смежники.таблица» на [смежники.таблица]

А что это такое — смежники(n, i)?

Скорее всего эта функция возвращает значение не того типа, которое требуется функции VLookup в качестве параметра.

Источник

Список функций листов, доступных для Visual Basic

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

Дополнительные сведения о конкретной функции см. в разделе Функции Excel (по категориям).

  • НАКОПДОХОД
  • НАКОПДОХОДПОГАШ
  • ACOS
  • ACOSH
  • АГРЕГАТ
  • АМОРУМ
  • АМОРУВ
  • And
  • Приложение
  • Asc
  • ASIN
  • ASINH
  • ATAN2
  • ATANH
  • СРОТКЛ
  • СРЗНАЧ
  • СРЗНАЧЕСЛИ
  • СРЗНАЧЕСЛИМН
  • БАТТЕКСТ
  • БЕССЕЛЬ
  • БЕССЕЛЬ.J
  • БЕССЕЛЬ.K
  • БЕССЕЛЬ.Y
  • БЕТАРАСП
  • БЕТАОБР
  • Bin2Dec
  • Bin2Hex
  • Bin2Oct
  • Binom_Dist
  • Binom_Inv
  • БИНОМРАСП
  • Ceiling
  • Ceiling_Precise
  • ХИ2РАСП
  • ХИ2ОБР
  • ChiSq_Dist
  • ChiSq_Dist_RT
  • ChiSq_Inv
  • ChiSq_Inv_RT
  • ChiSq_Test
  • ХИ2ТЕСТ
  • ВЫБОР
  • Чистый
  • ЧИСЛКОМБ
  • КОМПЛЕКСН
  • Confidence
  • Confidence_Norm
  • Confidence_T
  • Преобразовать
  • КОРРЕЛ
  • COSH
  • Count
  • СЧЁТЗ
  • СЧИТАТЬПУСТОТЫ
  • СЧЁТЕСЛИ
  • СЧЁТЕСЛИМН
  • ДНЕЙКУПОНДО
  • ДНЕЙКУПОН
  • ДНЕЙКУПОНПОСЛЕ
  • ДАТАКУПОНПОСЛЕ
  • ЧИСЛКУПОН
  • ДАТАКУПОНДО
  • КОВАР
  • Covariance_P
  • Covariance_S
  • КРИТБИНОМ
  • ОБЩПЛАТ
  • ОБЩДОХОД
  • ДСРЗНАЧ
  • ДНЕЙ360
  • ФУО
  • БДЦС
  • БСЧЁТ
  • БСЧЁТА
  • ДДОБ
  • ДЕС.В.ДВ
  • ДЕС.В.ШЕСТН
  • ДЕС.В.ВОСЬМ
  • ГРАДУСЫ
  • ДЕЛЬТА
  • КВАДРОТКЛ
  • БИЗВЛЕЧЬ
  • СКИДКА
  • ДМАКС
  • ДМИН
  • РУБЛЬ
  • РУБЛЬ.ДЕС
  • РУБЛЬ.ДРОБЬ
  • БДПРОИЗВЕД
  • ДСТАНДОТКЛ
  • ДСТАНДОТКЛП
  • БДСУММ
  • Duration (Длительность)
  • БДДИСП
  • БДДИСПП
  • ДАТАМЕС
  • Эффект
  • КОНМЕСЯЦА
  • ФОШ
  • Erf_Precise
  • ДФОШ
  • ЧЁТН
  • Expon_Dist
  • ЭКСПРАСП
  • F_Dist
  • F_Dist_RT
  • F_Inv
  • F_Inv_RT
  • F_Test
  • ФАКТР
  • ДВФАКТР
  • FРАСП
  • Поиск
  • НАЙТИБ
  • FРАСПОБР
  • ФИШЕР
  • ФИШЕРОБР
  • ИСПРАВЛЕНО
  • Floor
  • ПРЕДСКАЗ
  • Частота
  • ФТЕСТ
  • БС
  • БЗРАСПИС
  • Gamma_Dist
  • Gamma_Inv
  • ГАММАРАСП
  • ГАММАОБР
  • ГАММАНЛОГ
  • GammaLn_Precise
  • НОД
  • СРГЕОМ
  • ПОРОГ
  • РОСТ
  • СРГАРМ
  • ШЕСТН.В.ДВ
  • ШЕСТН.В.ДЕС
  • ШЕСТН.В.ВОСЬМ
  • ГПР
  • HypGeom_Dist
  • ГИПЕРГЕОМЕТ
  • ЕСЛИОШИБКА
  • МНИМ.
  • МНИМ.ЧАСТЬ
  • МНИМ.АРГУМЕНТ
  • МНИМ.СОПРЯЖ
  • МНИМ.COS
  • МНИМ.ДЕЛ
  • МНИМ.EXP
  • МНИМ.LN
  • МНИМ.LOG10
  • МНИМ.LOG2
  • МНИМ.СТЕПЕНЬ
  • МНИМ.ПРОИЗВЕД
  • МНИМ.ВЕЩ
  • МНИМ.SIN
  • МНИМ.КОРЕНЬ
  • МНИМ.РАЗН
  • МНИМ.СУММ
  • Index
  • Intercept
  • ИНОРМА
  • ПРПЛТ
  • ВСД
  • ЕОШ
  • IsError
  • ЕЧЁТН
  • ЕЛОГИЧ
  • ЕНД
  • ЕНЕТЕКСТ
  • ЕЧИСЛО
  • ЕНЕЧЁТ
  • ПРОЦПЛАТ
  • ЕТЕКСТ
  • ЭКСЦЕСС
  • НАИБОЛЬШИЙ
  • НОК
  • ЛИНЕЙН
  • LN
  • Log
  • Log10
  • ЛГРФПРИБЛ
  • ЛОГНОРМОБР
  • LogNorm_Dist
  • LogNorm_Inv
  • ЛОГНОРМРАСП
  • ПРОСМОТР
  • ПОИСКПОЗ
  • Max
  • МОПРЕД
  • МДЛИТ
  • МЕДИАНА
  • Min
  • МОБР
  • МВСД
  • МУМНОЖ
  • Режим
  • Mode_Mult
  • Mode_Sngl
  • ОКРУГЛТ
  • МУЛЬТИНОМ
  • NegBinom_Dist
  • ОТРБИНОМРАСП
  • ЧИСТРАБДНИ
  • НОМИНАЛ
  • Norm_Dist
  • Norm_Inv
  • Norm_S_Dist
  • Norm_S_Inv
  • НОРМРАСП
  • НОРМОБР
  • НОРМСТРАСП
  • НОРМСТОБР
  • NPer
  • ЧПС
  • ВОСЬМ.В.ДВ
  • ВОСЬМ.В.ДЕС
  • ВОСЬМ.В.ШЕСТН
  • НЕЧЁТ
  • ЦЕНАПЕРВНЕРЕГ
  • ДОХОДПЕРВНЕРЕГ
  • ЦЕНАПОСЛНЕРЕГ
  • ДОХОДПОСЛНЕРЕГ
  • Или
  • ПИРСОН
  • ПЕРСЕНТИЛЬ
  • Percentile_Exc
  • Percentile_Inc
  • ПРОЦЕНТРАНГ
  • PercentRank_Exc
  • PercentRank_Inc
  • ПЕРЕСТ
  • Phonetic
  • Pi
  • Плт
  • ПУАССОН
  • Poisson_Dist
  • Power
  • ОСПЛТ
  • ЦЕНА
  • ЦЕНАСКИДКА
  • ЦЕНАПОГАШ
  • ВЕРОЯТНОСТЬ
  • Продукт
  • ПРОПНАЧ
  • ПС
  • КВАРТИЛЬ
  • Quartile_Exc
  • Quartile_Inc
  • ЧАСТНОЕ
  • РАДИАНЫ
  • СЛУЧМЕЖДУ
  • РАНГ
  • Rank_Avg
  • Rank_Eq
  • Ставка
  • ПОЛУЧЕНО
  • Замена
  • ЗАМЕНИТЬБ
  • ПОВТОР
  • РИМСКОЕ
  • Round
  • ОКРУГЛВНИЗ
  • ОКРУГЛВВЕРХ
  • КВПИРСОН
  • ДРВ
  • Поиск
  • ПОИСКБ
  • РЯД.СУММ
  • SINH
  • СКОС
  • АПЛ
  • НАКЛОН
  • НАИМЕНЬШИЙ
  • КОРЕНЬПИ
  • Standardize
  • StDev
  • StDev_P
  • StDev_S
  • СТАНДОТКЛОНП
  • СТОШYX
  • ПОДСТАВИТЬ
  • Промежуточный итог
  • Sum
  • СУММЕСЛИ
  • СУММЕСЛИМН
  • СУММПРОИЗВ
  • СУММКВ
  • СУММРАЗНКВ
  • СУММСУММКВ
  • СУММКВРАЗН
  • АСЧ
  • T_Dist
  • T_Dist_2t
  • T_Dist_RT
  • T_Inv
  • T_Inv_2T
  • T_Test
  • TANH
  • РАВНОКЧЕК
  • ЦЕНАКЧЕК
  • ДОХОДКЧЕК
  • СТЬЮДРАСП
  • Текст
  • СТЬЮДРАСПОБР
  • ТРАНСП
  • ТЕНДЕНЦИЯ
  • Усечь
  • УРЕЗСРЕДНЕЕ
  • ТТЕСТ
  • ДОЛЛСША
  • Var
  • Var_P
  • Var_S
  • ДИСПР
  • ПУО
  • ВПР
  • День недели
  • НОМНЕДЕЛИ
  • ВЕЙБУЛЛ
  • Weibull_Dist
  • РАБДЕНЬ
  • WorkDay_Intl
  • ЧИСТВНДОХ
  • ЧИСТНЗ
  • ДОЛЯГОДА
  • ДОХОДСКИДКА
  • ДОХОДПОГАШ
  • Z_Test
  • ZTEСT

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Функции VBA и массивы значений

Создание функций с бесконечным количеством аргументов

В предыдущих примерах мы создавали функции, в которых в качестве аргументов выступало одно значение. Но есть функции, у которых в качестве переменной выступает массив значений. Примерами таких функций встроенных в Excel служат функции СУММ, ВПР, МАКС, СРЗНАЧ и так далее. Давайте теперь создадим свою похожую функцию.

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

В первой строке данной функции можно увидеть, что переменной Диапазон мы присвоили тип Range (Диапазон As Range). Таким образом, в качестве аргумента функции мы можем использовать диапазон ячеек. Применим эту функцию на рабочем листе Excel.

Как видно из рисунка, мы не перечисляли каждое значение, а использовали диапазон ячеек A2:A11.

Теперь немного разберем код. Мы использовали цикл For Each — Next. Его задача пройтись по каждой ячейке нашего диапазона. Предварительно мы объявили еще одну переменную r типа Range. Она будет хранить значение каждой ячейки.

Далее идет проверка значения ячейки и если оно кратно 2, то мы суммируем результат во временную переменную S.

В конце, после цикла, мы присваиваем функции СуммаЧетных значение просуммированных элементов S.

Создание функций с неопределенным количеством аргументов

Предыдущая функция имеет недостаток — если вы попытаетесь использовать в качестве переменной несмежный диапазон ячеек, то получите ошибку. Иногда требуется более универсальная функция, так как на старте мы можем не знать количество аргументов, которые будут использоваться. Например, всем известная функция СУММ может принимать неограниченное количество аргументов =СУММ( A1 ; B1:B5 ;1;2;3), функция все рано вернет верный результат.

Вы можете создать свою аналогичную ​​функцию в VBA, указав к последнему (или единственному) аргументу ключевое слово ParamArray.

ParamArray — данный модификатор применяется только к последнему аргументу. Аргумент с данным модификатором всегда должен иметь тип данных Variant и всегда является необязательным, ключевое слов Optional не указывается дополнительно

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

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

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

У нас добавился еще один цикл For Each — Next. Т.е. сначала мы проходим по всем аргументам (диапазонам ячеек), а после проходим по всем ячейкам этих диапазонов.

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

Создание функции, возвращающих массив значений

Надеюсь вы знаете, как использовать формулы массивов в Excel. Эти функции вводятся на рабочий лист Excel с помощью сочетания клавиш Ctrl + Shift + Enter. Сейчас мы создадим функцию, которая возвратит массив значений. Например, выведет нам список всех месяцев.

Если мы введем функцию в одну ячейку, то увидим, что результатом будет только Январь. Чтобы понять как работает функция необходимо выделить 12 ячеек по горизонтали, ввести =СписокМесяцев() и нажать сочетание клавиш Ctrl + Shift + Enter.

Если необходимо вывести список месяцев по вертикали, то можно дополнительно использовать функцию =ТРАНСП(СписокМесяцев()).

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

Источник

Теперь я понимаю, что программирование — это не магия)

К сожалению, я не смог вовремя дать обратную связь, но, как говорится, лучше поздно, чем никогда.

До вашего тренинга мой уровень владения VBA в Excel был около нулевым, программирование для меня было просто каким-то чудом. Поэтому первые 4 урока приходилось себя просто заставлять выполнять домашние задания, так как мой мозг отчаянно сопротивлялся, из-за того что всё было незнакомо, постоянно вылетали какие-то ошибки, которые я не знал как исправить. К тому же, вы оставляли специально такие места в задании, которые не были освещены в уроке. Сам я их решить не мог, расстраивался, приходили мысли в голову, что это не моё, я слишком тупой для этого и т.д. И так два раза я бросал эту затею.

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

Поэтому в качестве усовершенствования ваших тренингов (чтобы люди не сдавались, из-за описанных мною причин выше) на первом занятии или при выдачи ДЗ предупреждайте, что есть в задании подводные камни, и если вы его не сможете выполнить полностью, то это нормально. Не всё сразу. Москва тоже не сразу строилась. Просто выполните задачу по максимуму.

Если бы было это предупреждение в тренинге, то чисто психологически проходить его было бы легче.

И чтобы усилить вашу рекламу (про стоимость урока равной бигмаку), добавьте что-то в таком стиле: «Чувство насыщения от БигМака уйдет через два часа, а приобретенные знания и навыки останутся с вами на всю жизнь».

Спасибо Вам большое за качественные материалы. Теперь я понимаю, что программирование — это не магия).

Хочется «расти» дальше

Тренинг замечательный. Все по делу на конкретных примерах, никакой «воды», ничего лишнего. Задания делать не успевала, но надеюсь наверстать после тренинга. Буду продолжать в блоке «Специалист». Хочется «расти» дальше.

Светлана Мажайкина о практическом тренинге

Ваши материалы являются настольным материалом для меня

Благодарю Вас за проведенный вебинар!

Очень приятно и полезно было провести вечер на таком мероприятии.

Хотя и давно пользуюсь Вашими материалами, но последние материалы стали более удобны в использовании, т.к. разбиты на более мелкие темы и поэтому проще стало найти необходимый материал. Это обстоятельство тем более актуально в связи с тем, что Ваши материалы являются настольным материалом для меня, т.к. теперь без программирования я не представляю дальнейшую свою работу. Хоть я и имею многие Ваши материалы, и в новых материалах идет повторение, но, в связи с новыми примерами, всегда находятся новые «нюансики», которые оказываются очень полезными.

Вот и в последнем вебинаре очень кстати пришелся материал по применению формул в примерах 6.1, 6.2, 7. Материал очень подробно и доходчиво разобран. Особенно хорошо, что разобраны возникающие ошибки, это очень помогает впитывать материал и в дальнейшем, при возникновении проблем помогает быстро обнаружить ошибки.

Огромное спасибо Вам за ваше такое добросовестное и талантливое отношение к этой работе! Я думаю, что многие слушатели согласны со мной.

Юрий Юркин о мастер-классе

Ранее написанные мной простейшие программы теперь кажутся таким корявыми

Доброй ночи Дмитрий! Хочу поблагодарить Вас за такой красивый и ценный подарок. Просмотрел мастер-класс и был очередной раз поражен Вашей логикой мышления и талантом донести материал до слушателя. Я немного изучал программирование в Excel по книжной литературе – приходилось очень тяжело разобраться в понятиях и кодах (особенно если не знаешь английского языка). И ранее написанные мной простейшие программы (в несколько строк), после Ваших уроков, кажутся таким корявыми. А у Вас получаются, просто, произведения искусства. Поэтому Ваши уроки и материалы, для меня, имеют огромную ценность, т.к. приходится обрабатывать огромное количество данных по тепло-, водо- и электросчетчикам (а их – сотни). До знакомства с Вами я в основном пользовался функциями и формулами. Формулы иногда получались монстровидными и довольно медлительными. Надеюсь, что с Вашей помощью начну больше программировать. Людей с таким талантом преподавания как у Вас, особенно в наше время, очень мало (я бы сказал, наверно, исключительно мало). Поэтому хочется сказать большое человеческое спасибо за Ваш труд и поздравить Вас с тем, что Вы нашли достойное применение такому таланту. Всего доброго и успехов Вам в Вашем деле!

Юрий Юркин о мастер-классе

Не всё так сложно на самом деле

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

Артем Проскурин о практическом тренинге

Встроенные функции Visual Basic

Для просмотра видео необходимо

зарегистрироваться на сайте

Если вы уже зарегистрированы на сайте —

обновите страницу по этой ссылке или кнопкой F5

Работа с текстом в коде VBA Excel. Функции, оператор & и другие ключевые слова для работы с текстом. Примеры использования некоторых функций и ключевых слов.

Функции для работы с текстом

Основные функции для работы с текстом в VBA Excel:

Функция Описание
Asc(строка) Возвращает числовой код символа, соответствующий первому символу строки. Например: MsgBox Asc(«/Stop»). Ответ: 47, что соответствует символу «/».
Chr(код символа) Возвращает строковый символ по указанному коду. Например: MsgBox Chr(47). Ответ: «/».
Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear]) Преобразует число, дату, время в строку (тип данных Variant (String)), отформатированную в соответствии с инструкциями, включенными в выражение формата. Подробнее…
InStr([начало], строка1, строка2, [сравнение]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с начала строки. Подробнее…
InstrRev(строка1, строка2, [начало, [сравнение]]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с конца строки. Подробнее…
Join(SourceArray,[Delimiter]) Возвращает строку, созданную путем объединения нескольких подстрок из массива. Подробнее…
LCase(строка) Преобразует буквенные символы строки в нижний регистр.
Left(строка, длина) Возвращает левую часть строки с заданным количеством символов. Подробнее…
Len(строка) Возвращает число символов, содержащихся в строке.
LTrim(строка) Возвращает строку без начальных пробелов (слева). Подробнее…
Mid(строка, начало, [длина]) Возвращает часть строки с заданным количеством символов, начиная с указанного символа (по номеру). Подробнее…
Replace(expression, find, replace, [start], [count], [compare]) Возвращает строку, полученную в результате замены одной подстроки в исходном строковом выражении другой подстрокой указанное количество раз. Подробнее…
Right(строка, длина) Возвращает правую часть строки с заданным количеством символов. Подробнее…
RTrim(строка) Возвращает строку без конечных пробелов (справа). Подробнее…
Space(число) Возвращает строку, состоящую из указанного числа пробелов. Подробнее…
Split(Expression,[Delimiter],[Limit],[Compare]) Возвращает одномерный массив подстрок, извлеченных из указанной строки с разделителями. Подробнее…
StrComp(строка1, строка2, [сравнение]) Возвращает числовое значение Variant (Integer), показывающее результат сравнения двух строк. Подробнее…
StrConv(string, conversion) Изменяет регистр символов исходной строки в соответствии с заданным параметром «conversion». Подробнее…
String(число, символ) Возвращает строку, состоящую из указанного числа символов. В выражении «символ» может быть указан кодом символа или строкой, первый символ которой будет использован в качестве параметра «символ». Подробнее…
StrReverse(строка) Возвращает строку с обратным порядком следования знаков по сравнению с исходной строкой. Подробнее…
Trim(строка) Возвращает строку без начальных (слева) и конечных (справа) пробелов. Подробнее…
UCase(строка) Преобразует буквенные символы строки в верхний регистр.
Val(строка) Возвращает символы, распознанные как цифры с начала строки и до первого нецифрового символа, в виде числового значения соответствующего типа. Подробнее…
WorksheetFunction.Trim(строка) Функция рабочего листа, которая удаляет все лишние пробелы (начальные, конечные и внутренние), оставляя внутри строки одиночные пробелы.

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

Ключевые слова для работы с текстом

Ключевое слово Описание
& Оператор & объединяет два выражения (результат = выражение1 & выражение2). Если выражение не является строкой, оно преобразуется в Variant (String), и результат возвращает значение Variant (String). Если оба выражения возвращают строку, результат возвращает значение String.
vbCrLf Константа vbCrLf сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит последующий текст на новую строку (результат = строка1 & vbCrLf & строка2).
vbNewLine Константа vbNewLine в VBA Excel аналогична константе vbCrLf, также сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит текст на новую строку (результат = строка1 & vbNewLine & строка2).

Примеры

Вывод прямых парных кавычек

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

Sub Primer1()

    ‘Вывод одной прямой парной кавычки

MsgBox Chr(34)

    ‘Отображение текста в прямых кавычках

MsgBox Chr(34) & «Волга» & Chr(34)

    ‘Вывод 10 прямых парных кавычек подряд

MsgBox String(10, Chr(34))

End Sub

Смотрите интересное решение по выводу прямых кавычек с помощью прямых кавычек в первом комментарии.

Отображение слов наоборот

Преобразование слова «налим» в «Милан»:

Sub Primer2()

Dim stroka

    stroka = «налим»

    stroka = StrReverse(stroka) ‘милан

    stroka = StrConv(stroka, 3) ‘Милан

MsgBox stroka

End Sub

или одной строкой:

Sub Primer3()

MsgBox StrConv(StrReverse(«налим»), 3)

End Sub

Преобразование слова «лето» в «отель»:

Sub Primer4()

Dim stroka

    stroka = «лето»

    stroka = StrReverse(stroka) ‘отел

    stroka = stroka & «ь» ‘отель

MsgBox stroka

End Sub

или одной строкой:

Sub Primer5()

MsgBox StrReverse(«лето») & «ь»

End Sub

Печатная машинка

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

Для реализации этого примера понадобится пользовательская форма (UserForm1) с надписью (Label1) и кнопкой (CommandButton1):

Пользовательская форма с элементами управления Label и CommandButton

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub StopSub(Pause As Single)

Dim Start As Single

Start = Timer

    Do While Timer < Start + Pause

       DoEvents

    Loop

End Sub

Private Sub CommandButton1_Click()

Dim stroka As String, i As Byte

stroka = «Печатная машинка!»

Label1.Caption = «»

    For i = 1 To Len(stroka)

        Call StopSub(0.25) ‘пауза в секундах

        ‘следующая строка кода добавляет очередную букву

        Label1.Caption = Label1.Caption & Mid(stroka, i, 1)

    Next

End Sub

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


Like this post? Please share to your friends:
  • Аналоги русских функций excel
  • Аналоги программы microsoft word
  • Аналоги программы microsoft excel
  • Аналоги word на айфон
  • Аналоги word для linux