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.
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.
Practica 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 escribir | significado |
|---|---|
| Sub MacroName() 〜 End Sub | El principio y el final de una Macros (procedimiento) |
| ' Comentario | ' Notas que no se ejecutan desde el final de la línea |
| Dim item As Long | Prepare 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).Row | La última fila con datos en la columna A. |
| .Value | valor de celda |
| If condition Then 〜 End If | Ejecutar sólo cuando se cumplan las condiciones. |
| For i = 1 To 10 〜 Next i | repetir un número determinado de veces |
| For Each item In targetRange 〜 Next | Procesar celdas en el rango una por una |
| Function MacroName() … End Function | Funció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.
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.
Sub RunAll()
Call CheckSales ' llamar a otra Macros
Call SayHello
End SubCó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 "=".
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| molde | que poner |
|---|---|
| Long | Entero (número de fila, número de elementos, etc.) |
| Double | Números incluyendo decimales (cantidades, porcentajes, etc.) |
| String | cuerda |
| Date | Fecha/hora |
| Boolean | True / False |
| Variant | Cualquier cosa puede caber (cuando no te decides por un tipo) |
| Worksheet / Range | Hoja/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.
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.ClearContentsPara 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.
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.
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 hojaSi 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.
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íneaTabla completa/turno/expandir
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".
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 pegarRamificació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 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 IfIf 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 IfAl dividir en varias formas según un valor, "Seleccionar caso" es más fácil de leer.
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 SelectRepetir (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.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iCuando procese celdas de un rango u hojas de un libro una por una, utilice "Para cada uno".
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 wsSi 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 .
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
LoopFor i = 2 To 100
If Cells(i, 1).Value = "totales" Then Exit For ' salir a mitad de camino
Next iCó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 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 SubUsando funciones de hoja de trabajo con VBA
Las funciones utilizadas en las celdas, como SUMA y CONTAR.SI, se pueden llamar con "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.
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 "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
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 trabajoSi 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".
Sub RunFaster()
Application.ScreenUpdating = False ' Detener actualizaciones de pantalla
' ...Proceso que lleva tiempo...
Application.ScreenUpdating = True ' volver al último
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("cuenta").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Recibí un error:" & Err.Description
End SubEjemplo 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.
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 SubContiene 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.