Вы находитесь на странице: 1из 38

VisualBasicfor Applications

enMSExcel

LasMacrosenMSExcel.

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 prcticamente todas las funcionalidades de Excel y con ello
tambin ampliar la funcionalidad del programa.

VisualizarlaFichaProgramadorenla
CintadeOpciones(1de2).

Botnderechoenunazonaenblancodelacinta.

VisualizarlaFichaProgramadorenla
CintadeOpciones(2de2).

LaFichaprogramadorylaGrabadora
deMacros

GrabaryEjecutarunaMacro

VisualizarelCdigodeunaMacro

VisualizarelCdigodeunaMacro

LibrodeMacrosPersonal

C:\Usuarios\[Usuario]\AppData\Roaming\Microsoft\Excel\XLSTART
9

LibrodeMacrosPersonal

10

Objetos,PropiedadesyMtodosde
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. Tambin existe el
objeto Sheet que representa una hoja y el objeto Chart para un grfico.
Cada uno de estos objetos tiene propiedades y mtodos. Por ejemplo, el objeto
Workbook tiene propiedades como ActiveSheet (Hoja activa), Name (Nombre),
ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus mtodos son Save
(Guardar), Close (Cerrar), PrintOut (Imprimir), Protect (Proteger), Unprotect
(Desproteger).

11

Objetos,PropiedadesyMtodosde
VBA

12

Objetos,PropiedadesyMtodosde
VBA

Para acceder a las propiedades y mtodos de un objeto lo hacemos a travs de una nomenclatura especial. Justo despus del
nombre del objeto colocamos un punto seguido del nombre de la propiedad o del mtodo. 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 mtodo Clear de la siguiente manera:
Range("A1").Clear
Los objetos tienen muchas propiedades y mtodos y a veces es difcil 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 cdigo
nos proporciona la lista completa de propiedades y mtodos para un objeto.
13

Objetos,PropiedadesyMtodosde
VBA
Para tener acceso a los objetos que estn por debajo del objeto Application
podemos utilizar el punto. El punto nos ayuda a navegar por la jerarqua hacia
un nivel inferior. Observa lo que se muestra en el Editor de Visual Basic al
colocar un punto despus 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,PropiedadesyMtodosde
VBA
Objetospredeterminados
ExisteunafuncionalidadintrnsecadeVBAconocidacomoobjetos
predeterminadoslacualnospermiteomitirlaescrituradealgunosobjetosy
aunasteneruncdigofuncional.Porejemplo,enlasentenciamostrada
previamentepodemosomitirelobjetoApplication ytenernuestrocdigo
funcionandocorrectamente:

InclusivepodemosomitirlosobjetosActiveWorkbook yActiveSheet sabiendo


queelcdigoseejecutarsiempresobreellibroactivoylahojaqueest
activaalmomentodelaejecucin:

15

Objetos,PropiedadesyMtodosde
VBA

16

EventosenVBA
AlgunosejemplosdeeventosenVBA sonlossiguientes:
WorkbookOpen:ElusuarioabreunlibrodeExcel.
WorkbookActivate:ElusuarioactivaunlibrodeExcel.
SelectionChange:Elusuariocambialaseleccindeceldasenunahoja.
Paradescubrirloseventosquetieneun
objetoessuficienteconabrirelEditorde
VisualBasicyposteriormenteel
Examinadordeobjetos(F2). Enelpanel
izquierdosemostrarnlosobjetosyenel
panelderecholaspropiedades,mtodos
yeventosdedichoobjeto.Podrs
distinguirloseventosporquetienen
un icono enformaderayo(color
amarillo):

17

EventosenVBA

18

EditorVBA

19

EjemplosVBAenExcel
CadenasdeTexto

20

EjemplosVBAenExcel
CadenasdeTexto

21

EjemplosVBAenExcel
CadenasdeTexto

22

EjemplosVBAenExcel
TabladeMultiplicar

SubTablaMultiplicar()
Dim n,iAsInteger
Dim sAsString
Dim rAsRange
s=InputBox("Tablademultiplicardelnmero:","Ttulo")
If s<>""Then
n=Val(s)
ActiveSheet.Range("C2").Value ="Tablademultiplicardel"&n
Setr=ActiveSheet.Range("C4")
For i=0To10
r.Offset(i,0).Value =i
r.Offset(i,1).Value =i*n
Next i
End If
End Sub
23

EjemplosVBAenExcel
TablaASCII
SubExercise()
DimCharacterAsString
DimNumberAsInteger
Number=114
Character=Chr(Number)
ActiveCell ="TheASCIIcharacterof"&Number&"is"&Character
EndSub

SubExercise()
DimCharacterAsString
DimNumberAsLong
Number=358
Character=ChrW(Number)
ActiveCell ="TheASCIIcharacterof"&Number&"is"&Character
EndSub

SubExercise()
DimNumberAsInteger
Number=28645
ActiveCell =Hex(Number)
EndSub

24

EjemplosVBAenExcel
Extraernmerosdeunacelda

25

EjemplosVBAenExcel
Extraernmerosdeunacelda
Function EXTRAENUM(cadenaAsString)
'Variablenumeros contendrsolonmerosdelacadena
Dim numeros AsString
numeros =""
'Recorrerlacadena
For i=1ToLen(cadena)
'EvaluarSIelcarcteractualesunnmero
If IsNumeric(Mid(cadena,i,1))Then
'Concatenarvalornumricoalavariablenumeros
numeros =numeros &Mid(cadena,i,1)
End If
Next
'Devolverlosnmerosencontrados
EXTRAENUM=numeros
End Function
26

EjemplosVBAenExcel
OperacionesconColoresenExcel
FunctionOBTENERCOLOR(celda AsRange)AsLong
OBTENERCOLOR=celda.Interior.Color
EndFunction

27

EjemplosVBAenExcel
OperacionesconColoresenExcel

Function SUMARPORCOLOR(celdaColor AsRange,rangoAsRange)


'Variableresultadoalmacenalasumatotal
Dim resultado
Dim celdaAsRange
For Each celdaInrango
'ComparalapropiedadInterior.Color
If celda.Interior.Color =celdaColor.Interior.Color Then
resultado=resultado+celda.Value
End If
Next celda
SUMARPORCOLOR=resultado
End Function

28

EjemplosVBAenExcel
OperacionesconColoresenExcel

Function CONTARPORCOLOR(celdaColor AsRange,rangoAsRange)


'Variableresultadoalmacenalacuentatotal
Dim resultado
Dim celdaAsRange
For Each celdaInrango
'ComparalapropiedadInterior.Color
If celda.Interior.Color =celdaColor.Interior.Color Then
resultado=resultado+1
End If
Next celda
CONTARPORCOLOR=resultado
End Function

29

EjemplosVBAenExcel
CmocrearhojasdeExcel

Worksheets.Add.Name ="Enero"

Worksheets.Add (After:=Worksheets("Hoja2")).Name="Febrero"

Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name="Marzo"

30

EjemplosVBAenExcel
MacroparaordenardatosautomticamenteenExcel

clicderechosobreelnombredelahojayseleccionarlaopcinVercdigo

PrivateSubWorksheet_Change(ByVal TargetAsRange)
IfTarget.Column =1Then
WithColumns(1)
.Sortkey1:=.Cells(1,1)
EndWith
EndIf
EndSub

31

EjemplosVBAenExcel
MacroparaordenardatosautomticamenteenExcel

PrivateSubWorksheet_Change(ByVal TargetAsRange)
IfTarget.Column =2Then
WithRange("A:B")
.Sortkey1:=.Cells(1,2),Header:=xlYes
EndWith
EndIf
EndSub

32

EjemplosVBAenExcel
Concatenarmltiplesceldas

=CONCATENAR(B2,";",B3,";",B4,";",B5,";",C2,";",C3,";",C4,";",D2,";",D3,";",D4,";",D5,";",E2, "; ",E3,";",E4)

Function CONCATENARCELDAS(RangoAsRange)
'Buclepararecorrertodaslasceldasdelrango
For Each celdaInRango.Cells
'SilaceldaNOestvaca,entoncesconcatenarla
If celda.Value <>""Then
resultado=resultado&";"&celda.Value
End If
Next celda
'Seremueveel;yespacioinicial
resultado=Right(resultado,Len(resultado) 2)
CONCATENARCELDAS=resultado
End Function

33

EjemplosVBAenExcel
Generar ValoresAleatoriossin
Repeticin

=ALEATORIO.ENTRE(50,50)

Function AleatoriosUnicos(InferiorAsInteger,SuperiorAsInteger,CantidadAsInteger)AsString
Dim iArr AsVariant
Dim iAsInteger
Dim rAsInteger
Dim temp AsInteger
Application.Volatile
ReDim iArr(InferiorToSuperior)
For i=InferiorToSuperior
iArr(i)=i
Next i
For i=SuperiorToInferior+1Step 1
r=Int(Rnd()*(i Inferior+1))+Inferior
temp =iArr(r)
iArr(r)=iArr(i)
iArr(i)=temp
Next i
For i=InferiorToInferior+Cantidad 1
AleatoriosUnicos =AleatoriosUnicos &""&iArr(i)
Next i
AleatoriosUnicos =Trim(AleatoriosUnicos)
End Function

Private SubCommandButton1_Click()
Range("B4").Value =AleatoriosUnicos(Range("B1").Value,Range("B2").Value,Range("B3").Value)
End Sub
34

Private SubCommandButton1_Click()
Dim filaAsLong
Dim duplicadosAsBoolean

EjemplosVBAenExcel
Formularioparacompletaruna
listasinduplicados

'Obtenerlafiladisponible
fila=Application.WorksheetFunction.CountA(Range("A:A"))+1
duplicados=False
'Validarsisehaningresadodatosduplicados
For i=1Tofila
If Cells(i,1).Value =UserForm1.TextBox1.ValueThen
If Cells(i,2).Value =UserForm1.TextBox2.ValueThen
'Seencontrarondatosduplicados
MsgBox "Datosduplicadosenlafila"&i
duplicados=True
End If
End If
Next i

UserForm1.Show

If Not duplicadosThen
'Insertardatoscapturados
Cells(fila,1).Value =UserForm1.TextBox1.Value
Cells(fila,2).Value =UserForm1.TextBox2.Value
'Limpiarcajasdetexto
UserForm1.TextBox1.Value=""
UserForm1.TextBox2.Value=""
'Notificaralusuario
MsgBox "Datosinsertadosenlafila"&fila
End If
End Sub
Unload Me

35

EjemplosVBAenExcel
Copiarvaloresnicosdeunrango
SubValoresUnicos()
Dim listaOrigen AsRange
On ErrorResumeNext
SetlistaOrigen =Application.InputBox _
(Prompt:="Rangodedatosorigen:",Title:="Seleccionarrango",Type:=8)
listaOrigen.AdvancedFilter _
Action:=xlFilterCopy,CopyToRange:=ActiveCell,Unique:=True
Canceled:
End Sub

36

EjemplosVBAenExcel
Contaraparicionesdeunvalorenunrango
Function APARICIONES(rangoAsRange,valorAsVariant)AsInteger
contador=0
'Recorrertodaslasceldasdelrango
For Each celdaInrango.Cells
posicion =1
nuevoStr =celda.Value
'MientraslaposicinencontradaporInStr seadiferenteacero
Do
posicion =InStr(posicion,nuevoStr,valor,vbTextCompare)
If (posicion =0)Then
Exit Do
Else
'Aumentarcontadordeapariciones
contador=contador+1
'Cadenadetextorestante
nuevoStr =Mid(nuevoStr,posicion +Len(valor)+1)
End If
Loop While posicion <>0
Next
APARICIONES=contador
End Function

37

SubValorExiste()
'Definicindevariables
Dim rangoAsString
Dim valorAsString
Dim resultadoAsRange
Dim primerResultado AsString
Dim cont AsInteger

EjemplosVBAenExcel
Contarymarcaraparicionesdeunvalor
enunrango

'Solicitarinformacinalusuario
rango=InputBox("IngresaelRANGOabuscar:")
valor=InputBox("IngresaelVALORabuscar:")
'Inicializarcontadordecoincidencias
cont =0
'Primerabsquedadelvalordentrodelrango
Setresultado=Range(rango).Find(What:=valor,_
LookIn:=xlValues,_
LookAt:=xlWhole,_
SearchOrder:=xlByRows,_
SearchDirection:=xlNext,_
MatchCase:=False,_
SearchFormat:=False)
'Sielresultadodelabsquedanoesvaco
If Not resultadoIs Nothing Then
primerResultado =resultado.Address
'Iniciabucleparahacervariasbsquedas
Do
cont =cont +1
'Cambiaelcolordefondodelacelda
resultado.Interior.ColorIndex =6
'Vuelveabuscarelvalor
Setresultado=Range(rango).FindNext(resultado)
Loop While Not resultadoIs Nothing And_
resultado.Address <>primerResultado
End If
'Muestrauncuadrodedilogoconelnmerodecoincidencias
MsgBox "Seencontraron"&cont &"coincidencias."
End Sub

38

Вам также может понравиться