Артыкулы

Прыклады макрасаў Excel, напісаных з дапамогай VBA

Наступныя простыя прыклады макрасаў Excel былі напісаны з дапамогай VBA 

Разліковы час чытання: 3 хвілін

Прыклад VBA з выкарыстаннем Array

Наступная працэдура 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 з матэматычнымі аперацыямі

Наступная падпрацэдура счытвае значэнні са слупка 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: энергетычная рэвалюцыя для ўстойлівай будучыні ў Італіі

Указ «Зялёныя дамы», распрацаваны Еўрапейскім саюзам для павышэння энергаэфектыўнасці будынкаў, завяршыў свой заканадаўчы працэс з...

Красавік 18 2024

Чытайце Innovation на сваёй мове

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

Выконвайце за намі