Introduction aux macros et à VBA

Comment démarrer avec Excel VBA
Liste des codes fréquemment utilisés

Nous avons résumé les préparatifs pour commencer à écrire du VBA et les codes de base souvent utilisés. Nous présenterons des exemples que vous pouvez copier et essayer, notamment la spécification de cellule/plage, les variables, le branchement conditionnel, la répétition et la façon d'écrire des fonctions.

Si vous souhaitez savoir ce que sont les macros et VBA, veuillez d'abord consulter Article d'introduction aux macros/VBA.

Préparation de l'environnement de Développeur (Windows)

Vous n'avez besoin d'aucun autre logiciel pour écrire du VBA. Écrivez-le en VBE(Visual Basic Editor) dans Excel et exécutez-le tel quel. Tout d’abord, préparez ce qui suit une seule fois.

1. Afficher l'onglet développeur

Ouvrez « Fichier » → « Options » → « Personnaliser le ruban », cochez « Développeur » dans la liste des « Onglets principaux » à droite et appuyez sur « OK ». Un onglet « Développeur » apparaîtra sur le ruban.

2. Ouvrez VBE

Cliquez sur "Visual Basic" dans l'onglet "Développeur".Alt+F11Mais je peux l'ouvrir. En appuyant à nouveau dessus, vous reviendrez à l’écran Excel.

3. Ajouter un module standard

Sélectionnez "Insertion" → "Module standard" dans le menu VBE. "Module1" sera créé dans le projet à gauche, et vous pourrez écrire du code à droite. Les macros ordinaires sont écrites dans ce module standard.

4. Activez « Forcer la déclaration des variables »

Cochez "Forcer la déclaration des variables" dans l'onglet "Outils" → "Options" → "Modifier" de VBE. La ligne suivante est automatiquement insérée au début du module nouvellement créé et un message d'erreur s'affichera pour vous informer si vous avez mal saisi un nom de variable.

haut du module
Option Explicit   ' Au début du module, cette instruction impose la déclaration des variables avec Dim.

5. Écrivez et exécutez

Après avoir écrit le code, cliquez à l'intérieur de Sub ~ End Sub, puis appuyez sur "▶" (Sub/Run User Form) dans la barre d'outils, ouF5Appuyez sur Depuis l'écran Excel, cliquez sur "Macros" (Alt+F8) pour sélectionner un nom et l'exécuter.

Si vous souhaitez vérifier les valeurs intermédiaires, accédez à "Affichage" → "Fenêtre immédiate" de VBE (Ctrl+G) et écrivez "Nom de la variable Debug.Print" dans le code, la valeur y apparaîtra.

6. Enregistrer en tant que classeur prenant en charge les macros (.xlsm)

Pour le classeur dans lequel vous avez écrit VBA, sélectionnez "Classeur Excel prenant en charge les macros (*.xlsm)" dans "Enregistrer sous". Si vous l'enregistrez en tant que fichier .xlsx standard, le code que vous avez écrit sera perdu.

Lorsque vous ouvrez le classeur, si vous recevez un message indiquant « Avertissement de sécurité : les macros ont été désactivées », cliquez sur « Activer le contenu » uniquement si le classeur est celui que vous avez créé ou en qui vous avez confiance. Les macros peuvent être bloquées dans les fichiers enregistrés à partir du courrier électronique ou d'Internet. Dans ce cas, faites un clic droit sur le fichier → sélectionnez « Propriétés » et cochez « Autoriser ».

Les modifications apportées à l'aide d'une Macros ne peuvent pas être annulées à l'aide de Ctrl+Z.Lorsque vous l'essayez, utilisez une copie du classeur ou des données d'entraînement.

Pour Mac, affichez l'onglet développeur en sélectionnant le menu "Excel" → "Préférences" → "Ruban et barre d'outils", et ouvrez VBE dans "Visual Basic" sur l'onglet développeur.

MacrowEntraînez-vous à utiliser le navigateurEntraînez-vous depuis l'affichage de l'onglet de Développeur jusqu'à l'Exécuter du code →

Une liste de référence rapide des codes fréquemment utilisés

Si vous pouvez lire autant de choses, vous pourrez lire de nombreuses macros et codes enregistrés créés par l’IA. Des instructions détaillées pour chacun sont présentées dans les sections ci-dessous.

Comment écriresens
Sub MacroName() 〜 End SubLe début et la fin d'une Macros (procédure)
' Commentaire' Notes qui ne sont pas exécutées jusqu'à la fin de la ligne
Dim item As LongPréparez une variable (Long est un entier)
Set item = Worksheets("décompte")Mettez des feuilles, des cellules, etc. dans des variables
Range("A1")Cellule A1
Range("A1:C5")Gamme de A1 à C5
Cells(row, column)Spécifier les cellules par numéro de ligne/colonne
Cells(Rows.Count, 1).End(xlUp).RowLa dernière ligne avec des données dans la colonne A
.Valuevaleur de cellule
If condition Then 〜 End IfExécuter uniquement lorsque les conditions sont remplies
For i = 1 To 10 〜 Next irépéter un certain nombre de fois
For Each item In targetRange 〜 NextTraiter les cellules à portée une par une
Function MacroName() … End FunctionFonction maison qui renvoie une valeur
WorksheetFunction.Sum(targetRange)Utiliser les fonctions de feuille de calcul avec VBA
MsgBox "personnages"afficher le message

Forme de base de la Macros (Sub) et commentaires

La Macros commence par « Sub Macros name() » et se termine par « End Sub ». Les commandes écrites pendant ce temps seront exécutées dans l'ordre du haut. Le japonais peut également être utilisé dans les noms de macros.

Forme de base de la Macros
Sub SayHello()
    ' Cette ligne est commentée (non exécutée)
    MsgBox "Bonjour"
End Sub

「'" (guillemet simple) à la fin de la ligne se trouve un commentaire. Écrire ce que vous faites vous aidera à le lire plus tard ou à le transmettre à quelqu'un d'autre.

Utilisez "Appeler" pour appeler d'autres macros.

appeler une Macros
Sub RunAll()
    Call CheckSales     ' appeler une autre Macros
    Call SayHello
End Sub

Comment écrire des variables et des constantes

Les variables sont des zones qui stockent les valeurs en cours de calcul ou les valeurs utilisées plusieurs fois. Préparez-le avec "Nom de la variable Dim Comme type" et saisissez la valeur avec "=".

Préparer et utiliser des variables
Sub VariablesExample()
    Dim total As Long        ' entier
    Dim customer As String   ' chaîne
    Dim price As Double      ' nombres avec décimales
    Dim today As Date        ' Date
    Dim finished As Boolean  ' Vrai ou faux

    total = 12
    customer = "Komorebi Shop"
    price = 1200.5
    today = Date
    finished = False

    Range("A1").Value = customer & ":" & total & "importe"
End Sub
mouleQue mettre dedans
LongEntier (numéro de ligne, nombre d'éléments, etc.)
DoubleNombres incluant des décimales (montants, pourcentages, etc.)
Stringchaîne
DateDate/heure
BooleanTrue / False
VariantTout peut s'adapter (quand vous ne décidez pas d'un type)
Worksheet / RangeFeuille/cellule (insérer avec Set)

Lorsque vous stockez des « choses » (objets) telles que des feuilles ou des cellules dans des variables, ajoutez "Set" au début. Si vous oubliez de le joindre, une erreur se produira, et c'est là que je trébuche souvent.

Placer les cellules de la feuille dans des variables
Dim ws As Worksheet
Set ws = Worksheets("décompte")    ' Insérer des feuilles et des cellules avec Set
ws.Range("A1").Value = "Ventes totales"

Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContents

Pour les valeurs qui ne changent pas au cours du processus, comme le taux de taxe à la consommation, si vous utilisez « Const » pour en faire une constante, vous n'avez qu'à changer d'endroit lors de la modification.

constante
Const TAX_RATE As Double = 0.1   ' Une valeur qui ne change pas au cours du processus

Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)

Comment spécifier des cellules/plages

La chose la plus courante à écrire en VBA consiste à spécifier des cellules. 「Range("A1")" est l'adresse de la cellule et "Cellules (ligne, colonne)" est spécifié par un numéro.Les cellules, qui peuvent être spécifiées par un nombre, sont utiles lors du déplacement des lignes une par une lors d'une répétition.

Spécification de cellules/plages
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Regroupé en A1-C3
Range("A:A").Font.Bold = True               ' Colonne A entière
Range("2:2").Font.Bold = True               ' toute la deuxième rangée
Cells(2, 3).Value = "C2"                     ' 2ème ligne/3ème colonne (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("décompte").Range("A1").Value = "Total" ' Préciser la feuille

Si vous n'écrivez pas de nom de feuille, la feuille actuellement ouverte (feuille active) sera ciblée. Lorsque vous utilisez une autre feuille, cliquez surWorksheets("nom de la feuille").» devant.

trouver la dernière ligne

Pour les tableaux dont le nombre de lignes change chaque mois, vérifiez la quantité de données avant le traitement. Il s'agit d'une façon d'écrire pour trouver le numéro de ligne de la première cellule contenant des données, en commençant par la cellule du bas de la colonne A et en remontant.

dernière ligne
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Rechercher du bas de la colonne A vers le haut

Range("A2:A" & lastRow).Font.Bold = True     ' Du bas du titre jusqu'à la dernière ligne

Tableau entier/shift/développer

Région actuelle・Décalage・Redimensionner
Range("A1").CurrentRegion.Select       ' Table entière connectée à A1
Range("A1").Offset(1, 0).Value = "en bas"    ' 1 ligne en dessous (A2)
Range("A1").Offset(0, 2).Value = "à droite"    ' 2ème rangée à droite (C1)
Range("A1").Resize(3, 2).Select         ' 3 lignes x 2 colonnes de A1 (A1:B3)

Manipulation de valeurs, de formules et de formats

Les valeurs des cellules sont lues et écrites à l'aide de ".Value". Pour la formule, saisissez la même chaîne que lors de sa saisie dans Excel dans ".Formula".

Valeur/Formule/Format
Range("D2").Formula = "=B2*C2"                  ' entrez la formule
Range("A2:D10").ClearContents                   ' Supprimez uniquement la valeur (le format reste)
Range("A1").Font.Bold = True                    ' Gras
Range("A1").Interior.Color = RGB(255, 242, 204) ' couleur de remplissage
Range("D2:D10").NumberFormat = "#,##0"          ' Séparateur à 3 chiffres
Range("A1:D10").Copy Destination:=Worksheets("réserve").Range("A1")  ' copier et coller

Branchement conditionnel (If · Select Case)

Utilisez « If ~ Then » pour séparer le traitement en fonction des conditions. N'oubliez pas le "End If" à la fin.Utilisez "ElseIf" pour diviser la condition en plusieurs conditions, et "Else" lorsqu'aucune des conditions ne s'applique.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Réussi"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Reconfirmation"
Else
    Range("C2").Value = "Échec"
End If
Jugement vide/conditions multiples
If Range("A2").Value = "" Then
    MsgBox "A2 est vide"
End If

' Et (les deux), Ou (soit), <> (pas égal)
If Range("B2").Value >= 60 And Range("C2").Value <> "Absence" Then
    Range("D2").Value = "OK"
End If

Lors d'une division en plusieurs manières basées sur une valeur, « Sélectionner la casse » est plus facile à lire.

Select Case
Select Case Range("B2").Value
    Case "Tokyo", "Yokohama"
        Range("C2").Value = "Kanto"
    Case "Ōsaka", "Kyoto"
        Range("C2").Value = "Kansaï"
    Case Else
        Range("C2").Value = "Autre"
End Select

Répéter (For · For Each · Do While)

Effectuer le même traitement pour chaque ligne est l’endroit où VBA montre le plus de puissance."Pour ~ Suivant" se répète tout en incrémentant la variable i de 1.

For … Next (2–10)
Dim i As Long
For i = 2 To 10
    Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i

Lorsque vous traitez les cellules d'une plage ou les feuilles d'un classeur une par une, utilisez « Pour chaque ».

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' remplis les blancs avec du rouge
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' toutes les feuilles
    ws.Range("A1").Font.Bold = True
Next ws

Si la ligne de fin n'est pas déterminée, utilisez « Do While » pour répéter tant que les conditions sont remplies.Si vous oubliez "r = r + 1", vous ne pourrez pas vous arrêter.Quand ça ne s'arrête pas,EscOuCtrl+BreakVous pouvez l'interrompre avec .

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Jusqu'à ce que la colonne A soit vide
    Cells(r, 5).Value = "Confirmé"
    r = r + 1
Loop
Quitter pour
For i = 2 To 100
    If Cells(i, 1).Value = "Total" Then Exit For   ' sortir à mi-chemin
Next i

Comment écrire et utiliser des fonctions

Quand on parle de « fonctions » dans VBA, il en existe trois types :

Créez votre propre fonction (Fonction)

Si vous le créez en utilisant "Fonction", il deviendra une fonction qui renvoie la valeur calculée. Si vous mettez une valeur dans le nom de la fonction, voilà le résultat.Si vous l'écrivez dans un module standard, vous pouvez saisir "=Montant TTC (A2)" dans une cellule et l'utiliser de la même manière qu'une fonction de feuille de calcul.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' La valeur que vous mettez dans le nom de la fonction devient le résultat.
End Function

Sub UseFunction()
    Range("B2").Value = PriceWithTax(Range("A2").Value)
End Sub

Utiliser les fonctions de feuille de calcul avec VBA

Les fonctions utilisées dans les cellules, telles que SUM et COUNTIF, peuvent être appelées avec « WorksheetFunction ».

WorksheetFunction
Range("C11").Value = WorksheetFunction.Sum(Range("C2:C10"))
Range("C12").Value = WorksheetFunction.Average(Range("C2:C10"))
Range("C13").Value = WorksheetFunction.CountIf(Range("B2:B10"), "Tokyo")

Fonctions VBA

VBA fournit également des fonctions qui gèrent les dates et les chaînes.

Format・Len・Gauche・Remplacer etc.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' la date d'aujourd'hui dans le texte
Range("A2").Value = Now                           ' date et heure actuelles
Range("A3").Value = Len("Komorebi Shop")             ' Nombre de caractères → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 caractères en partant de la gauche → 2026
Range("A5").Value = Replace("Tokyo Branche", "Branche", "") ' Remplacer → Tokyo
Range("A6").Value = Trim("  Tokyo  ")               ' Effacer les espaces avant et après

Message et entrée (MsgBox · InputBox)

Utilisé pour notifier la fin du traitement ou pour confirmer avant Exécuter. Si vous utilisez "InputBox", vous pouvez saisir le mois, le responsable, etc. à chaque fois que vous exécutez le programme.

MsgBox · InputBox
MsgBox "C'est fini"

If MsgBox("Voulez-vous l'exécuter ?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("Combien de mois ?")
Range("A1").Value = answer & "Mensuel"

Opérations feuille/livre

livre de feuilles
Worksheets("Ventes").Activate                    ' changer de feuille
Worksheets("Ventes").Copy After:=Worksheets(Worksheets.Count)  ' copie de la feuille
ActiveSheet.Name = "Oct"                        ' Changer le nom de la feuille
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' ajouter une feuille

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False                    ' Fermer sans enregistrer
ThisWorkbook.Save                                ' Enregistrer ce classeur

S'il y a beaucoup de traitement à effectuer, vous pouvez arrêter la mise à jour de l'écran et cela se terminera plus rapidement. Vous pouvez écrire le processus lorsqu'une erreur se produit en utilisant "On Error GoTo".

Arrêter les mises à jour de l'écran
Sub RunFaster()
    Application.ScreenUpdating = False   ' Arrêter les mises à jour de l'écran
    ' ...Processus qui prend du temps...
    Application.ScreenUpdating = True    ' revenir au dernier
End Sub
Soyez prêt aux erreurs
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("décompte").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "J'ai une erreur :" & Err.Description
End Sub

Exemple combiné : calcul et coloration du tableau des ventes

En combinant le code jusqu'à présent, nous obtenons ceci : dans la feuille "Ventes", dans un tableau avec le nom du produit dans la colonne A, la quantité dans la colonne B et le prix unitaire dans la colonne C, calculez le montant dans la colonne D et coloriez en vert les lignes de 100 000 yens ou plus.

Chèque de vente
Sub CheckSales()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Set ws = Worksheets("Ventes")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        ' Montant = Quantité × Prix unitaire
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' Si c'est plus de 100 000 yens, c'est vert.
        If ws.Cells(i, 4).Value >= 100000 Then
            ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
        Else
            ws.Cells(i, 4).Interior.ColorIndex = xlNone
        End If
    Next i

    MsgBox lastRow - 1 & "calculé la ligne"
End Sub

Contient des variables (Dim), une spécification de feuille (Set), une ligne finale, une répétition (For) et un branchement conditionnel (If). Si vous pouvez lire « ce qui est fait dans quelle cellule » ligne par ligne, vous pouvez modifier le nombre de lignes et les conditions en fonction de votre tableau.

Même lorsque l'IA crée du code, si vous pouvez lire cette forme, vous pouvez vérifier par vous-même quelle colonne est calculée et si les conditions sont remplies.

En savoir plus

Nous vous recommandons de consulter la liste de codes pour voir comment l'écrire, puis de l'essayer à l'aide du fichier de matériel pédagogique. Ce livre d'introduction étape par étape vous permet de tout pratiquer, de l'enregistrement de macros aux variables, en passant par la répétition et le branchement conditionnel avec des exemples connectés.

Pour ceux qui se sentent obligés de le faire seuls ou pour ceux qui souhaitent discuter des domaines de leur travail qui peuvent être automatisés, suivre un cours dispensé par un instructeur est également une option.

La manière de choisir une méthode d'étude est également présentée dans Comment étudier les macros et VBA.