01 Anexo 2 - VBA en Excel

Anuncio
Visual Basic for Applications
en MS Excel
1
Las Macros en MS Excel.
¿Para qué sirve una macro en Excel? Una macro nos ayuda a automatizar
aquellas tareas que hacemos repetidamente. Una macro es una serie de
instrucciones que son guardadas dentro de un archivo de Excel para poder
ser ejecutadas cuando lo necesitemos.
Las macros se escriben en un lenguaje de computadora especial que es
conocido como Visual Basic for Applications (VBA). Este lenguaje permite
acceder a prácticamente todas las funcionalidades de Excel y con ello
también ampliar la funcionalidad del programa.
2
Visualizar la Ficha Programador en la Cinta de Opciones (1 de 2).
Botón derecho en una zona en blanco de la cinta.
3
Visualizar la Ficha Programador en la Cinta de Opciones (2 de 2).
4
La Ficha programador y la Grabadora de Macros
5
Grabar y Ejecutar una Macro
6
Visualizar el Código de una Macro
7
Visualizar el Código de una Macro
8
Libro de Macros Personal
C:\Usuarios\[Usuario]\AppData\Roaming\Microsoft\Excel\XLSTART
9
Libro de Macros Personal
10
Objetos, Propiedades y Métodos de VBA
• Cada elemento de Excel es representado en VBA como un objeto. Por ejemplo,
existe el objeto Workbook que representa a un libro de Excel. También existe el
objeto Sheet que representa una hoja y el objeto Chart para un gráfico.
• Cada uno de estos objetos tiene propiedades y métodos. Por ejemplo, el objeto
Workbook tiene propiedades como ActiveSheet (Hoja activa), Name (Nombre),
ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus métodos son Save
(Guardar), Close (Cerrar), PrintOut (Imprimir), Protect (Proteger), Unprotect
(Desproteger).
11
Objetos, Propiedades y Métodos de VBA
12
Objetos, Propiedades y Métodos de VBA
Para acceder a las propiedades y métodos de un objeto lo hacemos a través de una nomenclatura especial. Justo después del
nombre del objeto colocamos un punto seguido del nombre de la propiedad o del método. Observa este ejemplo donde
hacemos uso de la propiedad Value para la celda A1:
Range("A1").Value = "Hola"
De esta manera asignamos una cadena de texto al valor de la celda A1. Ahora bien, si queremos borrar ese valor que
acabamos de colocar en la celda podemos utilizar el método Clear de la siguiente manera:
Range("A1").Clear
Los objetos tienen muchas propiedades y métodos y a veces es difícil pensar que los llegaremos a memorizar todos por
completo. Sin embargo, el Editor de Visual Basic es de gran ayuda porque justamente al momento de escribir nuestro código
nos proporciona la lista completa de propiedades y métodos para un objeto.
13
Objetos, Propiedades y Métodos de VBA
Para tener acceso a los objetos que están por debajo del objeto Application
podemos utilizar el punto. El punto nos ayuda a navegar por la jerarquía hacia
un nivel inferior. Observa lo que se muestra en el Editor de Visual Basic al
colocar un punto después del objeto Application:
Por ejemplo, si deseamos poner en negrita el texto de la celda A1 debemos
llegar al objeto Range el cual nos dará acceso a modificar la propiedad Bold de
la siguiente manera:
14
Objetos, Propiedades y Métodos de VBA
Objetos predeterminados
Existe una funcionalidad intrínseca de VBA conocida como objetos predeterminados la cual nos permite omitir la escritura de algunos objetos y aun así tener un código funcional. Por ejemplo, en la sentencia mostrada previamente podemos omitir el objeto Application y tener nuestro código funcionando correctamente:
Inclusive podemos omitir los objetos ActiveWorkbook y ActiveSheet sabiendo que el código se ejecutará siempre sobre el libro activo y la hoja que esté activa al momento de la ejecución:
15
Objetos, Propiedades y Métodos de VBA
16
Eventos en VBA
Algunos ejemplos de eventos en VBA son los siguientes:
WorkbookOpen: El usuario abre un libro de Excel.
WorkbookActivate: El usuario activa un libro de Excel.
SelectionChange: El usuario cambia la selección de celdas en una hoja.
Para descubrir los eventos que tiene un objeto es suficiente con abrir el Editor de Visual Basic y posteriormente el Examinador de objetos (F2). En el panel izquierdo se mostrarán los objetos y en el panel derecho las propiedades, métodos y eventos de dicho objeto. Podrás distinguir los eventos porque tienen un icono en forma de rayo (color amarillo):
17
Eventos en VBA
18
Editor VBA
19
Ejemplos VBA en Excel
Cadenas de Texto
20
Ejemplos VBA en Excel
Cadenas de Texto
21
Ejemplos VBA en Excel
Cadenas de Texto
22
Ejemplos VBA en Excel
Tabla de Multiplicar
Sub TablaMultiplicar()
Dim n, i As Integer
Dim s As String
Dim r As Range
s = InputBox("Tabla de multiplicar del número: ", "Título")
If s <> "" Then
n = Val(s)
ActiveSheet.Range("C2").Value = "Tabla de multiplicar del " & n
Set r = ActiveSheet.Range("C4")
For i = 0 To 10
r.Offset(i, 0).Value = i
r.Offset(i, 1).Value = i * n
Next i
End If
End Sub
23
Ejemplos VBA en Excel
Tabla ASCII
Sub Exercise()
Dim Character As String
Dim Number As Integer
Number = 114
Character = Chr(Number)
ActiveCell = "The ASCII character of " & Number & " is " & Character
End Sub
Sub Exercise()
Dim Character As String
Dim Number As Long
Number = 358
Character = ChrW(Number)
ActiveCell = "The ASCII character of " & Number & " is " & Character
End Sub
Sub Exercise()
Dim Number As Integer
Number = 28645
ActiveCell = Hex(Number)
End Sub
24
Ejemplos VBA en Excel
Extraer números de una celda
25
Ejemplos VBA en Excel
Extraer números de una celda
Function EXTRAENUM(cadena As String)
'Variable numeros contendrá solo números de la cadena
Dim numeros As String
numeros = ""
'Recorrer la cadena
For i = 1 To Len(cadena)
'Evaluar SI el carácter actual es un número
If IsNumeric(Mid(cadena, i, 1)) Then
'Concatenar valor numérico a la variable numeros
numeros = numeros & Mid(cadena, i, 1)
End If
Next
'Devolver los números encontrados
EXTRAENUM = numeros
End Function
26
Ejemplos VBA en Excel
Operaciones con Colores en Excel
Function OBTENERCOLOR(celda As Range) As Long
OBTENERCOLOR = celda.Interior.Color
End Function
27
Ejemplos VBA en Excel
Operaciones con Colores en Excel
Function SUMARPORCOLOR(celdaColor As Range, rango As Range)
'Variable resultado almacena la suma total
Dim resultado
Dim celda As Range
For Each celda In rango
'Compara la propiedad Interior.Color
If celda.Interior.Color = celdaColor.Interior.Color Then
resultado = resultado + celda.Value
End If
Next celda
SUMARPORCOLOR = resultado
End Function
28
Ejemplos VBA en Excel
Operaciones con Colores en Excel
Function CONTARPORCOLOR(celdaColor As Range, rango As Range)
'Variable resultado almacena la cuenta total
Dim resultado
Dim celda As Range
For Each celda In rango
'Compara la propiedad Interior.Color
If celda.Interior.Color = celdaColor.Interior.Color Then
resultado = resultado + 1
End If
Next celda
CONTARPORCOLOR = resultado
End Function
29
Ejemplos VBA en Excel
Cómo crear hojas de Excel
Worksheets.Add.Name = "Enero"
Worksheets.Add (After:=Worksheets("Hoja2")).Name = "Febrero"
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "Marzo"
30
Ejemplos VBA en Excel
Macro para ordenar datos automáticamente en Excel
clic derecho sobre el nombre de la hoja y seleccionar la opción Ver código Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
With Columns(1)
.Sort key1:=.Cells(1, 1)
End With
End If
End Sub
31
Ejemplos VBA en Excel
Macro para ordenar datos automáticamente en Excel
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
With Range("A:B")
.Sort key1:=.Cells(1, 2), Header:=xlYes
End With
End If
End Sub
32
Ejemplos VBA en Excel
Concatenar múltiples celdas
=CONCATENAR(B2, "; ", B3, "; ", B4, "; ", B5, "; ", C2, "; ", C3, "; ", C4, "; ", D2, "; ", D3, "; ", D4, "; ", D5, "; ", E2, "; ", E3, "; ", E4)
Function CONCATENARCELDAS(Rango As Range)
'Bucle para recorrer todas las celdas del rango
For Each celda In Rango.Cells
'Si la celda NO está vacía, entonces concatenarla
If celda.Value <> "" Then
resultado = resultado & "; " & celda.Value
End If
Next celda
'Se remueve el ; y espacio inicial
resultado = Right(resultado, Len(resultado) ‐ 2)
CONCATENARCELDAS = resultado
End Function
33
Ejemplos VBA en Excel
Generar Valores Aleatorios sin Repetición
=ALEATORIO.ENTRE(‐50, 50)
Function AleatoriosUnicos(Inferior As Integer, Superior As Integer, Cantidad As Integer) As String
Dim iArr As Variant
Dim i As Integer
Dim r As Integer
Dim temp As Integer
Application.Volatile
ReDim iArr(Inferior To Superior)
For i = Inferior To Superior
iArr(i) = i
Next i
For i = Superior To Inferior + 1 Step ‐1
r = Int(Rnd() * (i ‐ Inferior + 1)) + Inferior
temp = iArr(r)
iArr(r) = iArr(i)
iArr(i) = temp
Next i
For i = Inferior To Inferior + Cantidad ‐ 1
AleatoriosUnicos = AleatoriosUnicos & " " & iArr(i)
Next i
AleatoriosUnicos = Trim(AleatoriosUnicos)
End Function
Private Sub CommandButton1_Click()
Range("B4").Value = AleatoriosUnicos(Range("B1").Value, Range("B2").Value, Range("B3").Value)
End Sub
34
Private Sub CommandButton1_Click()
Dim fila As Long
Dim duplicados As Boolean
Ejemplos VBA en Excel
Formulario para completar una lista sin duplicados
'Obtener la fila disponible
fila = Application.WorksheetFunction.CountA(Range("A:A")) + 1
duplicados = False
'Validar si se han ingresado datos duplicados
For i = 1 To fila
If Cells(i, 1).Value = UserForm1.TextBox1.Value Then
If Cells(i, 2).Value = UserForm1.TextBox2.Value Then
'Se encontraron datos duplicados
MsgBox "Datos duplicados en la fila " & i
duplicados = True
End If
End If
Next i
UserForm1.Show If Not duplicados Then
'Insertar datos capturados
Cells(fila, 1).Value = UserForm1.TextBox1.Value
Cells(fila, 2).Value = UserForm1.TextBox2.Value
'Limpiar cajas de texto
UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""
'Notificar al usuario
MsgBox "Datos insertados en la fila " & fila
End If
End Sub
Unload Me 35
Ejemplos VBA en Excel
Copiar valores únicos de un rango
Sub ValoresUnicos()
Dim listaOrigen As Range
On Error Resume Next
Set listaOrigen = Application.InputBox _
(Prompt:="Rango de datos origen:", Title:="Seleccionar rango", Type:=8)
listaOrigen.AdvancedFilter _
Action:=xlFilterCopy, CopyToRange:=ActiveCell, Unique:=True
Canceled:
End Sub
36
Ejemplos VBA en Excel
Contar apariciones de un valor en un rango
Function APARICIONES(rango As Range, valor As Variant) As Integer
contador = 0
'Recorrer todas las celdas del rango
For Each celda In rango.Cells
posicion = 1
nuevoStr = celda.Value
'Mientras la posición encontrada por InStr sea diferente a cero
Do
posicion = InStr(posicion, nuevoStr, valor, vbTextCompare)
If (posicion = 0) Then
Exit Do
Else
'Aumentar contador de apariciones
contador = contador + 1
'Cadena de texto restante
nuevoStr = Mid(nuevoStr, posicion + Len(valor) + 1)
End If
Loop While posicion <> 0
Next
APARICIONES = contador
End Function
37
Sub ValorExiste()
'Definición de variables
Dim rango As String
Dim valor As String
Dim resultado As Range
Dim primerResultado As String
Dim cont As Integer
Ejemplos VBA en Excel
Contar y marcar apariciones de un valor en un rango
'Solicitar información al usuario
rango = InputBox("Ingresa el RANGO a buscar:")
valor = InputBox("Ingresa el VALOR a buscar:")
'Inicializar contador de coincidencias
cont = 0
'Primera búsqueda del valor dentro del rango
Set resultado = Range(rango).Find(What:=valor, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
'Si el resultado de la búsqueda no es vacío
If Not resultado Is Nothing Then
primerResultado = resultado.Address
'Inicia bucle para hacer varias búsquedas
Do
cont = cont + 1
'Cambia el color de fondo de la celda
resultado.Interior.ColorIndex = 6
'Vuelve a buscar el valor
Set resultado = Range(rango).FindNext(resultado)
Loop While Not resultado Is Nothing And _
resultado.Address <> primerResultado
End If
'Muestra un cuadro de diálogo con el número de coincidencias
MsgBox "Se encontraron " & cont & " coincidencias."
End Sub
38
Descargar