🔹 Функция CDate
Функция CDate используется для преобразования аргументов в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.
📌 Пример:
#VBA #ExcelVBA #CDate
Функция CDate используется для преобразования аргументов в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.
📌 Пример:
Dim a As String, b As Date, c As Double
a = "28.01.2021"
b = CDate(a) 'Результат: #28.01.2021#
c = CDbl(b) 'Результат: 44224
Dim a
a = CDate(44298.63895) 'Результат: #12.04.2021 15:20:05#
a = CDate(44298) 'Результат: #12.04.2021#
a = CDate(0.63895) 'Результат: #15:20:05#
#VBA #ExcelVBA #CDate
🔹 Функция CDbl
Функция CDbl используется для преобразования аргументов в тип данных Double.
📌 Пример:
💡 Примечание:
Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
#VBA #ExcelVBA #CDbl
Функция CDbl используется для преобразования аргументов в тип данных Double.
📌 Пример:
Dim a As String, b As String, c As Double
a = "45,3695423"
b = "548955,756"
c = CDbl(a) + CDbl(b) 'Результат: 549001,1255423
💡 Примечание:
Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
MsgBox Application.DecimalSeparator
#VBA #ExcelVBA #CDbl
🔹 Функция CDec
Функция CDec используется для преобразования аргументов в тип данных Decimal.
📌 Пример:
#VBA #ExcelVBA #CDec
Функция CDec используется для преобразования аргументов в тип данных Decimal.
📌 Пример:
Dim a As String, b As Double, c
a = "5,9228162514264337593543950335"
b = 5.92281625142643
c = CDec(a) - CDec(b) 'Результат: 0,0000000000000037593543950335
Dim a As Double, b As String, c
a = 4.2643E-14
b = CStr(a) 'Результат: "4,2643E-14"
c = CDec(a) 'Результат: 0,000000000000042643
#VBA #ExcelVBA #CDec
🔹 Функция CVar
Функция CVar используется для преобразования аргументов в тип данных Variant.
📌 Пример:
#VBA #ExcelVBA #CVar
Функция CVar используется для преобразования аргументов в тип данных Variant.
📌 Пример:
Dim a As Double, b As String, c
a = 549258.232546
b = "Новое сообщение"
c = CVar(a) 'Результат: 549258,232546 (Variant/Double)
c = CVar(b) 'Результат: "Новое сообщение" (Variant/String)
#VBA #ExcelVBA #CVar
🔥 Метод Activate объекта Range
Метод Activate делает указанную ячейку активной. Активная ячейка — это та, в которой находится фокус. Этот метод удобен при перемещении по листу, когда нужно установить фокус на конкретную ячейку.
📌 Разница между Activate и Select
🔹 Activate — устанавливает фокус в указанную ячейку.
🔹 Select — выделяет одну или несколько ячеек, делая их текущим диапазоном, активной становится только одна ячейка, расположенная в левом верхнем углу выделенного диапазона.
📌 Примеры
✅ 1. Сделать ячейку B2 активной
✅ 2. Разница между Activate и Select
⚠️ Важно!
🔹 Метод Activate работает только с одной ячейкой, его нельзя применить к диапазону.
🔹 Работает только на активном листе.
🔹 Если указанная ячейка находится внутри выделенного диапазона, метод Activate не изменяет ранее выделенный диапазон, а просто ставит фокус в указанную ячейку. Если указанная ячейка находится вне выделенного диапазона, выделение текущего диапазона снимается.
💡 Когда использовать?
✅ Когда нужно переместить курсор в ячейку перед вводом данных через SendKeys.
✅ В макросах, где требуется точное управление фокусом без изменения выделенного диапазона.
#VBA #ExcelVBA #Range #Activate
Метод Activate делает указанную ячейку активной. Активная ячейка — это та, в которой находится фокус. Этот метод удобен при перемещении по листу, когда нужно установить фокус на конкретную ячейку.
📌 Разница между Activate и Select
🔹 Activate — устанавливает фокус в указанную ячейку.
🔹 Select — выделяет одну или несколько ячеек, делая их текущим диапазоном, активной становится только одна ячейка, расположенная в левом верхнем углу выделенного диапазона.
📌 Примеры
✅ 1. Сделать ячейку B2 активной
Sub ActivateCell()
Range("B2").Activate ' Фокус окажется в ячейке B2
End Sub
✅ 2. Разница между Activate и Select
Sub ActivateVsSelect()
Range("B2:E6").Select ' Выделен диапазон B2:E6, фокус в ячейке B2
MsgBox ActiveCell.Address ' $B$2
Range("D4").Activate ' Выделен диапазон B2:E6, фокус в ячейке D4
MsgBox ActiveCell.Address ' $D$4
Range("A1").Activate ' Выделен диапазон A1, фокус в ячейке A1
MsgBox ActiveCell.Address ' $A$1
End Sub
⚠️ Важно!
🔹 Метод Activate работает только с одной ячейкой, его нельзя применить к диапазону.
🔹 Работает только на активном листе.
🔹 Если указанная ячейка находится внутри выделенного диапазона, метод Activate не изменяет ранее выделенный диапазон, а просто ставит фокус в указанную ячейку. Если указанная ячейка находится вне выделенного диапазона, выделение текущего диапазона снимается.
💡 Когда использовать?
✅ Когда нужно переместить курсор в ячейку перед вводом данных через SendKeys.
✅ В макросах, где требуется точное управление фокусом без изменения выделенного диапазона.
#VBA #ExcelVBA #Range #Activate
👍1
🔥 Метод AutoFit объекта Range
Метод Range.AutoFit автоматически изменяет ширину столбцов или высоту строк в диапазоне так, чтобы все данные в ячейках были видны полностью.
📌 Примеры
1️⃣ Для одной строки и одного столбца
2️⃣ Для нескольких строк и нескольких столбцов
3️⃣ Для определенного диапазона
4️⃣ Для всего листа
⚠️ Важно:
🔹 Если в ячейках содержатся длинные строки текста, метод Range.AutoFit подгонит столбец/строку до его максимальной ширины/высоты.
🔹 Метод Range.AutoFit не работает для объединённых ячеек.
💡 Когда использовать?
✅ Когда нужно быстро подогнать размеры столбцов или строк в зависимости от содержимого ячеек.
Смотрите на нашем сайте, как работает автоподбор ширины объединенной ячейки и как работает автоподбор высоты объединенной ячейки.
#VBA #ExcelVBA #AutoFit #Range
Метод Range.AutoFit автоматически изменяет ширину столбцов или высоту строк в диапазоне так, чтобы все данные в ячейках были видны полностью.
📌 Примеры
1️⃣ Для одной строки и одного столбца
Rows(1).AutoFit ' можно и Rows("1").AutoFit
Columns("A").AutoFit2️⃣ Для нескольких строк и нескольких столбцов
Rows("1:5").AutoFit
Columns("A:E").AutoFit3️⃣ Для определенного диапазона
Range("A1:C10").Columns.AutoFit
Range("A1:C10").Rows.AutoFit4️⃣ Для всего листа
Cells.Columns.AutoFit
Cells.Rows.AutoFit
⚠️ Важно:
🔹 Если в ячейках содержатся длинные строки текста, метод Range.AutoFit подгонит столбец/строку до его максимальной ширины/высоты.
🔹 Метод Range.AutoFit не работает для объединённых ячеек.
💡 Когда использовать?
✅ Когда нужно быстро подогнать размеры столбцов или строк в зависимости от содержимого ячеек.
Смотрите на нашем сайте, как работает автоподбор ширины объединенной ячейки и как работает автоподбор высоты объединенной ячейки.
#VBA #ExcelVBA #AutoFit #Range
🔥 Метод Clear объекта Range
Метод Clear полностью очищает ячейки от всего содержимого, форматирования, комментариев и гиперссылок, но сами ячейки остаются на месте (не удаляются). Это быстрый способ очистить диапазон.
📌 Что удаляет Clear?
✔️ Значения и формулы
✔️ Форматирование (цвет, границы, шрифт)
✔️ Комментарии и примечания
✔️ Гиперссылки
📌 Пример:
🔹 Если нужно удалить только определённые элементы, используйте другие методы:
✅ Удалить только данные (оставив форматирование):
✅ Удалить только форматирование (оставив данные):
✅ Удалить только комментарии и примечания:
✅ Удалить только гиперссылки:
⚠️ Важно:
Метод Clear не удаляет объединение ячеек — для этого используйте UnMerge.
Если Clear применяется к ячейкам с формулами, формулы будут удалены, а не пересчитаны.
💡 Когда использовать метод Clear?
✅ Когда нужно быстро очистить ячейки от всех данных и форматирования.
✅ В макросах для подготовки таблицы перед загрузкой новых данных.
#Range #Clear #ClearContents #ClearFormats #ClearComments #ClearHyperlinks
Метод Clear полностью очищает ячейки от всего содержимого, форматирования, комментариев и гиперссылок, но сами ячейки остаются на месте (не удаляются). Это быстрый способ очистить диапазон.
📌 Что удаляет Clear?
✔️ Значения и формулы
✔️ Форматирование (цвет, границы, шрифт)
✔️ Комментарии и примечания
✔️ Гиперссылки
📌 Пример:
VBA
Sub ClearExample()
Range("A1:C10").Clear ' Полностью очистит диапазон A1:C10
End Sub
🔹 Если нужно удалить только определённые элементы, используйте другие методы:
✅ Удалить только данные (оставив форматирование):
Sub ClearOnlyContents()
Range("A1:C10").ClearContents ' Удалит значения и формулы, но сохранит формат
End Sub
✅ Удалить только форматирование (оставив данные):
Sub ClearOnlyFormats()
Range("A1:C10").ClearFormats ' Удалит цвет, шрифт, границы и другие стили
End Sub
✅ Удалить только комментарии и примечания:
Sub ClearOnlyComments()
Range("A1:C10").ClearComments ' Удалит комментарии, но не данные
End Sub
✅ Удалить только гиперссылки:
Sub ClearOnlyHyperlinks()
Range("A1:C10").ClearHyperlinks ' Удалит гиперссылки, но оставит текст
End Sub
⚠️ Важно:
Метод Clear не удаляет объединение ячеек — для этого используйте UnMerge.
Если Clear применяется к ячейкам с формулами, формулы будут удалены, а не пересчитаны.
💡 Когда использовать метод Clear?
✅ Когда нужно быстро очистить ячейки от всех данных и форматирования.
✅ В макросах для подготовки таблицы перед загрузкой новых данных.
#Range #Clear #ClearContents #ClearFormats #ClearComments #ClearHyperlinks
🔥 Метод Copy объекта Range
Метод Copy позволяет скопировать содержимое и форматирование ячеек в буфер обмена или в другой диапазон. Он аналогичен сочетанию клавиш Ctrl + C в Excel.
📌 Как работает?
🔹 Если не указывать целевой диапазон, данные копируются в буфер обмена.
🔹 Если указать целевой диапазон, копируемый диапазон вставляется сразу.
📌 Примеры
✅ 1. Копировать диапазон в буфер обмена
✅ 2. Копировать и вставить в другой диапазон
✅ 3. Копировать на другой лист
✅ 4. Копировать весь столбец
✅ 5. Копировать и вставить специальным способом (PasteSpecial), когда требуется вставить только значения, формулы или форматы:
⚠️ Важно:
🔹 Если не указывать Destination, данные просто копируются в буфер обмена.
🔹 Copy копирует всё: значения, формулы, формат, комментарии, примечания.
🔹 Если нужно вставить только значения, используйте метод PasteSpecial.
🔹 После использования Copy, включается режим "марша муравьёв" (подвижная пунктирная рамка). Уберите его командой Application.CutCopyMode = False.
💡 Когда использовать?
✅ Для автоматического копирования данных между диапазонами и листами.
✅ В макросах, где требуется дублировать ячейки или их содержимое.
✅ При подготовке отчётов или форм, когда требуется сохранять форматирование.
#VBA #ExcelVBA #Copy #Range #PasteSpecial
Метод Copy позволяет скопировать содержимое и форматирование ячеек в буфер обмена или в другой диапазон. Он аналогичен сочетанию клавиш Ctrl + C в Excel.
📌 Как работает?
🔹 Если не указывать целевой диапазон, данные копируются в буфер обмена.
🔹 Если указать целевой диапазон, копируемый диапазон вставляется сразу.
📌 Примеры
✅ 1. Копировать диапазон в буфер обмена
Sub CopyToClipboard()
Range("A1:C3").Copy ' Копирует диапазон A1:C3 в буфер обмена
End Sub
✅ 2. Копировать и вставить в другой диапазон
Sub CopyToAnotherRange()
Range("A1:C3").Copy Destination:=Range("E1") ' Вставит копию в E1:G3
End Sub
✅ 3. Копировать на другой лист
Sub CopyToAnotherSheet()
Sheets("Лист1").Range("A1:C3").Copy Destination:=Sheets("Лист2").Range("A1")
End Sub
✅ 4. Копировать весь столбец
Sub CopyColumn()
Columns("A").Copy Destination:=Columns("D") ' Копирует столбец A в столбец D
End Sub
✅ 5. Копировать и вставить специальным способом (PasteSpecial), когда требуется вставить только значения, формулы или форматы:
Sub CopyAndPasteValues()
Range("A1:C3").Copy
Range("E1").PasteSpecial Paste:=xlPasteValues ' Вставит только значения
Application.CutCopyMode = False ' Убирает пунктирную рамку после копирования
End Sub
⚠️ Важно:
🔹 Если не указывать Destination, данные просто копируются в буфер обмена.
🔹 Copy копирует всё: значения, формулы, формат, комментарии, примечания.
🔹 Если нужно вставить только значения, используйте метод PasteSpecial.
🔹 После использования Copy, включается режим "марша муравьёв" (подвижная пунктирная рамка). Уберите его командой Application.CutCopyMode = False.
💡 Когда использовать?
✅ Для автоматического копирования данных между диапазонами и листами.
✅ В макросах, где требуется дублировать ячейки или их содержимое.
✅ При подготовке отчётов или форм, когда требуется сохранять форматирование.
#VBA #ExcelVBA #Copy #Range #PasteSpecial
🔥 Вставка интервала дат (1)
Автоматическое заполнение датами двух текстовых полей, задающих начало и конец периода.
1️⃣ Текущий месяц
В первое текстовое поле вставляем дату начала месяца, во второе - текущую дату:
Скриншоты сделаны 25.01.2025.
#VBA #ExcelVBA #Format #ИнтервалДат #Период
Автоматическое заполнение датами двух текстовых полей, задающих начало и конец периода.
1️⃣ Текущий месяц
В первое текстовое поле вставляем дату начала месяца, во второе - текущую дату:
Private Sub CommandButton1_Click()
TextBox1 = "01." & Format(Now, "mm.yyyy")
TextBox2 = Format(Now, "dd.mm.yyyy")
End Sub
Скриншоты сделаны 25.01.2025.
#VBA #ExcelVBA #Format #ИнтервалДат #Период
2️⃣ Прошлый месяц
В первое текстовое поле вставляем дату начала прошлого месяца, во второе - дату окончания прошлого месяца:
#VBA #ExcelVBA #Now #Day #DateAdd
В первое текстовое поле вставляем дату начала прошлого месяца, во второе - дату окончания прошлого месяца:
Private Sub CommandButton2_Click()
TextBox1 = "01." & Format(DateAdd("m", -1, Now), "mm.yyyy")
TextBox2 = Format(Now - Day(Now), "dd.mm.yyyy")
End Sub
#VBA #ExcelVBA #Now #Day #DateAdd
🔥 Вставка интервала дат (2)
В этом примере для преобразования дат будем использовать функцию DateSerial. А явное указание свойства Text у текстовых полей позволит не использовать функцию Format — Excel автоматически будет преобразовывать значение даты в текстовый формат системы. И добавим в пример еще три кнопки для вставки периодов.
#VBA #ExcelVBA #Date #DateSerial #ИнтервалДат #Период
В этом примере для преобразования дат будем использовать функцию DateSerial. А явное указание свойства Text у текстовых полей позволит не использовать функцию Format — Excel автоматически будет преобразовывать значение даты в текстовый формат системы. И добавим в пример еще три кнопки для вставки периодов.
#VBA #ExcelVBA #Date #DateSerial #ИнтервалДат #Период
1️⃣ Кнопка «Сегодня»
Поля начальной и конечной дат заполняются значениями текущей даты.
2️⃣ Кнопка «Вчера»
Поля начальной и конечной дат заполняются значениями прошедшей (вчерашней) даты.
3️⃣ Кнопка «Текущий месяц»
Поле начальной даты заполняется значением первого дня текущего месяца, а поле конечной — значением текущей даты.
4️⃣ Кнопка «Прошлый месяц»
Поле начальной даты заполняется значением первого дня предыдущего месяца, а поле конечной — значением последнего дня предыдущего месяца.
5️⃣ Кнопка «Прошлый год»
Поле начальной даты заполняется значением первого дня предыдущего года, а поле конечной — значением последнего дня предыдущего года.
#VBA #ExcelVBA #Date #DateSerial #ИнтервалДат #Период
Поля начальной и конечной дат заполняются значениями текущей даты.
Private Sub CommandButton1_Click()
TextBox1.Text = Date
TextBox2.Text = Date
End Sub
2️⃣ Кнопка «Вчера»
Поля начальной и конечной дат заполняются значениями прошедшей (вчерашней) даты.
Private Sub CommandButton2_Click()
TextBox1.Text = Date - 1
TextBox2.Text = Date - 1
End Sub
3️⃣ Кнопка «Текущий месяц»
Поле начальной даты заполняется значением первого дня текущего месяца, а поле конечной — значением текущей даты.
Private Sub CommandButton3_Click()
TextBox1.Text = DateSerial(Year(Date), Month(Date), 1)
TextBox2.Text = Date
End Sub
4️⃣ Кнопка «Прошлый месяц»
Поле начальной даты заполняется значением первого дня предыдущего месяца, а поле конечной — значением последнего дня предыдущего месяца.
Private Sub CommandButton4_Click()
TextBox1.Text = DateSerial(Year(Date), Month(Date) - 1, 1)
TextBox2.Text = DateSerial(Year(Date), Month(Date), 0)
End Sub
5️⃣ Кнопка «Прошлый год»
Поле начальной даты заполняется значением первого дня предыдущего года, а поле конечной — значением последнего дня предыдущего года.
Private Sub CommandButton5_Click()
TextBox1.Text = DateSerial(Year(Date) - 1, 1, 1)
TextBox2.Text = DateSerial(Year(Date) - 1, 12, 31)
End Sub
#VBA #ExcelVBA #Date #DateSerial #ИнтервалДат #Период
✨ Функции для сортировки массива
🛠 Функция для сортировки массива по возрастанию с числовым сравнением числовых элементов массива
Внешний цикл сравнивает по очереди каждый элемент массива с наименьшем элементом, найденным вложенным циклом среди оставшихся элементов (с бóльшими индексами), и, если наименьший элемент myArray(im) не является текущим элементом myArray(i1), они меняются местами.
🛠 Функция для сортировки массива с выбором вида сортировки
Дополнительный параметр mySort позволяет выбрать сортировку по возрастанию или убыванию и с числовым или текстовым сравнением числовых элементов массива. Значения, которые может принимать параметр mySort в таблице ниже.
#Function #Функция #SortArray #СортировкаМассива
🛠 Функция для сортировки массива по возрастанию с числовым сравнением числовых элементов массива
Function SortArray(myArray As Variant) As Variant
Dim l As Long, u As Long, i1 As Long, i2 As Long, im As Long, tmp As Variant
'Определение наименьшего индекса массива
l = LBound(myArray)
'Определение наибольшего индекса массива
u = UBound(myArray)
For i1 = l To u
im = i1
For i2 = i1 To u
'Поиск наименьшего элемента массива, начиная с элемента myArray(i1)
If myArray(i2) < myArray(im) Then im = i2
Next
'Если наименьший элемент не является текущим (im <> i1),
'тогда наименьший элемент и текущий меняются местами
If im <> i1 Then
tmp = myArray(i1)
myArray(i1) = myArray(im)
myArray(im) = tmp
End If
Next
SortArray = myArray
End Function
Внешний цикл сравнивает по очереди каждый элемент массива с наименьшем элементом, найденным вложенным циклом среди оставшихся элементов (с бóльшими индексами), и, если наименьший элемент myArray(im) не является текущим элементом myArray(i1), они меняются местами.
🛠 Функция для сортировки массива с выбором вида сортировки
Function SortArrayNew(myArray As Variant, mySort As Long) As Variant
Dim l As Long, u As Long, i1 As Long, i2 As Long, im As Long, tmp As Variant
l = LBound(myArray)
u = UBound(myArray)
For i1 = l To u
im = i1
For i2 = i1 To u
Select Case mySort
Case Is = 0
If myArray(i2) < myArray(im) Then im = i2
Case Is = 1
If CStr(myArray(i2)) < CStr(myArray(im)) Then im = i2
Case Is = 2
If myArray(i2) > myArray(im) Then im = i2
Case Is = 3
If CStr(myArray(i2)) > CStr(myArray(im)) Then im = i2
End Select
Next
If im <> i1 Then
tmp = myArray(i1)
myArray(i1) = myArray(im)
myArray(im) = tmp
End If
Next
SortArrayNew = myArray
End Function
Дополнительный параметр mySort позволяет выбрать сортировку по возрастанию или убыванию и с числовым или текстовым сравнением числовых элементов массива. Значения, которые может принимать параметр mySort в таблице ниже.
#Function #Функция #SortArray #СортировкаМассива