Академический Документы
Профессиональный Документы
Культура Документы
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
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:
14
Objetos,PropiedadesyMtodosde
VBA
Objetospredeterminados
ExisteunafuncionalidadintrnsecadeVBAconocidacomoobjetos
predeterminadoslacualnospermiteomitirlaescrituradealgunosobjetosy
aunasteneruncdigofuncional.Porejemplo,enlasentenciamostrada
previamentepodemosomitirelobjetoApplication ytenernuestrocdigo
funcionandocorrectamente:
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
28
EjemplosVBAenExcel
OperacionesconColoresenExcel
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
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