Introducción a las macros y VBA.

Cómo empezar con Excel VBA
Lista de códigos de uso frecuente

Hemos resumido los preparativos para empezar a escribir VBA y los códigos básicos que se utilizan con frecuencia. Presentaremos ejemplos que puede copiar y probar, incluida la especificación de celda/rango, variables, ramificación condicional, repetición y cómo escribir funciones.

Si desea saber qué son las macros y VBA, consulte Artículo de introducción a Macros/VBA primero.

Preparando el entorno de Programador (Windows)

No necesita ningún otro software para escribir VBA. Escríbalo en VBE(Visual Basic Editor) en Excel y ejecútelo tal cual. Primero, prepare lo siguiente solo una vez.

1. Muestra la pestaña de desarrollador.

Abra "Archivo" → "Opciones" → "Personalizar cinta", marque "Desarrollador" en la lista de "Pestañas principales" a la derecha y presione "Aceptar". Aparecerá una pestaña "Desarrollador" en la cinta.

2. Abra VBE

Haga clic en "Visual Basic" en la pestaña "Desarrollador".Alt+F11Pero puedo abrirlo. Al presionarlo nuevamente, regresará a la pantalla de Excel.

3. Agregar módulo estándar

Seleccione "Insertar" → "Módulo estándar" en el menú VBE. "Módulo1" se creará en el proyecto de la izquierda y podrá escribir código a la derecha. Las macros ordinarias están escritas en este módulo estándar.

4. Active "Forzar declaración de variable".

Marque "Forzar declaración de variable" en la pestaña "Herramientas" → "Opciones" → "Editar" de VBE. La siguiente línea se inserta automáticamente al principio del módulo recién creado y se mostrará un mensaje de error para informarle si ha escrito mal un nombre de variable.

parte superior del módulo
Option Explicit   ' Coloca esta línea al inicio del módulo para exigir que las variables se declaren con Dim.

5. Escribir y ejecutar

Después de escribir el código, haga clic dentro de Sub ~ End Sub y luego presione "▶" (Sub/Ejecutar formulario de usuario) en la barra de herramientas, oF5Presione Desde la pantalla de Excel, haga clic en "Macros" (Alt+F8) para seleccionar un nombre y ejecutarlo.

Si desea verificar los valores intermedios, vaya a "Ver" → "Ventana inmediata" de VBE (Ctrl+G) y escriba "Debug.Print nombre de variable" en el código, el valor aparecerá allí.

6. Guardar como libro de trabajo habilitado para macros (.xlsm)

Para el libro de trabajo en el que escribió VBA, seleccione "Libro de Excel habilitado para macros (*.xlsm)" en "Guardar como". Si lo guarda como un archivo .xlsx normal, el código que escribió se perderá.

Cuando abre el libro, si recibe un mensaje que dice "Advertencia de seguridad: las macros se han deshabilitado", haga clic en "Habilitar contenido" solo si el libro es uno que usted creó o es de confianza. Es posible que se bloqueen macros en archivos guardados desde el correo electrónico o Internet. En ese caso, haga clic derecho en el archivo → seleccione "Propiedades" y marque "Permitir".

Los cambios realizados con una Macros no se pueden deshacer usando Ctrl+Z.Cuando lo pruebes, utiliza una copia del libro de trabajo o datos de práctica.

Para Mac, muestre la pestaña de desarrollador seleccionando el menú "Excel" → "Preferencias" → "Cinta y barra de herramientas" y abra VBE en "Visual Basic" en la pestaña de desarrollador.

MacrowPractica usando el navegadorPractica desde mostrar la pestaña de Programador hasta ejecutar el código →

Una lista de referencia rápida de códigos de uso frecuente

Si puede leer tanto, podrá leer muchas de las macros y códigos grabados creados por la IA. Las instrucciones detalladas para cada uno se presentan en las secciones siguientes.

como escribirsignificado
Sub MacroName() 〜 End SubEl principio y el final de una Macros (procedimiento)
' Comentario' Notas que no se ejecutan desde el final de la línea
Dim item As LongPrepare una variable (Long es un número entero)
Set item = Worksheets("cuenta")Poner hojas, celdas, etc. en variables.
Range("A1")Celda A1
Range("A1:C5")Rango de A1 a C5
Cells(row, column)Especificar celdas por número de fila/columna
Cells(Rows.Count, 1).End(xlUp).RowLa última fila con datos en la columna A.
.Valuevalor de celda
If condition Then 〜 End IfEjecutar sólo cuando se cumplan las condiciones.
For i = 1 To 10 〜 Next irepetir un número determinado de veces
For Each item In targetRange 〜 NextProcesar celdas en el rango una por una
Function MacroName() … End FunctionFunción casera que devuelve un valor
WorksheetFunction.Sum(targetRange)Usando funciones de hoja de trabajo con VBA
MsgBox "personajes"mostrar mensaje

Forma básica de Macros (Sub) y comentarios.

La Macros comienza con "Nombre de submacro()" y termina con "End Sub". Los comandos escritos durante este tiempo se ejecutarán en orden desde arriba. El japonés también se puede utilizar en nombres de macros.

Forma básica de Macros
Sub SayHello()
    ' Esta línea está comentada (no ejecutada)
    MsgBox "hola"
End Sub

「'" (comilla simple) al final de la línea hay un comentario. Escribir lo que estás haciendo te ayudará a leerlo más tarde o pasárselo a otra persona.

Utilice "Llamar" para llamar a otras macros.

llamar Macros
Sub RunAll()
    Call CheckSales     ' llamar a otra Macros
    Call SayHello
End Sub

Cómo escribir variables y constantes

Las variables son cuadros que almacenan valores que se están calculando o valores que se utilizan muchas veces. Prepárelo con "Nombre de variable atenuada como tipo" e ingrese el valor con "=".

Preparar y utilizar variables.
Sub VariablesExample()
    Dim total As Long        ' entero
    Dim customer As String   ' cuerda
    Dim price As Double      ' numeros con decimales
    Dim today As Date        ' Fecha
    Dim finished As Boolean  ' Verdadero o Falso

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

    Range("A1").Value = customer & ":" & total & "importar"
End Sub
moldeque poner
LongEntero (número de fila, número de elementos, etc.)
DoubleNúmeros incluyendo decimales (cantidades, porcentajes, etc.)
Stringcuerda
DateFecha/hora
BooleanTrue / False
VariantCualquier cosa puede caber (cuando no te decides por un tipo)
Worksheet / RangeHoja/celda (insertar con conjunto)

Al almacenar "cosas" (objetos) como hojas o celdas en variables, agregue "Establecer" al principio. Si olvida adjuntarlo, se producirá un error, que es donde tropiezo a menudo.

Poner celdas de hoja en variables
Dim ws As Worksheet
Set ws = Worksheets("cuenta")    ' Insertar hojas y celdas con Set
ws.Range("A1").Value = "Ventas totales"

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

Para los valores que no cambian durante el proceso, como la tasa del impuesto al consumo, si usa "Const" para convertirlo en una constante, solo necesita cambiar un lugar al cambiarlo.

constante
Const TAX_RATE As Double = 0.1   ' Un valor que no cambia durante el proceso.

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

Cómo especificar celdas/rangos

Lo más común que se escribe en VBA es especificar celdas. 「Range("A1")" es la dirección de la celda y "Celdas (fila, columna)" se especifica mediante un número.Las celdas, que se pueden especificar por número, resultan útiles para desplazar filas una por una durante la repetición.

Especificación de celdas/rangos
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Agrupados en A1-C3
Range("A:A").Font.Bold = True               ' Toda la columna A
Range("2:2").Font.Bold = True               ' toda la segunda fila
Cells(2, 3).Value = "C2"                     ' 2.ª fila/3.ª columna (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("cuenta").Range("A1").Value = "totales" ' Especificar hoja

Si no escribe un nombre de hoja, se seleccionará la hoja que está actualmente abierta (hoja activa). Al operar otra hoja, haga clic enWorksheets("nombre de la hoja").”al frente.

encontrar la última fila

Para tablas donde el número de filas cambia cada mes, verifique cuántos datos hay antes de procesar. Esta es una forma de escribir para encontrar el número de fila de la primera celda que contiene datos, comenzando desde la celda inferior de la columna A y avanzando hacia arriba.

última línea
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Buscar desde la parte inferior de la columna A hasta la parte superior

Range("A2:A" & lastRow).Font.Bold = True     ' Desde la parte inferior del título hasta la última línea

Tabla completa/turno/expandir

Región actual・Desplazamiento・Cambiar tamaño
Range("A1").CurrentRegion.Select       ' Toda la mesa conectada a A1
Range("A1").Offset(1, 0).Value = "abajo"    ' 1 línea debajo (A2)
Range("A1").Offset(0, 2).Value = "correcto"    ' 2da fila derecha (C1)
Range("A1").Resize(3, 2).Select         ' 3 filas x 2 columnas de A1 (A1:B3)

Manipulación de valores, fórmulas y formatos.

Los valores de las celdas se leen y escriben usando ".Value". Para la fórmula, ingrese la misma cadena que cuando la ingresa en Excel en ".Formula".

Valor/Fórmula/Formato
Range("D2").Formula = "=B2*C2"                  ' introduce la fórmula
Range("A2:D10").ClearContents                   ' Eliminar solo el valor (el formato permanece)
Range("A1").Font.Bold = True                    ' Negrita
Range("A1").Interior.Color = RGB(255, 242, 204) ' color de relleno
Range("D2:D10").NumberFormat = "#,##0"          ' Separador de 3 dígitos
Range("A1:D10").Copy Destination:=Worksheets("reservar").Range("A1")  ' copiar y pegar

Ramificación condicional (If · Select Case)

Utilice "Si ~ Entonces" para separar el procesamiento según las condiciones. No olvides el "Finalizar si" al final.Utilice "ElseIf" para dividir la condición en varias condiciones y "Else" cuando no se aplique ninguna de las condiciones.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Aprobado"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Reconfirmación"
Else
    Range("C2").Value = "fallar"
End If
Juicio en blanco/condiciones múltiples
If Range("A2").Value = "" Then
    MsgBox "A2 está en blanco"
End If

' Y (ambos), O (cualquiera), <> (no iguales)
If Range("B2").Value >= 60 And Range("C2").Value <> "Ausencia" Then
    Range("D2").Value = "OK"
End If

Al dividir en varias formas según un valor, "Seleccionar caso" es más fácil de leer.

Select Case
Select Case Range("B2").Value
    Case "Tokio", "Yokohama"
        Range("C2").Value = "Kantō"
    Case "Osaka", "Kioto"
        Range("C2").Value = "Kansái"
    Case Else
        Range("C2").Value = "Otro"
End Select

Repetir (For · For Each · Do While)

Realizar el mismo procesamiento para cada fila es donde VBA muestra su mayor poder."Para ~ Siguiente" se repite mientras se incrementa la variable i en 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

Cuando procese celdas de un rango u hojas de un libro una por una, utilice "Para cada uno".

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' rellena los espacios en blanco con rojo
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' todas las hojas
    ws.Range("A1").Font.Bold = True
Next ws

Si no se determina la fila final, utilice "Hacer mientras" para repetir siempre que se cumplan las condiciones.Si olvidas "r = r + 1", no podrás parar.Cuando no se detiene,EscOCtrl+BreakPuedes interrumpirlo con .

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Hasta que la columna A quede en blanco
    Cells(r, 5).Value = "Confirmado"
    r = r + 1
Loop
Salir por
For i = 2 To 100
    If Cells(i, 1).Value = "totales" Then Exit For   ' salir a mitad de camino
Next i

Cómo escribir y usar funciones

Cuando hablamos de "funciones" en VBA, existen tres tipos:

Crea tu propia función (Función)

Si lo crea usando "Función", se convertirá en una función que devuelve el valor calculado. Si pones un valor en el nombre de la función, ese es el resultado.Si lo escribes en un módulo estándar, puedes ingresar "=Importe con impuestos incluidos (A2)" en una celda y usarlo de la misma manera que una función de hoja de cálculo.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' El valor que ingresa en el nombre de la función se convierte en el resultado.
End Function

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

Usando funciones de hoja de trabajo con VBA

Las funciones utilizadas en las celdas, como SUMA y CONTAR.SI, se pueden llamar con "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"), "Tokio")

funciones VBA

VBA también proporciona funciones que manejan fechas y cadenas.

Formato・Len・Izquierda・Reemplazar, etc.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' la fecha de hoy en el texto
Range("A2").Value = Now                           ' fecha y hora actuales
Range("A3").Value = Len("Komorebi Shop")             ' Número de caracteres → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 caracteres de la izquierda → 2026
Range("A5").Value = Replace("Tokio Sucursal", "Sucursal", "") ' Reemplazar → Tokio
Range("A6").Value = Trim("  Tokio  ")               ' Borrar los espacios antes y después.

Mensaje y entrada (MsgBox · InputBox)

Se utiliza para notificar el final del procesamiento o para confirmar antes de la Ejecutar. Si usa "InputBox", puede ingresar el mes, persona a cargo, etc. cada vez que ejecute el programa.

MsgBox · InputBox
MsgBox "Se acabó"

If MsgBox("¿Quieres ejecutarlo?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("¿Cuantos meses?")
Range("A1").Value = answer & "Mensual"

Operaciones de hoja/libro

libro de hojas
Worksheets("Ventas").Activate                    ' cambiar hojas
Worksheets("Ventas").Copy After:=Worksheets(Worksheets.Count)  ' copiar hoja
ActiveSheet.Name = "Oct"                        ' Cambiar nombre de hoja
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' agregar hoja

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokio_October.xlsx")
book.Close SaveChanges:=False                    ' Cerrar sin guardar
ThisWorkbook.Save                                ' Guarde este libro de trabajo

Si hay mucho procesamiento por realizar, puede dejar de actualizar la pantalla y finalizará más rápido. Puede escribir el proceso cuando se produce un error utilizando "En caso de error, Ir a".

Detener actualizaciones de pantalla
Sub RunFaster()
    Application.ScreenUpdating = False   ' Detener actualizaciones de pantalla
    ' ...Proceso que lleva tiempo...
    Application.ScreenUpdating = True    ' volver al último
End Sub
Prepárate para los errores
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("cuenta").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Recibí un error:" & Err.Description
End Sub

Ejemplo combinado: cálculo y coloración de la tabla de ventas

Combinando el código hasta ahora, obtenemos esto: en la hoja "Ventas", en una tabla con el nombre del producto en la columna A, la cantidad en la columna B y el precio unitario en la columna C, calcule la cantidad en la columna D y coloree las filas de 100.000 yenes o más de verde.

cheque de ventas
Sub CheckSales()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Set ws = Worksheets("Ventas")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        ' Monto = Cantidad × Precio unitario
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' Si supera los 100.000 yenes, es verde.
        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 fila"
End Sub

Contiene variables (Dim), especificación de hoja (Set), fila final, repetición (For) y bifurcación condicional (If). Si puede leer "qué se está haciendo en qué celda" fila por fila, puede cambiar el número de filas y las condiciones para adaptarlas a su tabla.

Incluso cuando tiene código de creación de IA, si puede leer esta forma, puede verificar usted mismo qué columna se está calculando y si se cumplen las condiciones.

Más información

Recomendamos consultar la lista de códigos para ver cómo escribirlo y luego probarlo usando el archivo de material didáctico. Este libro introductorio paso a paso le permite practicar todo, desde la grabación de macros hasta variables, repetición y ramificación condicional con ejemplos conectados.

Para aquellos que se sienten atrapados haciéndolo solos, o aquellos que quisieran discutir áreas de su trabajo que pueden automatizarse, tomar un curso impartido por un instructor también es una opción.

En Cómo estudiar macros y VBA también se explica cómo elegir un método de estudio.