Articole

Exemple de macrocomenzi Excel scrise cu VBA

Următoarele exemple simple de macrocomandă Excel au fost scrise folosind VBA 

Timp de citire estimat: 3 minute

Exemplu VBA folosind Array

Următoarea procedură Sub citește valorile din celulele din coloana A a foii de lucru active, până când întâlnește o celulă goală. Valorile sunt stocate într-o matrice. Acest exemplu simplu de macrocomandă Excel ilustrează utilizarea:

  • Declarații de variabile;
  • tablouri dinamice;
  • Un ciclu Do Until;
  • Consultați celulele din foaia de lucru Excel curentă;
  • Funcția VBA Ubound builtin (care returnează cel mai mare indice al unui tablou).
' 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

Procedura stochează valorile în coloana A a foii de lucru active într-o matrice, rețineți că:

  • Ciclul Do Until extrage valorile fiecărei celule din coloana A a foii de lucru active, ignorând celulele goale
  • Conditia "If UBound(dCellValues) < iRow” verifică dacă matricea dCellValues ​​este suficient de mare pentru a păstra informațiile, dacă nu, utilizați ReDim pentru a crește dimensiunea matricei cu 10
  • În sfârșit, educația​​dCellValues(iRow) = Cells(iRow, 1).Value” Stochează celula curentă în matricea CellValues

Exemplu VBA cu operații matematice

Următoarea procedură Sub citește valorile din coloana A a foii de lucru numită „Sheet2” și efectuează operații aritmetice asupra valorilor. Valorile rezultate sunt tipărite în coloana A a foii de lucru active curente.

Această macrocomandă ilustrează:

Buletin informativ de inovare
Nu rata cele mai importante știri despre inovație. Înscrieți-vă pentru a le primi pe e-mail.
  • Declarații de variabile;
  • Obiecte Excel (în special, utilizarea cuvântului cheie Set și modul de accesare a obiectului „Coloane” din obiectul „Foi de calcul”);
  • Un ciclu Do Until;
  • Accesați foile de lucru și intervalele de celule din registrul de lucru Excel actual.
' 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

Exemplu VBA cu înregistrarea datei modificării

Să scriem o macrocomandă VBA simplă care se declanșează atunci când o celulă dintr-un anumit interval al foii noastre este actualizată. Să presupunem că doriți să urmăriți modificările din coloana B (B4 la B11) și să înregistrați data și ora modificării în coloana A.
Să procedăm astfel:

  • În filă Developer faceți clic pe opțiunea "Visual Basic” pentru a deschide editorul VBA.
  • În editorul VBA, faceți dublu clic pe editorul de cod legat de Sheet2.
  • Alegeți Foaia de lucru din fila din dreapta (sau din stânga) și selectați opțiunea Modificare.
  • Adăugați codul 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

Salvați registrul de lucru cu macrocomenzile activate (de exemplu, ca fișier .xlsm).


Acum, de fiecare dată când actualizăm o celulă din coloana B (de la rândul 1 la rândul 10), celula din coloana A va afișa automat data și ora curente.

Ercole Palmeri

Buletin informativ de inovare
Nu rata cele mai importante știri despre inovație. Înscrieți-vă pentru a le primi pe e-mail.

Articole recente

Editorii și OpenAI semnează acorduri pentru a reglementa fluxul de informații procesate de Inteligența Artificială

Luni trecută, Financial Times a anunțat un acord cu OpenAI. FT își licențiază jurnalismul de clasă mondială...

Aprilie 30 2024

Plăți online: Iată cum serviciile de streaming vă fac să plătiți pentru totdeauna

Milioane de oameni plătesc pentru serviciile de streaming, plătind taxe lunare de abonament. Este o părere comună că tu...

Aprilie 29 2024

Veeam oferă cel mai complet suport pentru ransomware, de la protecție la răspuns și recuperare

Coveware de la Veeam va continua să ofere servicii de răspuns la incidente de extorcare cibernetică. Coveware va oferi capacități criminalistice și de remediere...

Aprilie 23 2024

Revoluția verde și digitală: cum întreținerea predictivă transformă industria petrolului și gazelor

Întreținerea predictivă revoluționează sectorul petrolului și gazelor, cu o abordare inovatoare și proactivă a managementului uzinelor...

Aprilie 22 2024