Primeros pasos con EXCEL VBA y ejemplos prácticos

Primeros pasos con EXCEL VBA y ejemplos prácticos

He usado VBA antes y lo dejé durante mucho tiempo. Recientemente, debido a que necesito usar Excel para procesar datos, lo usé y usé algunos otros métodos. Comparado con él, siento que VBA todavía tiene algunas ventajas. Por lo tanto, reorganicé las notas del estudio anterior y las publiqué aquí como referencia para quienes las necesiten.

Conceptos básicos de EXCEL VBA

Visual Basic para aplicaciones (VBA) es un lenguaje de macros de Visual Basic, un lenguaje de programación desarrollado por Microsoft para realizar tareas comunes de automatización (OLE) en sus aplicaciones de escritorio. Se puede utilizar principalmente para ampliar las funciones de las aplicaciones de Windows, especialmente el software de Microsoft Office.

Cómo abrir el editor de Excel VBA

Use la tecla de método abreviado Alt + F11 para abrir el editor de VBA

o

Haga clic en el icono "Visual Basic" en la pestaña "Desarrollador"

(¿No ve la pestaña "Desarrollador"? Más sobre eso más adelante)

insertar módulo

Cuando desee insertar un nuevo módulo en un proyecto de VBA, puede hacer clic derecho en el proyecto de VBA y seleccionar el tipo de inserción; simplemente seleccione el módulo aquí, vea la figura a continuación:

[Clasificación del módulo VBA

Formularios (Módulo de Formularios), Módulos (Módulos Estándar), Módulos de Clase.

Los formularios, un tipo especial de módulo, pueden diseñar interfaces.

Los módulos, es decir, los módulos ordinarios, son contenedores para la edición y ejecución de código.

Un módulo de clase también es un tipo especial de módulo, que es más complejo y puede personalizar clases, propiedades, métodos e incluso eventos de clases personalizadas. Con respecto a las clases, una clase es el modelo original de un objeto, un objeto que no ha sido instanciado, y una clase se llama objeto después de haberlo instanciado.

Generalmente, el código se escribe en módulos.

Ejecute el código VBA

Ahora dé un código de demostración simple, es decir, ingrese el siguiente código en el "Módulo 1"

Sub MiCódigo()

    Hoja1.Rango("A1") = "Hola mundo"

Finalizar sub

★Ejecute el código VBA en el editor de VBA, puede usar uno de los siguientes tres métodos:

1. Usa los comandos de la barra de menú

Primero, coloque el cursor en cualquier parte del código que se ejecutará y luego seleccione el comando "Ejecutar → Ejecutar subproceso/formulario de usuario" en la barra de menú.

2. Primero, coloque el cursor en cualquier parte del código que se ejecutará y luego haga clic en el botón ▶ en la barra de herramientas de acceso directo.

3. Usa la tecla de atajo F5

Primero, coloque el cursor en cualquier parte del código que se ejecutará y luego use la tecla de método abreviado F5 para ejecutar el código.

Después de ejecutar, presione Alt + Q para volver a la ventana de la tabla, y puede ver que el contenido de "Hello World" está escrito en la celda A1 de Sheet1, vea la figura a continuación:

[¿Cómo volver a la ventana del formulario desde la ventana de VBA?

Presione las teclas Alt + Q]

★ Además del código VBA presentado anteriormente para ejecutar en el editor de VBA, también se puede ejecutar en la interfaz de la tabla de Excel desde la pestaña "Herramientas de desarrollo".

[Si no ve la pestaña "Desarrollador"? tratar de la siguiente manera

Haga clic derecho en el área en blanco de la cinta, haga clic en el elemento "Desarrollador" en el menú contextual y agregue la pestaña "Desarrollador", vea la figura a continuación:

Haga clic en el ícono "Macro" en la pestaña "Desarrollador", aparecerá una lista de todas las macros contenidas en el libro de trabajo, seleccione la macro deseada y haga clic en el botón "Ejecutar" a la derecha, vea la figura a continuación:

★ Ejecutar asignando una macro al "botón"

Busque "Herramientas de desarrollo→Insertar" y haga clic. Seleccione el "botón" en la parte de control de formulario y luego haga clic en la posición apropiada de la hoja de trabajo ( Hoja de trabajo ) , luego aparecerá una lista de macros, seleccione la macro que desea especificar, haga clic en Aceptar y complete la macro especificada 【Después , haga clic derecho sobre él. El menú contextual que aparece se puede modificar]. Ver animación a continuación:

Guarde un archivo de Excel que contenga código VBA

Si desea guardar un archivo que contiene código VBA, debe elegir la extensión como .xlsm o .xls, [recordatorio: xls es un archivo anterior a la versión 2003, es un archivo xls independientemente de si hay un programa macro y se ha distinguido desde excel 2007. .xlsm contiene código VBA (macro) y .xlsx no contiene código VBA (macro). El valor predeterminado es .xlsx. Si no desea contener código, puede guardarlo como xlsx , y el código VBA se eliminará automáticamente] Vea la imagen a continuación:

Procedimientos y funciones de VBA

☆El procedimiento de VBA comienza con Sub declaración, termina con End Sub declaración, contiene una o más declaraciones y completa un objetivo específico.

La sintaxis básica de un procedimiento VBA es la siguiente:

Nombre del subprocedimiento ([parámetro])

    declaración 1

    declaración 2

    ...

    declaración f

Finalizar sub

Entre ellos puede faltar [parámetro], si lo hay, la sintaxis es la siguiente:

Nombre de variable 1 Como tipo de datos,... Nombre de variable n Como tipo de datos

☆Funciones VBA

Una función de VBA es muy similar a un procedimiento de VBA, excepto por las palabras clave utilizadas, la principal diferencia es que una función puede devolver un valor.

La sintaxis básica de una función VBA es la siguiente:

Función [nombre de función]([parámetro]) Como [tipo de valor devuelto]

    declaración 1

    declaración 2

    ...

    declaración f

    [nombre de la función] = [valor de retorno]

función final

En la declaración contenida en la función, en comparación con el procedimiento, puede ver una declaración más [nombre de función] = [valor de retorno], que es la declaración de valor de retorno de la función.

Modelo de objetos Excel VBA

El modelo de objetos de Excel VBA es una jerarquía de objetos que puede usar al programar, lo que facilita la referencia a los objetos que desea manipular. Hay muchos objetos en Excel VBA. Estos objetos son en realidad jerárquicos, como un árbol. El nivel más alto es Aplicación. La jerarquía de objetos simplificada se muestra en la siguiente figura :

Estos objetos se utilizan comúnmente en los siguientes cuatro tipos:

Solicitud

Libro de trabajo

Hoja de cálculo

Rango

Gran parte del trabajo realizado con Excel gira en torno a estos cuatro objetos y sus miembros. En el nivel superior se encuentra el objeto Aplicación, que es la propia aplicación de Excel, que contiene otros objetos en Excel, como objetos de libro de trabajo; un objeto de libro de trabajo contiene otros objetos, como objetos de hoja de trabajo; y un objeto de hoja de trabajo puede contener otros objetos, como como un objeto de rango, un objeto de rango representa una celda, fila, columna, selección de celda que contiene uno o más bloques de celdas (la selección puede ser contigua o no), o incluso varios grupos de celdas de trabajo en una tabla).

objeto de referencia

Saber cómo hacer referencia a los objetos es crucial al escribir código VBA. Obviamente, cuando desea comenzar a trabajar con un objeto VBA en particular, primero debe identificarlo, es decir, decirle a VBA en qué objeto trabajar.

Una referencia a un miembro de objeto se puede calificar uniendo el nombre del objeto con un punto.

Por ejemplo, Application.Workbooks("Book1.xls").Worksheets("Sheet1").Range("A1") indica una referencia a la celda A1 en Sheet1 en el libro de trabajo Book1, donde Application representa la propia aplicación de Excel, puede ser omitido En particular, si Book1 es el libro de trabajo activo actual, la declaración anterior se puede abreviar como Worksheets("Sheet1").Rango("A1"); si Sheet1 es la hoja de trabajo activa actual, se puede abreviar como Range("A1" ) . Por lo tanto, si el objeto del libro se omite en la referencia, indica que se usa el libro de trabajo activo actual; si también se omite el objeto de la hoja de trabajo, indica que se usa la hoja de trabajo activa actual.

Sintaxis de la propiedad Worksheet.Cells

expresión.Células

expresión Una variable que representa el objeto Hoja de cálculo. Los índices de fila y columna se pueden especificar inmediatamente después de la palabra clave Celdas.

Devuelve un objeto Range que representa (celdas en) la hoja de trabajo, no solo la celda utilizada actualmente.

como:

Worksheets("Sheet1").Cells(5, 3).Font.Size = 14 'Establezca el tamaño de fuente de la celda C5 en Sheet1 en 14 puntos.

Un ejemplo práctico: comparar filas de datos iguales y diferentes en dos tablas de Excel

Los datos se muestran en la siguiente figura:

En la Hoja 1 y la Hoja 2, las columnas "Nombre del elemento 1" y "Nombre del elemento 2" son los datos que se compararán, y los datos de la columna "Condición" se componen del operador de conexión obligatorio y "Nombre del elemento 1", " Item Name 2" columnas, aquí se supone que la fila de datos a comparar consta de dos columnas, y se pueden deducir más columnas por analogía. Los procesos "Comparación 1" y "Comparación 2" utilizan la columna "bandera" de la Hoja1 para registrar los resultados de la comparación. Los procesos "Hoja1 también está en la Hoja2" y "Hoja1 está en la Hoja2 pero no en la Hoja2" utilizan la Hoja3 para registrar los resultados del procesamiento.

["&" y "+" dos operadores

 "&" es una conexión obligatoria, es decir, está conectado pase lo que pase.

 "+" es para concatenar cadenas y para sumar números. (Al usar el signo "+", los tipos antes y después del "+" deben ser consistentes)]

El código fuente es el siguiente :

Sub 比对1()  '在sheet1的标志列,将sheet1中有,sheet2也有的,加标记A;未有A 的说明将sheet1中有sheet2没有的
  Sheet1.Range("D2:D1000").ClearContents
  
  Dim Sheet1数据行数, Sheet2数据行数
  Sheet1数据行数 = 15
  Sheet2数据行数 = 11

  For I = 2 To Sheet1数据行数  'Worksheets("Sheet1").Cells(行,列) 和 Sheet1.Cells(行,列)等效
     For j = 2 To Sheet2数据行数
         If Worksheets("Sheet1").Cells(I, 3) = Worksheets("Sheet2").Cells(j, 3) Then   '两表的比较列——条件
            Worksheets("Sheet1").Cells(I, 4) = "A"  '在标志列加标志
            Exit For
         End If
     Next
  Next

End Sub


'Sheet1中有Sheet2中也有,拷贝到heet3中
Sub Sheet1中有Sheet2中也有()
  Sheet3.Range("A2:D1000").ClearContents
  Set conn = CreateObject("adodb.connection")
  conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  Sq1 = "select  *  from [Sheet1$] where 条件 in(select 条件 from [Sheet2$])"    ''在select之后加Distinct将删除重复的
  Sheet3.[B2].CopyFromRecordset conn.Execute(Sq1)
  conn.Close
  Set conn = Nothing
End Sub


Sub 比对2()  '在sheet1标志列,将sheet1中有,sheet2没有的,加标记B
  Sheet1.Range("D2:D1000").ClearContents
  
  Dim Sheet1数据行数, Sheet2数据行数
  Sheet1数据行数 = 15
  Sheet2数据行数 = 11

  For I = 2 To Sheet1数据行数  'Worksheets("Sheet1").Cells(行,列) 和 Sheet1.Cells(行,列)等效
     Worksheets("Sheet1").Cells(I, 4) = "B"  '在标志列加标志
     For j = 2 To Sheet2数据行数
         If Worksheets("Sheet1").Cells(I, 3) = Worksheets("Sheet2").Cells(j, 3) Then   '两表的比较列——条件
            Worksheets("Sheet1").Cells(I, 4) = ""
            Exit For
         End If
     Next
  Next

End Sub


'Sheet1中有而Sheet2中没有,拷贝到heet3中
Sub Sheet1中有而Sheet2中没有()
  Sheet3.Range("A2:D1000").ClearContents
  Set conn = CreateObject("adodb.connection")
  conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  Sq1 = "select  *  from [Sheet1$] where 条件 not in(select 条件 from [Sheet2$])"  ''在select之后加Distinct将删除重复的
  Sheet3.[a2].CopyFromRecordset conn.Execute(Sq1)
  conn.Close
  Set conn = Nothing
End Sub

Ahora, puede probar el método de operación descrito anteriormente, como:

 

Supongo que te gusta

Origin blog.csdn.net/cnds123/article/details/125412881#comments_27655107
Recomendado
Clasificación