Vba excel. типы данных

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

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

Функция Тип данных Диапазон значений аргумента
CBool Boolean Любое допустимое строковое или числовое выражение.
CByte Byte От 0 до 255.
CCur Currency От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
CDate Date Любое допустимое выражение даты.
CDbl Double От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.
CDec Decimal 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001.
CInt Integer От -32 768 до 32 767, дробная часть округляется.
CLng Long От -2 147 483 648 до 2 147 483 647, дробная часть округляется.
CSng Single От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений.
CStr String Результат, возвращаемый функцией CStr, зависит от аргумента Выражение.
CVar Variant Диапазон совпадает с типом Double  для числовых значений и с типом  String  для нечисловых значений.

Exit For and Continue For

When you use the Exit For statement, the execution will leave the For Each … Next loop and control will be transferred to the statements that come after the Next statement.

When you use the Continue For statement, control will be transferred to the next iteration of your loop. Let us demonstrate this using an example:

Step 1) Begin by creating a new console application.

Step 2) Use the following code:

Module Module1
    Sub Main()

        Dim nums() As Integer =
    {10, 12, 14, 17, 19, 23, 26, 31, 33, 37, 40, 48}

        For Each n As Integer In nums

            If n >= 17 And n <= 25 Then
                Continue For
            End If

            Console.Write(n.ToString & " ")

            If n = 37 Then
                Exit For
            End If
        Next


        Console.ReadKey()

    End Sub

End Module

Step 3) Run the code by clicking the Start button from the top bar. You should get the following result:

Here is a screenshot of the code:

Explanation of Code:

  1. Creating a module named module1.
  2. Starting the main sub-procedure.
  3. Creating an array named nums with a set of integers.
  4. Creating a variable named n then we use it to iterate over the elements contained in the array nums.
  5. Using an If…Then condition to check the value of the variable n. If the value is between 17 (17 included) and 25 (25 included), the iteration will skip to the next item in the array.
  6. The skipping of the above values is done here. This is the statement necessary for performing the skip. This means that the For Each loop will not run for the skipped items.
  7. End the If condition.
  8. Printing the values obtained from the array on the console. The ToString function helps us convert the values from numbers to strings. The ” ” will create some space after each printed value.
  9. Checking the iteration variable n for when its value is 37 using an If…Then condition.
  10. Exiting the For Each loop when the above condition is true, that is, the value of n=37. This means that the iteration on the array items will stop.
  11. End of the above If condition.
  12. End of the For … Each statement.
  13. Pause the console window waiting for the user to take action to close it.
  14. End of the main sub-procedure.
  15. End of the module.

Примечания

Чтобы отформатировать Сделайте следующее
Числа Используйте предопределенные именованные числовые форматы или создайте числовые форматы, определяемые пользователем.
Даты и время Используйте предопределенные именованные форматы даты и времени или создайте числовые форматы, определяемые пользователем.
Даты и время, представленные числами Используйте именованные форматы даты и времени или создайте числовые форматы.
Строки Создайте свои собственные определяемые пользователем строковые форматы.

Функция Format усекает format до 257 символов.

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

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

Примечание

Если свойству Calendar присвоено значение и format задает форматирование даты, выдаваемым expression должно быть . Если свойству Visual Basic Calendar присвоено значение , выдаваемым expression должно быть .

Если используется григорианский календарь, значение символов выражения format не изменяется. Если используется календарь Хиджра, все символы формата даты (например, dddd, mmmm, yyyy) имеют то же значение, но применяются к календарю Хиджра. Символы формата остаются английскими; символы, отображаемые в текстовом виде (например, AM и PM), отображают строку (на английском или арабском языке), связанную с этим символом. Диапазон некоторых символов при использовании календаря Хиджра изменяется.

Ячейка и объект Range

Объект Range в VBA Excel представляет диапазон ячеек. Он (объект Range) может описывать любой диапазон, начиная от одной ячейки и заканчивая сразу всеми ячейками рабочего листа.

Примеры диапазонов:

  • Одна ячейка – .
  • Девять ячеек – .
  • Весь рабочий лист в Excel 2016 – .

Для справки: выражение описывает диапазон с 1 по 1048576 строку, где число 1048576 – это номер последней строки на рабочем листе Excel 2016.

В VBA Excel есть свойство Cells объекта Range, которое позволяет обратиться к одной ячейке в указанном диапазоне (возвращает объект Range в виде одной ячейки). Если в коде используется свойство Cells без указания диапазона, значит оно относится ко всему диапазону активного рабочего листа.

Примеры обращения к одной ячейке:

  • , где 1000 – порядковый номер ячейки на рабочем листе, возвращает ячейку «ALL1».
  • , где 50 – номер строки рабочего листа, а 20 – номер столбца, возвращает ячейку «T50».
  • , где «A1:C3» – заданный диапазон, а 6 – порядковый номер ячейки в этом диапазоне, возвращает ячейку «C2».

Для справки: порядковый номер ячейки в диапазоне считается построчно слева направо с перемещением к следующей строке сверху вниз.

Подробнее о том, как обратиться к ячейке, смотрите в статье: Ячейки (обращение, запись, чтение, очистка).

В этой статье мы рассмотрим свойства объекта Range, применимые, в том числе, к диапазону, состоящему из одной ячейки.

Еще надо добавить, что свойства и методы объектов отделяются от объектов точкой, как в третьем примере обращения к одной ячейке: .

Переменная не требуется после ключевого слова Next

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

Это НЕ обязательно, и вы можете не увидеть его в других примерах, которые вы найдете в Интернете. Однако мне нравится включать переменную после Next по двум причинам.

  1. Мы можем использовать его при отладке кода,
    чтобы увидеть значение переменной, наведя указатель мыши на переменную, когда
    код остановлен.
  2. Это облегчает понимание того, к какой строке For
    подключена следующая строка. Это особенно верно, когда у вас есть несколько циклов
    или вложенных циклов в ваших макросах.

Поэтому я рекомендую добавить переменную после ключевого слова Next в качестве лучшей практики. Немного дополнительной работы заранее сэкономит время и головную боль в будущем. Доверьтесь мне!

Какую задачу хотите зациклить вы?

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

For Next Loop VBA Macro Examples.xlsm (79.0 KB)

Циклы, безусловно, являются промежуточной техникой кодирования, которая вынуждает нас выйти за рамки MacroRecorder. К сожалению, записанный макрос не может создавать петли. Тем не менее, это навык, который вы сможете использовать снова и снова на протяжении всей своей карьеры для автоматизации простых и сложных задач. Понимание того, как использовать циклы, даст вам волшебную силу с Excel.

Пожалуйста, оставьте комментарий ниже с задачей, которую вы хотите автоматизировать с помощью цикла. Спасибо!

Определяемые пользователем форматы даты и времени

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

Знак Описание
() Разделитель компонентов времени. В некоторых могут использоваться другие знаки для представления разделителя компонентов времени. Этот разделитель отделяет часы, минуты и секунды, когда значения времени форматируются. Символ, используемый в качестве разделителя компонентов времени в отформатированных выходных данных, определяется параметрами системы.
() . В некоторых языковых стандартах могут использоваться другие знаки для представления разделителя компонентов даты. Этот разделитель отделяет день, месяц и год, когда значения даты форматируются. Символ, используемый в качестве разделителя компонентов даты в отформатированных выходных данных, определяется параметрами системы.
c Отображение даты в формате и отображение времени в формате (в этом порядке). Отображение только информации о дате, если отсутствует дробная часть в дате, представленной числом; отображение только информации о времени, если отсутствует целая часть.
d Отображение дня в виде числа без нуля в начале (1–31).
dd Отображение дня в виде числа с нулем в начале (01–31).
ddd Отображение дня с использованием сокращений (Вс–Сб). Локализовано.
dddd Отображение дня с использованием полного имени (Воскресенье–Суббота). Локализовано.
ddddd Отображение даты с использованием полного формата (включая день, месяц и год), соответствующего краткому формату даты в настройках системы. Кратким форматом даты по умолчанию является .
dddddd Отображение числа, представляющего дату, с использованием полного формата (включая день, месяц и год), соответствующего длинному формату даты в настройках системы. Длинным форматом даты по умолчанию является .
w Отображение дня недели в виде числа (от 1 для воскресенья и до 7 для субботы).
ww Отображение недели года в виде числа (1–54).
m Отображение месяца в виде числа без нуля в начале (1–12). Если следует сразу же после или , отображаться будет не месяц, а минута.
mm Отображение месяца в виде числа с нулем в начале (01–12). Если следует сразу же после или , отображаться будет не месяц, а минута.
mmm Отображение сокращенного названия месяца (янв–дек). Локализовано.
mmmm Отображение полного названия месяца (январь–декабрь). Локализовано.
q Отображение квартала года в виде числа (1–4).
y Отображение дня года в виде числа (1–366).
yy Отображение года в виде 2-значного числа (00–99).
yyyy Отображение года в виде 4-значного числа (100–9999).
h Отображение часа в виде числа без нуля в начале (0–23).
hh Отображение часа в виде числа с нулем в начале (00–23).
n Отображение минуты в виде числа без нуля в начале (0–59).
nn Отображение минуты в виде числа с нулем в начале (00–59).
s Отображение секунды в виде числа без нуля в начале (0–59).
ss Отображение секунды в виде числа с нулем в начале (00–59).
ttttt Отображение времени в полном формате (включая час, минуту и секунду) с использованием разделителя компонентов времени, определенного в формате времени, указанного в настройках системы. Нуль в начале отображается, если выбран параметр «Нуль в начале» и время относится к интервалу ранее 10:00 A.M. или P.M. Форматом времени по умолчанию является .
AM/PM Используется 12-часовой формат и отображается указатель AM в верхнем регистре с любым часом до полудня; отображается указатель PM в верхнем регистре с любым часом между полуднем и 11:59 P.M.
am/pm Используется 12-часовом формат и отображается указатель AM в нижнем регистре с любым часом до полудня; отображается указатель PM в нижнем регистре с любым часом между полуднем и 11:59 P.M.
A/P Используется 12-часовом формат и отображается указатель A в верхнем регистре с любым часом до полудня; отображается указатель P в верхнем регистре с любым часом между полуднем и 11:59 P.M.
a/p Используется 12-часовом формат и отображается указатель A в нижнем регистре с любым часом до полудня; отображается указатель P в нижнем регистре с любым часом между полуднем и 11:59 P.M.
AMPM Используется 12-часовой формат и отображается AM с любым часом до полудня в соответствии с настройками системы; отображается строковый литерал PM с любым часом между полуднем и 11:59 P.M. в соответствии с настройками системы. Указатель AMPM может отображаться как в верхнем, так и в нижнем регистре, однако регистр отображаемой строки соответствует строке, определенной параметрами системы. Форматом по умолчанию является AM/PM. Если вашей системе установлен 24-часовой формат, эта строка обычно устанавливается пустой.

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

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

Имя формата Описание
General Number Отображение числа без знака разделителя групп разрядов.
Currency Отображение числа с использованием разделителя групп разрядов, если это необходимо; отображаются две цифры справа от разделителя целой и дробной части. Вывод основывается на настройках системы.
Fixed Отображение по крайней мере одной цифры слева и двух цифр справа от разделителя целой и дробной части.
Standard Отображение числа с использованием разделителя групп разрядов; отображаются по крайней мере одна цифра слева и две цифры справа от разделителя целой и дробной части.
Percent Отображение числа, умноженного на 100 со знаком процента (%), добавляемого справа; всегда отображаются две цифры справа от разделителя целой и дробной части.
Scientific Используется стандартное экспоненциальное представление.
Yes/No Отображается «Нет», если число равняется 0; в противном случае отображается «Да».
True/False Отображается False, если число равняется 0; в противном случае отображается True.
On/Off Отображается «Вкл», если число равняется 0; в противном случае отображается «Выкл».

Компоненты цикла For… Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next Здесь counter – необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For… Next выполняется с шагом по умолчанию, равному 1.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

How Does the For Next Loop Work?

The For Next Loop allows us to loop through a collection of items in Excel.  The collection can be a collection of objects or a list of numbers.

Examples of collections of objects include:

  • Cells in a range.
  • Worksheets in a workbook.
  • Open workbooks on the computer.
  • Pivot tables in a worksheet.
  • Pivot fields in a pivot table.
  • Shapes on a worksheet.
  • And any other object you interact with in Excel.

The job of the For Next Loop is to perform the same actions (lines of code) on each item in the collection.

The example below contains a For Next Loop that loops through each worksheet in the workbook and unhides each sheet.  The loop starts at the first item in the collection (the first sheet in the workbook), and performs the line(s) of code between the For and Next lines for each item in the collection (every sheet in the workbook).

Sub Unhide_Multiple_Sheets()

Dim ws As Worksheet
    
    For Each ws In ActiveWorkbook.Worksheets
        ws.Visible = xlSheetVisible
    Next ws

End Sub

Of course we can use logical statements like If statements to test properties and conditions before performing the actions.  The following macro only unhides sheets that have the phrase “ABC Global Co.” in cell A1 of each sheet, and hides all other sheets.

Sub Unhide_Report_Sheets()

Dim ws As Worksheet
    
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Range("A1").Value = "ABC Global Co." Then
            ws.Visible = xlSheetVisible
        Else
            ws.Visible = xlSheetHidden
        End If
    Next ws

End Sub

Примеры циклов Do Until… Loop

Простейшие циклы

Цикл Do Until… Loop с условием до исполняемых операторов:

1
2
3
4
5
6
7

Subtest1()

DimaAsByte

DoUntila>9

a=a+1

Loop

MsgBoxa

EndSub

Цикл Do Until… Loop с условием после исполняемых операторов:

1
2
3
4
5
6
7

Subtest2()

DimaAsByte

Do

a=a+1

LoopUntila>9

MsgBoxa

EndSub

В обоих случаях окно MsgBox выведет число 10. Когда значение переменной a будет равно 10, проверяемое условие выдаст значение True, и цикл будет остановлен.

Проход по строкам листа

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

Дни Игрок Брошено Попало в цель
1 день Белка 1 15 6
1 день Белка 2 12 7
2 день Белка 1 14 8
2 день Белка 2 16 7
3 день Белка 1 20 9
3 день Белка 2 14 6
4 день Белка 1 26 10
4 день Белка 2 13 5
5 день Белка 1 17 4
5 день Белка 2 21 7

Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do Until… Loop указываем «первая ячейка текущей строки является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Subtest3()

DimiAsLong,nAsLong

i=2

n=100

DoUntilCells(i,1)=»»

IfCells(i,2)=»Белка 1″Then

n=n-Cells(i,3)

Else

n=n+Cells(i,4)

EndIf

i=i+1

Loop

MsgBoxn

EndSub

Результат, выведенный в информационном сообщении, будет равен 40. Вы можете скопировать таблицу на свой лист книги Excel и поэкспериментировать с кодом VBA.

Бесконечный цикл и Exit Do

Пример бесконечного цикла:

1
2
3
4
5
6
7
8
9

Subtest4()

DimaAsByte

DoUntila>10

a=a+1

Ifa=10Then

a=

EndIf

Loop

EndSub

При запуске этой процедуры цикл Do Until… Loop начинает выполняться бесконечно. Мне приходилось останавливать бесконечные циклы VBA в Excel 2000 и Excel 2016. В Excel 2000 помогло сочетание клавиш Ctrl+Break, а в Excel 2016 при закрытии редактора VBA крестиком появляется окно:

Информационное окно «Microsoft Excel не отвечает»

Ожидать отклика программы нет смысла, поэтому нажимаем «Перезапустить программу» или «Закрыть программу».

Пример использования оператора Exit Do:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Subtest5()

DimaAsByte,nAsLong

DoUntila>10

a=a+1

n=n+1

Ifa=10Then

a=

EndIf

Ifn=1000Then

ExitDo

EndIf

Loop

MsgBoxn

EndSub

Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное сообщение MsgBox выведет на экран число повторений цикла Do Until… Loop из этого примера.

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

Как работать с макросами в Excel

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

1 Правильные имена в макросах.

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

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

2 Используйте относительные (не абсолютные) адреса ячеек

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

По умолчанию в Excel включен режим «Абсолют», но вы можете изменить его, включив кнопку «Относительные ссылки» расположенную ниже под кнопкой «Запись макроса» на панели инструментов вкладки «Разработчик»:

3 Всегда начинайте запись с курсором в A1

Абсолютный отсчет ячеек, всегда ведется с исходного положения (адрес ячейки А1) – до адреса курсора с вашими данными. Если вы сохранили ваш макрос в книге личных макросов (рекомендуется так и делать), то вы можете использовать свою программу на других листах с аналогичными данными. Независимо от того, где ваш курсор позиционируется, когда вы начинаете запись макроса! Даже если он уже находится в ячейке A1, ваш первый макрос лучше записывать после нажатия клавиш должны быть Ctrl + Home.

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

4 Всегда перемещаться с клавиш направления в момент записи макроса

Используйте кнопки со стрелками для управления курсором (Ctrl + Up, и т.п.). Позиционируйте курсор, так чтобы вы могли добавить, изменить или удалить данные внутри таблицы по мере необходимости.

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

5 Создавайте макросы для конкретных небольших задач

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

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

Если нельзя разбить длинный макрос на короткие приложения, а требуется проверить его функциональность пошагово («отладкой»). Нажмите клавишу F8 каждый раз, когда вы хотите перейти к следующему шагу выполнения задачи. Процесс выполнения программы останавливается, когда он видит ошибку. Вы можете исправить ошибку, которую легко найти с помощью «отладки» или записать по-новому.

Определяемые пользователем строковые форматы

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

Знак Описание
@ Заполнитель для символов. Отображает знак или пробел. Если в строке имеется знак на позиции, в которой в строке форматирования располагается at-символ (@), отображается этот знак; в противном случае на этой позиции отображается пробел. Заполнители заполняются справа налево, если только в строке форматирования не будет представлен восклицательный знак (!).
& Заполнитель для символов. Отображает знак или ничего не отображает. Если в строке имеется знак на позиции, в которой располагается амперсанд (&), отображается этот знак; в противном случае не отображается ничего. Заполнители заполняются справа налево, если только в строке форматирования не будет представлен восклицательный знак (!).
< Принудительное отображение нижнего регистра. Отображение всех знаков в формате нижнего регистра.
> Принудительное отображение верхнего регистра. Отображение всех знаков в формате верхнего регистра.
! Принудительное заполнение заполнителей в порядке слева направо. По умолчанию заполнители заполняются справа налево.

Создание файлов Excel

Метод Workbooks.Add

Описание

Файлы Excel можно создавать из кода VBA с помощью метода Add объекта Workbooks.

Workbooks.Add – это метод, который создает и возвращает новую книгу Excel. Новая книга после создания становится активной.

Ссылку на новую книгу Excel, созданную методом Workbooks.Add, можно присвоить объектной переменной с помощью оператора или обращаться к ней, как к активной книге: .

Синтаксис

Template – параметр, который определяет, как создается новая книга.

Значение Template Параметры новой книги
Отсутствует Новая книга с количеством листов по умолчанию.
Полное имя существующего файла Excel Новая книга с указанным файлом в качестве шаблона.
xlWBATChart Новый файл с одним листом диаграммы.
xlWBATWorksheet Новый файл с одним рабочим листом.

Примеры

Пример 1
Создание новой книги Excel с количеством листов по умолчанию и сохранение ее в папку, где расположен файл с кодом VBA:

1
2
3
4
5
6
7
8

SubPrimer1()

‘Создаем новую книгу

Workbooks.Add

‘Сохраняем книгу в папку, где расположен файл с кодом

ActiveWorkbook.SaveAs(ThisWorkbook.Path&»\Моя новая книга.xlsx»)

‘Закрываем файл

ActiveWorkbook.Close

EndSub

Файл «Моя новая книга.xlsx» понадобится для следующего примера.

Пример 2
Создание новой книги по файлу «Моя новая книга.xlsx» в качестве шаблона с присвоением ссылки на нее объектной переменной, сохранение нового файла с новым именем и добавление в него нового рабочего листа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

SubPrimer2()

‘Объявляем объектную переменную с ранней привязкой

DimMyWorkbook AsWorkbook

‘Создаем новую книгу по шаблону файла «Моя новая книга.xlsx»

SetMyWorkbook=Workbooks.Add(ThisWorkbook.Path&»\Моя новая книга.xlsx»)

WithMyWorkbook

‘Смотрим какое имя присвоено новому файлу по умолчанию

MsgBox.Name'»Моя новая книга1″

‘Сохраняем книгу с новым именем

.SaveAs(ThisWorkbook.Path&»\Моя самая новая книга.xlsx»)

‘Смотрим новое имя файла

MsgBox.Name'»Моя самая новая книга»

‘Добавляем в книгу новый лист с именем «Мой новый лист»

.Sheets.Add.Name=»Мой новый лист»

‘Сохраняем файл

.Save

EndWith

EndSub

Описание

Если в коде VBA Excel применить метод Worksheet.Copy без указания параметра Before или After, будет создана новая книга с копируемым листом (листами). Новая книга станет активной.

Примеры

Пример 3
Создание новой книги с помощью копирования одного листа (в этом примере используется книга, созданная в первом примере):

1
2
3
4
5
6
7
8
9

SubPrimer3()

‘Если книга источник не открыта, ее нужно открыть

Workbooks.Open(ThisWorkbook.Path&»\Моя новая книга.xlsx»)

‘Создаем новую книгу копированием одного листа

Workbooks(«Моя новая книга.xlsx»).Worksheets(«Лист1»).Copy

‘Сохраняем новую книгу с именем «Еще одна книжица.xlsx» в папку,
‘где расположен файл с кодом

ActiveWorkbook.SaveAs(ThisWorkbook.Path&»\Еще одна книжица.xlsx»)

EndSub

Также, как и при создании нового файла Excel методом Workbooks.Add, при создании новой книги методом Worksheet.Copy, можно ссылку на нее присвоить объектной переменной.

Пример 4
Создание новой книги, в которую включены копии всех рабочих листов из файла с кодом VBA:

1
2
3

SubPrimer4()

ThisWorkbook.Worksheets.Copy

EndSub

Пример 5
Создание новой книги, в которую включены копии выбранных рабочих листов из файла с кодом VBA:

1
2
3

SubPrimer5()

ThisWorkbook.Sheets(Array(«Лист1″,»Лист3″,»Лист7»)).Copy

EndSub

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

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

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

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