товары

Примеры макросов Excel, написанных с помощью VBA

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

Примерное время чтения: 3 Minuti

Пример VBA с использованием массива

Следующая процедура Sub считывает значения из ячеек в столбце 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 с математическими операциями

Следующая процедура Sub считывает значения из столбца A листа с именем «Лист2» ​​и выполняет арифметические операции над значениями. Полученные значения печатаются в столбце A текущего активного листа.

Этот макрос иллюстрирует:

Инновационный бюллетень
Не пропустите самые важные новости об инновациях. Зарегистрируйтесь, чтобы получать их по электронной почте.
  • Объявления переменных;
  • Объекты Excel (в частности, использование ключевого слова Set и способ доступа к объекту «Столбцы» из объекта «Листы»);
  • Цикл 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

Инновационный бюллетень
Не пропустите самые важные новости об инновациях. Зарегистрируйтесь, чтобы получать их по электронной почте.

АРТИКОЛИ recenti

Veeam предлагает наиболее полную поддержку программ-вымогателей: от защиты до реагирования и восстановления.

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

Апрель 23 2024

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

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

Апрель 22 2024

Антимонопольный регулятор Великобритании поднял тревогу BigTech по поводу GenAI

Британское CMA выступило с предупреждением о поведении крупных технологических компаний на рынке искусственного интеллекта. Там…

Апрель 18 2024

Casa Green: энергетическая революция для устойчивого будущего в Италии

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

Апрель 18 2024

Читайте «Инновации» на вашем языке

Инновационный бюллетень
Не пропустите самые важные новости об инновациях. Зарегистрируйтесь, чтобы получать их по электронной почте.

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