Vous êtes sur la page 1sur 21

Clase 15

'primera programacin de VBA'


'existen dos tipos de rutinas basicas, subrutinas y funciones'
'el usuario puede crear sus propias funciones y llamarlas desde excel'

Sub primerarutina()
'VBA distingue entre mayusculas y minisculas, generalmente las mayusculas se autocorrigen'
'entre Sub y End Sub se escriben todas las lineas a ejecutar'
'se puede definir todas las sub rutinas que necesites'
Cells(1, 1) = "HOLA"

End Sub

Sub segundarutina()
'la tecla Tabs se utiliza para obtener el codigo jerarquicamente'
For i = 1 To 100
Cells(i, 1) = "Fila" & " " & i
Next i
'la estructura for repite una accion un numero determinado de veces'

End Sub

Sub tercerarutina()
ActiveCell.Value = Date
ActiveCell.NumberFormat = "mmm, d, yyyy"
ActiveCell.Font.Bold = True
ActiveCell.Interior.Color = vbBlack
ActiveCell.Font.Color = vbWhite

End Sub

Clase 19
'Estructuras condicionales

Sub condicionales()

'se utilizan para evauar condiciones y realizar operaciones

'la estructura sera la siguiente

'If<condicin>Then

'Haga algo
'End If

If Cells(2, 5) > 3 Then

Cells(2, 8) = "Bien"

End If

'El condicionalmente generalmente evalua una condicion y hace algo

'n caso de cumplirse y en caso de no cumplirse tambien puede hacer algo

If Cells(3, 5) > 3 Then

Cells(3, 8) = "Bien"

Else

Cells(3, 8) = "Mal"

End If

'Ejercicio: si a nota es mayor a 3 poner bien si esta entre 2 y 3 poner regular y si es menor que 2
pone mal

'Para mostrar ayuda, presionar f1 luego de escribir la palabra clave

'Para hacer condicionales anidados usar Elself

If Cells(4, 5) > 3 Then

Cells(4, 8) = "Bien"

ElseIf Cells(4, 5) > 2 Then

Cells(4, 8) = "Regular"

Else

Cells(4, 8) = "Mal"

End If

'Podemos evaluar varias condiciones de forma simultnea

'La estructura es la siguiente

'If <condicional> And <condicin2> Then

'Hacer algo

'Else

'Hacer otra cosa


'End If

If Cells(5, 3) > 3 And Cells(5, 6) > 3 And Cells(5, 7) > 3 Then

Cells(5, 8) = "Muy bien"

Else

Cells(5, 8) = "Normal"

End If

'Podemos cambiar la sentencia If con Or

'Estructura

'If <condicin> or <condicin2> then

'Haga algo

'Else

'Haga otra cosa

'End If

If Cells(6, 5) > 4 Or Cells(6, 6) > 4 Or Cells(6, 7) > 4 Then

Cells(6, 8) = "Muy bien"

Else

Cells(6, 8) = "Normal"

End If

'Ejercicio: si la nota1 es mayor que 3 y al menos una de las 2 ltima notas es mayor que 4, ponga
"no estuvo mal"

'Si la nota es mayor o igual que 3 y al menos una de las 2 ltimas notas es mayor que 4.5, ponga
"la salvo"

'Si la nota1 es mayor a 3 y la segunda es mayor a 3 y el promedio de las dos ltimas notas es
mayor o igual a 4.2, ponga "excelente"

'Si no cumple ninguna de las condiciones anteriores, ponga "no hay calificacin"

'Haga eso mismo para todas las demas notas. Use un for
'Recuerde la estructura del For:

'For i=1 To n (n es un entero)

'Lo que hay que hacer para cada valor de i

'Next i

'Agregue un botn de comando para la macro

For i = 7 To 12

If Cells(i, 5) > 3 And Cells(i, 6) > 4 Or Cells(i, 7) > 4 Then

Cells(i, 8) = "no estuvo mal"

ElseIf Cells(i, 5) <= 3 And Cells(i, 6) >= 4.5 Then

suma1 = ((Cells(i, 6) + Cells(i, 7)) / 2)

ElseIf Cells(i, 5) > 3 And suma1 > 4.5 Then

Cells(i, 8) = "excelente"

Else

Cells(i, 8) = "no hay clasificacion"

End If

Next i

End Sub

Clase 20

'Definir arreglos de variables


'Los arreglos, son vectores de variables de la misma naturaleza
'Se consideran como una coleccion ordenada
'Se pueden definir arreglos estticos o dinmicos
'Los arreglos estticos son aquellos a los cuales se les asigna
'el tamao desde el inicio
'Los arreglos dinamicos se pueden modicar mediante ReDim
'Los arreglos son vectores, pero pueden ser de numeros, caracteres o de valores logicos

'Ejemplo de la declaracin de un arreglo

Sub arreglo()
'Un arreglo de nombres
Dim arr1(1 To 5) As String
'Note que se ha definido un arreglo estatico (se ha establecido el tamao del arreglo
desde el inicio
'La estructura para declarar un arreglo fijo es la siguiente:
'Dim <nombre_arreglo> (1 to n) As <Tipo de variable>
' n es el tamao del arreglo a declarar. en el ejemplo hemos declarado un arreglo con 5
componentes
'Podemos asignar valor a cada variable (componente) del arreglo de la siguiente manera
'nombre_arreglo (i) = Valor
'donde i es la posicion a la qie queremos acceder
arr1(1) = "primero"
arr1(2) = "segundo"
arr1(3) = "tercero"
arr1(4) = "cuarto"
arr1(5) = "quinto"
Cells(1, 1) = arr1(1)
'los arreglos son especialmente utiles cuando se tranbaja con estructuras respectivas
(recorridos) tipo fot o while

End Sub
Sub repetir()
'las estructuras de recorrido se pueden clasificar en determinada o indeterminada segun
se especifique el numero de pasos a realizar o no.
'cuando se sabe (o es posible calcular) el numero de pasos que se van a realizar entocnes
se usan recorridos determinados como: for, for each
' si no se sabe de antemano la longitud del recorrido, entonces se usan recorridos
indeterminados: while, do until, do while
Dim arr2(1 To 10) As Integer
For i = 1 To 10
arr2(i) = i
Next
'la estructura de un for es la siguiente:
'for i=1 to m
'hacer algo en cada iteracion
'next
'ejemplo
'en las primeras filas de la columna a escriba el numero de la fila
For i = 1 To 10
Cells(i, 1) = i
Next
Dim suma As Double
suma = 0
For i = 1 To 10
suma = suma + Cells(i, 1)
Next
Cells(1, 2) = suma

End Sub
Sub mientras()
'si necesitamos un recorrido indeterminado podemos usar while
'la estructura de una sentencia while es la siguiente
'while <condicion a evaluar>
' hacer algo en cada iteracion
'wend
Dim suma As Double
i=1
suma = 0
While i <= 10
suma = suma + Cells(i, 1)
i=i+1
Wend
Cells(2, 2) = suma

End Sub

Sub ocho()
'sume un rango de numeros hasta encontrar un 8
Dim suma As Double
Dim valor As Boolean
Dim contador As Integer
'valor sera false si aun no se ha llegado al ocho
contador = 1
suma = 0
While valor = False
If Cells(contador, 4) = 8 Then
valor = True
Else
suma = suma + Cells(contador, 4)
contador = contador + 1
End If

Wend
Cells(1, 5) = suma
Cells(2, 5) = contador
End Sub

Clase nn
'Trabajar con celdas y rangos desde VBA

Sub rabgos()

'podemos referenciar una celda con: cells(),Rango("")

Cells(1, 1) = "mecanico"

Range("b1") = "mundo"

Range("a3:b4") = "cruel"

'para seleccionar filas

Range("5:5") = 1

'para seleccionar todas las columnas

Range("E:E") = "hola gente"

End Sub

Sub range2()

'para selecciones no contiguas

Range("b6:c7,d5:f9") = 3

Range(Cells(2, 8), Cells(3, 9)) = "otra forma"

'tenga en cuenta que los argumentos de los comandos se separan 'con coma (,) sin importar el
separador decimal

End Sub

Sub rangos3()

'en general el formato para trabajr los codigos es:

'objeto.accion / objeto.propiedad

Range("b6:c7,d5:f9").Name = "primero"
Range("primero") = 7

'rango("primero").texto="hola" 'no todas las propiedades

'aplican a todos los objetos

End Sub

Sub rangos4()

Range("primero") = 8 'asigna un valor aun rango

Range("primero").Font.Color = vbRed 'aplica un color de fuente

Range("primero").Font.Bold = vbRed 'pone negrita

Range("primero").Interior.Color = vbYellow 'asigna color ala celda

Range("d5:d9").Copy

Range("i5").PasteSpecial

End Sub

Clase nn
Sub Macro1()

'

' Macro1 Macro

' Primera macro

'

' Acceso directo: CTRL+k

'

Range("A1:A7").Select

Selection.Copy

Range("D1").Select

ActiveSheet.Paste

End Sub

Sub Macro2()
'

' Macro2 Macro

' Abrir libro nuevo

'

' Acceso directo: CTRL+j

'

Workbooks.Add

End Sub

Sub Macro3()

'

' Macro3 Macro

' Crea y guarda un nuevo libro

'

' Acceso directo: CTRL+d

'

Workbooks.Add

ActiveWorkbook.SaveAs Filename:="C:\Users\ESTUDIANTES\Desktop\Libro6.xlsm", _

FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

End Sub

Sub Macro9()

'

' Macro9 Macro

' Nombre

'

' Acceso directo: CTRL+

'

Range("A1").Select

ActiveCell.FormulaR1C1 = "Karen"

Range("A2").Select
End Sub

Sub propio()

Range("b1").Select

Selection.Value = "Segundo Nombre"

Selection.Font.Bold = True

Selection.Font.Size = 16

Selection.Font.Italic = True

'otra forma de hacer eso mismo

Range("c1").Select

With Selection

.Value = "Tercer Nombre"

.Font.Bold = True

.Font.Size = 16

.Font.Italic = True

End With

'se puede ser mas especfico

Range("a3").Select

Selection.Value = "Cuarto Nombre"

With Selection.Font

.Bold = True

.Size = 16

.Italic = True

End With
End Sub

Sub yomairis()

Range("a1").Select

Selection.Value = "Yomairis"

With Selection.Font

.Bold = True

.Size = 16

.Italic = True

End With

End Sub

Clase 21
Sub ejemplo()

Dim numcol As Integer

Dim seguir As Boolean

'No olvidar inicializar las variables

numcol = 1

seguir = True

'Revisar en que columna est el nombre de los cursos

While seguir = True And numcol < 20

If Hoja2.Cells(2, numcol) = "CURSO" Then

seguir = False

Else

numcol = numcol + 1
End If

Wend

If seguir = False Then

Dim curso1, curso2 As String

'Limpiar el rango

Range(Hoja2.Cells(3, numcol + 1), Hoja2.Cells(20, numcol + 1)).ClearContents

For i = 3 To 20 'Para cada curso

curso1 = Hoja2.Cells(i, numcol)

For j = 3 To 7 'Para cada da de la semana

For k = 4 To 10 'Para cada franja horaria

curso2 = Hoja1.Cells(k, j) 'Almacena el nombre del curso

If curso1 = curso2 Then

Hoja2.Cells(i, numcol + 1) = Hoja2.Cells(i, numcol + 1) & " " & Hoja1.Cells(3, j)

End If

Next k

Next j

Next i

Else

MsgBox ("No se encontro la columna CURSO")

End If

'Hacer para hora

End Sub
Sub limpiar()

Dim numcol As Integer

Dim seguir As Boolean

'No olvidar inicializar las variables

numcol = 1

seguir = True

'Revisar en que columna est el nombre de los cursos

While seguir = True And numcol < 20

If Hoja2.Cells(2, numcol) = "CURSO" Then

seguir = False

Else

numcol = numcol + 1

End If

Wend

Range(Hoja2.Cells(3, numcol + 1), Hoja2.Cells(20, numcol + 1)).ClearContents

End Sub

Clase 18
'declarar variables

'dim nombre como (tipo de variable)

'integer: entero

'long: entero largo

'single: real, hasta 6 decimales

'double: real, hasta 14 decimales

'string: caracteres alfanumericos

'boolean: logicos, verdadero falso


'declaraciones globales: se hacen al principio y se pueden usar en todas las sub

'declaraciones locales: se hacen dentro de sub y solo se pueden llamar dentro de sub

'variables globales

Dim filas As Integer

Dim columnas As Integer

Sub punto1()

'contar filas y columnas

filas = Hoja1.Range(Hoja1.Range("A3"), Hoja1.Range("A3").End(xlDown)).Rows.Count

columnas = Hoja1.Range(Hoja1.Range("A3"), Hoja1.Range("A3").End(xlToRight)).Columns.Count

'monstrar en un mensaje

MsgBox ("la cantidad de filas es:" & filas & " Y la cantidad de columnas es: " & columnas)

End Sub

Sub punto2()

Worksheets("base de datos").Activate

'seleccionar el rango a copiar

Worksheets("base de datos").Range("a:a").Select

'copar el rango seleccionado

Selection.Copy

'nos vamos a la hoja RESUMEN

Worksheets("RESUMEN").Activate

'seleccionar el rangodonde vamos a pegar

Worksheets("RESUMEN").Range("a1").Select

'pegamos la seleccion

Selection.PasteSpecial xlPasteAll

Worksheets("base de datos").Activate
'seleccionar el rango a copiar

Worksheets("base de datos").Range("g:g").Select

'copar el rango seleccionado

Selection.Copy

'nos vamos a la hoja RESUMEN

Worksheets("RESUMEN").Activate

'seleccionar el rangodonde vamos a pegar

Worksheets("RESUMEN").Range("b1").Select

'pegamos la seleccion

Selection.PasteSpecial xlPasteAll

End Sub

Sub punto3()

'declarar una variable para guardar el valor de la suma

Dim suma As Double

'sumar los valores del precio de cierre y mostrar un mensaje

Worksheets("RESUMEN").Activate

Range("b:b").Select

suma = WorksheetFunction.Sum(Selection)

'mostrar un mensaje

MsgBox ("el total de los precios de los clientes de: " & suma)

End Sub

Sub punto4()
'declarar una variable para guardar el valor del promedio

Dim promedio As Double

'calcular el promedio de los precios de cierre y mostrar un mensaje

Worksheets("RESUMEN").Activate

Range("b:b").Select

promedio = WorksheetFunction.Average(Selection)

'mostrar un mensaje

MsgBox ("el promedio de los precios de cierre es de: " & promedio)

End Sub

'Ejercicio clase 21 que no funciono

Sub das()

'Es buena practica activar la hoja en la que vamos a trabajar

Worksheets("RESUMEN").Activate

Dim numcolas As Integer

Dim seguir As Boolean

'No olvidar inicializar las variables

numcol = 1

While seguir = True And numcol < 20

If Cells(2, numcol) = "CURSO" Then

seguir = False

Else

numcol = numcol + 1 'Contador

End If

Wend

If numcol = 20 Then
MsgBox ("No se encontr el nombre")

Else

MsgBox ("el nmero de la columna es:" & numcol)

End If

End Sub

Sub das1()

Worksheets("RESUMEN").Activate

Dim Curso As String

For i = 3 To 20

Curso = Worksheets("RESUMEN").Range(Cells(i, 2), Cells(i, 2)).Value

'Cells(i, 3) = Curso

'Buscar en el horario el nombre del curso

For j = 3 To 7

For k = 4 To 10

nombre = Worksheets("HORARIO").Range(Cells(k, j), Cells(k, j))

If nombre = Curso Then

If Worksheets("HORARIO").Range(Cells(k, j), Cells(k, j)).Value = Curso Then

Worksheets("RESUMEN").Range(Cells(i, 3), Cells(i, 3)).Value =


Worksheets("HORARIO").Range(Cells(3, j), Cells(3, j)).Value

End If

Next

Next

Next

End Sub
Instrucciones en VBA para Excel
Algunos de las instrucciones o comandos en Visual Basic para Excel ms
utilizados en programacin de VBA son los que veremos a continuacin:

Activar una hoja en Visual Basic para Excel: para ir a una hoja de clculo
de Excel utilizaremos el siguiente comando en VBA Shetts (Hoja).Select

Convertir texto en un nmero en Excel: si queremos convertir el texto a


un valor numrcio usaremos la funcin val(TextoAConvertirNumero)

Abrir un formulario en Excel con VBA: para abrir un formulario usaremos


la siguiente instruccin NombredelFormulario.show

Mostrar un mensaje con Visual Basic: si queremos mostrar un mensaje al


usuario usaremos el comando MsgBox mensaje entre comillas

Escribir en una celda de Excel: para escribir en una celda de Excel


realizaremos la instruccin Activecell, el nombre de la frmula y el texto que
deseamos insertar en la celda.

Poner negrita en Visual Basic para Excel: la negrita se podr utilizar en


Visual Basic gracias al comando Selection.FontBold=True

Letra cursiva en Excel con VB: la cursiva la utilizaremos con la instruccin


Selection.Font.Underline=True

Alinear el texto a la izquierda y derecha: para alinear el texto a la


izquierda emplearemos los siguientes comandos, siendo necesario cambiar
el xlLeft por xlRight si queremos alinear el texto a la derecha:

With Selection

.HorizontalAlignment=xlLeft

End With
COMANDOS MS COMUNES VISUAL BASIC PARA EXCEL 2010

Ir a una hoja de clculo Sheets("NombreHoja").Select Funcion Val permite


convertir un valor de texto a un valor numrico.
val(TextoAConvertirANumero) Funcin si (funcin condicional) If Condicion
then Aqu van las instrucciones que se ejecutaran si la condicin resulta
verdadera Else Aqu van las instrucciones que se ejecutaran si la condicin
resulta falso End If Abrir un formulario NombreFormulario.show Presentar
un mensaje flotante al usuario. MsgBox escriba el mensaje entre comillas
Moverse por la hoja de calculo Objeto.offset(CantidadFilasAMoverse,
CantidadColumnasAMoverse).select Ejemplo: activecell.offset(0,1).select se
desplaza una columna hacia la derecha Llamar a una macro desde cdigo
Call NombreMacro Trasladarse a una Celda Range("A1").Select Escribir en
una Celda Activecell.FormulaR1C1="Ramon" Letra Negrita
Selection.Font.Bold = True Letra Cursiva Selection.Font.Italic = True Letra
Subrayada Selection.Font.Underline = xlUnderlineStyleSingle Centrar Texto
With Selection .HorizontalAlignment = xlCenter End With Alinear a la
izquierda With Selection .HorizontalAlignment = xlLeft End With

Alinear a la Derecha With Selection .HorizontalAlignment = xlRight End With


Tipo de Letra(Fuente)
With Selection.Font .Name = "AGaramond" End With Tamao de
Letra(Tamao de Fuente) With Selection.Font .Size = 15 End With Copiar
Selection.Copy Pegar ActiveSheet.Paste Cortar Selection.Cut Ordenar
Ascendente Selection.Sort Key1:=Range("A1"), Order1:=xlAscending,
Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom Orden Descendente Selection.Sort
Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Buscar
Cells.Find(What:="TEXTOABUSCAR", After:=ActiveCell,
LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:= _ False).Activate Insertar Fila
Selection.EntireRow.Insert Eliminar Fila Selection.EntireRow.Delete Insertar
Columna Selection.EntireColumn.Insert Eliminar Columna
Selection.EntireColumn.Delete Abrir un Libro Workbooks.Open
Filename:="C:\Mis documentos\video safe 3.xls" Grabar un Libro
ActiveWorkbook.SaveAs Filename:="C:\Mis documentos\piscis.xlsx",
FileFormat _ :=xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:= _ False, CreateBackup:=False Realizar
acciones repetitivas mientras se cumpla una condicin DO WHILE
Condicion Aqu se escriben las instrucciones a repetir mientras se cumpla la
condicin como verdadera LOOP Agregar elementos a un cuadro
combinado Combobox1.additem juan jose

Vous aimerez peut-être aussi