Статті

Приклади макросів Excel, написаних за допомогою VBA

Наступні прості приклади макросів Excel були написані за допомогою VBA 

Приблизний час читання: 3 хвилин

Приклад VBA з використанням Array

Наступна підпроцедура зчитує значення з комірок у стовпці A активного аркуша, доки не знайде порожню комірку. Значення зберігаються в масиві. Цей простий приклад макросу Excel ілюструє використання:

  • Оголошення змінних;
  • Динамічні масиви;
  • Цикл Do Until;
  • Зверніться до клітинок на поточному аркуші Excel;
  • Функція VBA Ubound вбудований (який повертає найвищий індекс масиву).
' Sub procedure store values in Column A of the active Worksheet
' into an array
Sub GetCellValues()
Dim iRow As Integer            ' stores the current row number
Dim dCellValues() As Double  ' array to store the cell values
iRow = 1
ReDim dCellValues(1 To 10)
' Do Until loop to extract the value of each cell in column A
' of the active Worksheet, as long as the cell is not blank
Do Until IsEmpty(Cells(iRow, 1))
   ' Check that the dCellValues array is big enough
   ' If not, use ReDim to increase the size of the array by 10
   If UBound(dCellValues) < iRow Then
      ReDim Preserve dCellValues(1 To iRow + 9)
   End If
   ' Store the current cell in the CellValues array
   dCellValues(iRow) = Cells(iRow, 1).Value
   iRow = iRow + 1
Loop
End Sub

Процедура зберігає значення в стовпці A активного аркуша в масиві, зауважте, що:

  • Цикл Do Until витягує значення кожної клітинки в стовпці A активного аркуша, ігноруючи порожні клітинки
  • Умова "If UBound(dCellValues) < iRow” перевіряє, чи достатньо великий масив dCellValues ​​для зберігання інформації, якщо ні, використовуйте ReDim, щоб збільшити розмір масиву на 10
  • Нарешті, освіта​​dCellValues(iRow) = Cells(iRow, 1).Value” Зберігає поточну клітинку в масиві CellValues ​​​​

Приклад VBA з математичними операціями

Наступна підпроцедура зчитує значення зі стовпця A робочого аркуша під назвою «Sheet2» і виконує арифметичні операції над значеннями. Отримані значення друкуються в стовпці A поточного активного аркуша.

Цей макрос ілюструє:

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.
  • Оголошення змінних;
  • Об’єкти Excel (зокрема, використання ключового слова Set і як отримати доступ до об’єкта «Columns» з об’єкта «Sheets»);
  • Цикл Do Until;
  • Доступ до аркушів і діапазонів комірок у поточній книзі Excel.
' Sub procedure to loop through the values in Column A of the Worksheet
' "Sheet2", perform arithmetic operations on each value, and write the
' result into Column A of the current Active Worksheet ("Sheet1")
Sub Transfer_ColA()
Dim i As Integer
Dim Col As Range
Dim dVal As Double
' Set the variable 'Col' to be Column A of Sheet 2
Set Col = Sheets("Sheet2").Columns("A")
i = 1
' Loop through each cell of the column 'Col' until
' a blank cell is encountered
Do Until IsEmpty(Col.Cells(i))
   ' Apply arithmetic operations to the value of the current cell
   dVal = Col.Cells(i).Value * 2 + 1
   ' The command below copies the result into Column A
   ' of the current Active Worksheet - no need to specify
   ' the Worksheet name as it is the active Worksheet.
   Cells(i, 1) = dVal
   i = i + 1
Loop
End Sub

Приклад VBA із записом дати модифікації

Давайте напишемо простий макрос VBA, який запускається, коли клітинка в певному діапазоні нашого аркуша оновлюється. Припустімо, ви хочете відстежувати зміни в стовпці B (B4 – B11) і записати дату й час зміни в стовпці A.
Поступимо так:

  • У вкладці Developer натисніть опцію "Visual Basic”, щоб відкрити редактор VBA.
  • У редакторі VBA двічі клацніть редактор коду, пов’язаний із Sheet2.
  • Виберіть Робочий аркуш на правій (або лівій) вкладці та виберіть параметр Змінити.
  • Додайте код VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
        Target.Range("A1:A1").Value = Now
    End If
End Sub

Збережіть книгу з увімкненими макросами (наприклад, як файл .xlsm).


Тепер щоразу, коли ми оновлюємо клітинку в стовпці B (від рядка 1 до рядка 10), клітинка в стовпці A автоматично відображатиме поточну дату й час.

Ercole Palmeri

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

Останні статті

Veeam пропонує найповнішу підтримку програм-вимагачів, від захисту до реагування та відновлення

Coveware від Veeam продовжить надавати послуги реагування на інциденти кібервимагання. Coveware запропонує криміналістику та можливості відновлення…

Квітень 23 2024

Зелена та цифрова революція: як прогнозне технічне обслуговування трансформує нафтову та газову промисловість

Прогнозне технічне обслуговування революціонізує нафтогазовий сектор завдяки інноваційному та проактивному підходу до управління заводом.…

Квітень 22 2024

Британський антимонопольний регулятор викликає тривогу BigTech через GenAI

CMA Великобританії випустило попередження щодо поведінки Big Tech на ринку штучного інтелекту. Там…

Квітень 18 2024

Casa Green: енергетична революція для сталого майбутнього в Італії

Указ «Case Green», розроблений Європейським Союзом для підвищення енергоефективності будівель, завершив свій законодавчий процес з…

Квітень 18 2024

Читайте Innovation своєю мовою

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

Слідуйте за нами