VBA Excel
VBA Excel
Sub selecciono09()
Sub selecciono04() 'ampliar el rango de selección
Dim variable As Integer Range("A1:B5").Select
variable = 5 Selection.Resize(10, 4).Select '(en total serán 10 filas, 4
Range("A" & variable).Select 'selecciona la celda cuya fila será el columnas)
valor de la variable 'el resultado será A1:D10
End Sub End Sub
Sub selecciono11()
Sub selecciono17()
'selecciona la región o rango de la celda activa
Dim filalibre As Integer
Range("B2").CurrentRegion.Select
ActiveWorkbook.Sheets(1).Activate 'selecciona la Hoja 1
End Sub
Range("A1").Select
'el control se hará sobre la columna A, a partir de la fila
Seleccionar: desde hacia abajo While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'si la celda contiene datos, pasa a la fila siguiente
Wend
Sub selecciono12()
filalibre = ActiveCell.Row
Range("A2", Range("A2").End(xlDown)).Select 'seleciona desde
'guarda en la variable filalibre el número de la primer fila sin
A2 hacia abajo
datos.
End Sub
'muestra el valor en celda "B2"
Range("B2") = filalibre
Seleccionar un rango hacia la derecha End Sub
Sub guardadirecc()
Dim lugar1 As String, lugar2 As String
Range("B3").Select
lugar1 = ActiveCell.Address
'guarda la referencia absoluta
lugar2 = ActiveCell.Address(False, False)
'guarda la referencia relativa
'devuelve en C3 las 2 direcciones concatenadas
Range("C3").Value = lugar1 & "-" & lugar2
End Sub
Sub seleccion1()
Sheets("Hoja2").Select
ActiveSheet.Previous.Select 'hoja anterior a la activa
Range("A2") = ActiveSheet.Name 'nombre de la hoja
Range("A3") = ActiveSheet.Index 'número de hoja
End Sub
Módulo 2: Edición: Copiar, Borrar, Range("C2").Select
Selection.ClearContents
Rellenar End Sub
Sub borrando()
'borra el contenido de las celdas selecciondas
Módulo 3: Formato: Mayúscula - Minúscula - Colores - Sub menorAmayor()
'Pasar de minúsculas a mayúsculas
Mostrar - Ocultar - Nombre Set rango = Range("a1:a3")
For Each Cell In rango
Formato a las celdas del rango seleccionado Cell.Value = UCase(Cell.Value)
(negrita, cursiva, subrayado, color, alineación) Next
End Sub
Sub mayorAmenor()
Formato de minúscula a mayúscula 'Pasar de mayúsculas a minúsculas
Set rango = Range("a1:a3")
For Each Cell In rango
Cell.Value = LCase(Cell.Value)
Sub menorAmayor() Next
Dim cell As Range End Sub
Dim rango As Object
'convierte texto en mayúsculas
Set rango = Selection Colores: colorear las celdas de un rango según su valor
For Each cell In rango
cell.Value = UCase(cell.Value)
Next Sub colores1()
End Sub Dim fila1 As Integer, fila2 As Integer
Dim col1 As Integer, col2 As Integer
Formato de minúscula a mayúscula Dim fila As Integer, columna As Integer
'recorre el rango A1:E20 de la hoja activa coloreando las celdas según su
valor
fila1 = 1 Case 2000 To 2999
fila2 = 20 Cells(fila, columna).Font.ColorIndex = 7 'fucsia
col1 = 1 Case Else
col2 = 5 Cells(fila, columna).Font.ColorIndex = 6 'amarillo
For fila = fila1 To fila2 End Select
For columna = col1 To col2 Next columna
If Cells(fila, columna).Value < 1000 Then Next fila
Cells(fila, columna).Font.ColorIndex = 5 'azul End Sub
Else
If Cells(fila, columna).Value < 1500 Then Colores: Oculta fila con color determinado
Cells(fila, columna).Font.ColorIndex = 3 'rojo
Else
Cells(fila, columna).Font.ColorIndex = 9 'marrón
Sub OcultaPorColor()
End If
End If
'recorre la col A de la hoja activa, si encuentra celda con color de fuente
Next columna
automática oculta la fila
Next fila
Range("A3").Select
End Sub
While ActiveCell.Value <> ""
If ActiveCell.Font.ColorIndex = xlColorIndexAutomatic Then
Colores: recorre un rango coloreando las celdas según su valor ActiveCell.EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Sub colores2() Wend
Dim fila1 As Integer, fila2 As Integer 'para ocultar filas con color de fuente rojo será:
Dim col1 As Integer, col2 As Integer 'If ActiveCell.Font.ColorIndex = 3 Then
Dim fila As Integer, columna As Integer, valor As Integer 'buscar la lista de colores en la Ayuda
'recorre el rango A1:E20 de la hoja activa coloreando las celdas según su End Sub
valor
fila1 = 4 Mostrar: columna
fila2 = 20
col1 = 1
col2 = 5
Sub MuestraTodas()
For fila = fila1 To fila2
'muestra filas ocultas de la hoja Colores
For columna = col1 To col2
Application.ScreenUpdating = False
valor = Cells(fila, columna).Value
'Desactive la actualización de la pantalla para acelerar el código de la
Select Case valor
macro
Case Is < 1000
Sheets("Hoja1").Select
Cells(fila, columna).Font.ColorIndex = 5 'azul
Rows("2:1000").Select
Case 1000 To 1499
Selection.EntireRow.Hidden = False
Cells(fila, columna).Font.ColorIndex = 3 'rojo
Range("C3").Select
Case 1500 To 1999
Application.ScreenUpdating = True
Cells(fila, columna).Font.ColorIndex = 9 'marrón
'Recuerde que debe volver a establecer la propiedad ScreenUpdating como
True cuando finalice la macro.
End Sub
Sub nombre_hoja()
Dim MiNombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre de hoja")
hoja.Name = MiNombre
Next hoja
End Sub
Módulo 4: Insertar: Nombre, Columna, Fila, Selection.EntireColumn.Insert
End Sub
Comentario
Insertar un nombre a una celda
Comentario: Insertar un comentario
Sub nominar()
Sub comentarios() Worksheets("BALANCE").Range("e3").Name = "AC"
Range("B2").Select 'previamente inserte un comentario en la celda "B2" Worksheets("BALANCE").Range("e19").Name = "PC"
ActiveCell.Offset(0, 1).Value = ActiveCell.Comment.Text Worksheets("BALANCE").Range("e4").Name = "AC_Disponibilides"
'copia el comentario de la celda activa en la celda que Worksheets("BALANCE").Range("e5").Name = "AC_Inversiones"
'se encuentra en la columna siguiente. Worksheets("BALANCE").Range("e7").Name = "AC_Cred_Ventas"
End Sub Worksheets("METODO").Range("C14").Name = "r_1"
End Sub
Nombre: insertar nombre a la hoja
Sub nombre_hoja()
Dim MiNombre As String
MiNombre = InputBox("Ingrese nombre de hoja")
ActiveSheet.Name = MiNombre
End Sub
Sub nombres_hojas()
Dim MiNombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre de hoja")
hoja.Name = MiNombre
Next hoja
End Sub
Sub insertando()
'inserta una columna por delante de la selección
Módulo 5: Datos: Convertir, Ordenar, Comparar digito = "cinco"
Case 6
digito = "seis"
Convertir: Número a Letras
Case 7
digito = "siete"
Case 8
Son dos macros del tipo function, para ejecutarlas se debe convocar a la digito = "ocho"
función clasificada en definida por el usuario y seleccionar np [=np(cell)]. Case 9
digito = "nueve"
Case 0
digito = "cero"
Public Function np(R As Single) As String End Select
Dim d1 As String
Dim d2 As String End Function
Dim i, k As Integer
Dim R2, dif As Single Convertir: Número a Letras (función)
R2 = R * 10
dif = R2 - Fix(R2)
If dif >= 0.5 Then R2 = R2 + 1 Son dos macros del tipo function
R = Fix(R2) / 10
d1 = Format$(R, "0.0")
Option Explicit
i = Val(Left$(d1, 1))
'Argumentos:
k = Val(Right$(d1, 1))
'Numero = Valor que deseamos convertir en texto
d1 = digito(i)
'Moneda = es el nombre de la moneda a mostrar
d2 = digito(k)
'Fraccion_Letras = Verdadero para que la fraccion de la moneda
np = d1 + " coma " + d2
' tambien la convierta a letras
End Function
'Fraccion = Es el nombre de la fraccion de la moneda
'Texto_Inicial = Cualquier texto que quieras al principio del resultado
'Texto_Final = Cualquier texto que quieras al finla del resultado
'Estilo = Formato de salida
' 1 = MAYUSCULAS
Function digito(ByVal j As Integer) As String ' 2 = minusculas
Select Case j ' 3 = Tipo Titulo
Case 1 'Los valores negativos los convierte a positivos
digito = "uno" 'El valor minimo en 0, el valor maximo es 9,999,999,999,999.99
Case 2
digito = "dos" Public Function Numeros_Letras(ByVal Numero As Double, _
Case 3 ByVal Moneda As String, _
digito = "tres" Optional Fraccion_Letras As Boolean = False, _
Case 4 Optional Fraccion As String = "", _
digito = "cuatro" Optional Texto_Inicial As String = "", _
Case 5 Optional Texto_Final As String = "", _
Optional Estilo As Integer = 1) As String End Select
Dim strLetras As String
Dim NumTmp As String Numeros_Letras = strLetras
Dim intFraccion As Integer
End Function
strLetras = Texto_Inicial
'Convertimos a positivo si es negativo Public Function NumLet(ByVal Numero As Double) As String
Numero = Abs(Numero) Dim NumTmp As String
NumTmp = Format(Numero, "000000000000000.00") Dim co1 As Integer
If Numero < 1 Then Dim co2 As Integer
strLetras = strLetras & "cero " & Plural(Moneda) & " " Dim pos As Integer
Else Dim dig As Integer
strLetras = strLetras & NumLet(Val(Left(NumTmp, 15))) Dim cen As Integer
If Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then Dim dec As Integer
strLetras = strLetras & Moneda & " " Dim uni As Integer
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp, 10, 6)) = 0 Then Dim letra1 As String
strLetras = strLetras & "de " & Plural(Moneda) & " " Dim letra2 As String
Else Dim letra3 As String
strLetras = strLetras & Plural(Moneda) & " " Dim Leyenda As String
End If Dim TFNumero As String
End If
If Fraccion_Letras Then NumTmp = Format(Numero, "000000000000000") 'Le da un formato fijo
intFraccion = Val(Right(NumTmp, 2)) co1 = 1
Select Case intFraccion pos = 1
Case 0 TFNumero = ""
strLetras = strLetras & "con cero " & Plural(Fraccion) 'Para extraer tres digitos cada vez
Case 1 Do While co1 <= 5
strLetras = strLetras & "con un " & Fraccion co2 = 1
Case Else Do While co2 <= 3
strLetras = strLetras & "con " & NumLet(Val(Right(NumTmp, 2))) & 'Extrae un digito cada vez de izquierda a derecha
Plural(Fraccion) dig = Val(Mid(NumTmp, pos, 1))
End Select Select Case co2
Else Case 1: cen = dig
strLetras = strLetras & Right(NumTmp, 2) Case 2: dec = dig
End If Case 3: uni = dig
strLetras = strLetras & Texto_Final End Select
Select Case Estilo co2 = co2 + 1
Case 1 pos = pos + 1
strLetras = StrConv(strLetras, vbUpperCase) Loop
Case 2 letra3 = Centena(uni, dec, cen)
strLetras = StrConv(strLetras, vbLowerCase) letra2 = Decena(uni, dec)
Case 3 letra1 = Unidad(uni, dec)
strLetras = StrConv(strLetras, vbProperCase)
Select Case co1 ByVal cen As Integer) As String
Case 1 Dim cTexto As String
If cen + dec + uni = 1 Then
Leyenda = "billon " Select Case cen
ElseIf cen + dec + uni > 1 Then Case 1
Leyenda = "billones " If dec + uni = 0 Then
End If cTexto = "cien "
Case 2 Else
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then cTexto = "ciento "
Leyenda = "mil millones " End If
ElseIf cen + dec + uni >= 1 Then Case 2: cTexto = "doscientos "
Leyenda = "mil " Case 3: cTexto = "trescientos "
End If Case 4: cTexto = "cuatrocientos "
Case 3 Case 5: cTexto = "quinientos "
If cen + dec = 0 And uni = 1 Then Case 6: cTexto = "seiscientos "
Leyenda = "millon " Case 7: cTexto = "setecientos "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then Case 8: cTexto = "ochocientos "
Leyenda = "millones " Case 9: cTexto = "novecientos "
End If Case Else: cTexto = ""
Case 4 End Select
If cen + dec + uni >= 1 Then Centena = cTexto
Leyenda = "mil "
End If End Function
Case 5
If cen + dec + uni >= 1 Then Private Function Decena(ByVal uni As Integer, ByVal dec As Integer) As
Leyenda = "" String
End If Dim cTexto As String
End Select
Select Case dec
co1 = co1 + 1 Case 1:
TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda Select Case uni
Case 0: cTexto = "diez "
Leyenda = "" Case 1: cTexto = "once "
letra1 = "" Case 2: cTexto = "doce "
letra2 = "" Case 3: cTexto = "trece "
letra3 = "" Case 4: cTexto = "catorce "
Loop Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
NumLet = TFNumero End Select
Case 2:
End Function If uni = 0 Then
cTexto = "veinte "
Private Function Centena(ByVal uni As Integer, ByVal dec As Integer, _ ElseIf uni > 0 Then
cTexto = "veinti" Private Function Plural(ByVal Palabra As String) As String
End If Dim pos As Integer
Case 3: cTexto = "treinta " Dim strPal As String
Case 4: cTexto = "cuarenta " If Len(Trim(Palabra)) > 0 Then
Case 5: cTexto = "cincuenta " pos = InStr(1, "aeiou", Right(Palabra, 1), vbTextCompare)
Case 6: cTexto = "sesenta " If pos > 0 Then
Case 7: cTexto = "setenta " strPal = Palabra & "s"
Case 8: cTexto = "ochenta " Else
Case 9: cTexto = "noventa " strPal = Palabra & "es"
Case Else: cTexto = "" End If
End Select End If
Plural = strPal
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
End Function
Decena = cTexto ver archivo adjunto: numeros_a_letras.xls
Sub comparando()
Sub copiandoYprotegiendo()
‘Cada columna debe estar ordenada de menor a mayor
'protege la hoja
Dim fila1 As Integer, fila2 As Integer, fila3 As Integer
ActiveSheet.Protect "contraseña"
'compara a partir de la fila2, las columnas 1 y 2 de una misma hoja
'copia el contenido del rango en la hoja siguiente, en rango D1
fila1 = 2
Range("A2:A3").Select
fila2 = 2
Selection.Copy 'previamente se habrá seleccionado algo
fila3 = 2
ActiveSheet.Paste Destination:=ActiveSheet.Next.Cells(1, 4)
Range("A2").Select
Application.CutCopyMode = False
While Cells(fila1, 1).Value <> ""
'desprotege la hoja para poder ocultar una columna
'compara las col 1 y 2, copiando en la 4
ActiveSheet.Unprotect "contraseña"
If Cells(fila1, 1).Value = Cells(fila2, 2).Value Then
'oculta la col 1 de la hoja activa
fila1 = fila1 + 1
ActiveCell.EntireColumn.Hidden = True
fila2 = fila2 + 1
End Sub
Cells(fila1, 1).Select
Else
If Cells(fila1, 1).Value < Cells(fila2, 2).Value Or Cells(fila2, 2).Value = "" Then
Cells(fila1, 1).Copy Destination:=Cells(fila3, 4)
fila3 = fila3 + 1
fila1 = fila1 + 1
Cells(fila1, 1).Select
Else
If Cells(fila2, 2).Value <> "" Then
Cells(fila2, 2).Copy Destination:=Cells(fila3, 4)
fila3 = fila3 + 1
fila2 = fila2 + 1
End If
End If
End If
Wend
While Cells(fila2, 2).Value <> ""
Cells(fila2, 2).Copy Destination:=Cells(fila3, 4)
Módulo 7: Archivo: Imprimir, Abrir, Cerrar, Grabar End With
End Sub
Imprimir: Hoja activa
Abrir: Libro
Sub imprimiendo()
'vista previa de la hoja activa Sub AbriendoLibros()
ActiveSheet.PrintPreview 'oculta la ejecución de los siguientes pasos de la macro
'imprime la hoja activa Application.ScreenUpdating = False
ActiveSheet.PrintOut Copies:=1, Collate:=True 'abre un segundo librolibro (ajustar la ruta)
End Sub Application.Workbooks.Open "C:\Mis documentos\Libro2.xls"
'activa el segundo libro
Workbooks("Libro2.xls").Worksheets("Hoja2").Activate
Imprimir: seleccionar área de impresión 'abriendo un libro y deshabilitando la actualización de vínculos
'Workbooks.Open Filename:="C:\Mis documentos\Vinculado.xls",
UpdateLinks:=0
Sub AreaImpresion() 'se vuelve al estado normal de ejecución
Dim primera, ultima As Variant Application.ScreenUpdating = True
Range("A1").Select End Sub
If ActiveCell.Value = "" Then
Selection.End(xlToRight).Select Cerrar: cerrar libro sin guardar
End If
primera = ActiveCell.Address
ActiveCell.SpecialCells(xlLastCell).Select
ultima = ActiveCell.Address Sub CerrandoLibros_1()
ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima) 'cierra el libro sin guardar los cambios
End Sub Workbooks("Libro2.xls").Close False
End Sub
Imprimir: configurar impresión
Cerrar: cerrar libro y guardar
Sub Configurando()
With ActiveSheet.PageSetup Sub CerrandoLibros_2()
'para el encabezado 'guarda y cierra el libro activo
LeftHeader = "Nombre Empresa" 'ingresar un texto ActiveWorkbook.Save
CenterHeader = "&T" 'Time u hora ActiveWorkbook.Close
RightHeader = "&D" 'Date o fecha End Sub
'para el pie de página
LeftFooter = "&A" 'nombre de hoja Guardar: Libro y desactiva alarma de aviso
CenterFooter = "&F" 'File o nombre de libro
RightFooter = "&P" 'Page o número de página
Sub GuardandoLibros()
'oculta mensajes de alerta, ejecutando la opción predeterminada
Application.DisplayAlerts = False
'guardando el segundo libro
Workbooks("Libro2.xls").SaveAs Filename:="C:\Mis
documentos\Libro2.xls", FileFormat:=xlNormal, Password:="clave",
ReadOnlyRecommended:=False
'omitiendo algunas opciones
Workbooks("Vinculado.xls").SaveAs Filename:="C:\Mis
documentos\Vinculado.xls"
'cerrando un libro guardado
Workbooks("Vinculado.xls").Close
'guardando el libro activo con nombre = valor de celda
ActiveWorkbook.SaveAs Filename:=Range("A2").Value
End Sub
Sub selecciono08()
Range("D3").Select
ActiveCell.Offset(-2, 1).Select 'selecciona la celda que se encuentra 2 filas
por encima
'y 1 columna a la derecha de la celda activa (=D3)
End Sub
Sub avisos()
'volver al estado normal la ejecución de los mensajes de alerta
Application.DisplayAlerts = True
End Sub
Módulo 8: Objetos: InputBox, MsgBox Sub redondeado()
Dim Fraccion As Single
Fraccion = 3.8
InputBox y MsgBox: Ingresar datos y tener resspuesta MsgBox "El número redondeado es: " & CInt(Fraccion), vbOKOnly,
"Ejemplo"
End Sub
Sub Main()
Dim strNombre As String Botones: barra de herramientas
Dim strApellido As String
Dim strMsg As String
strNombre = InputBox("Ingrese su nombre:", "Datos Personales")
strApellido = InputBox("Ingrese su nombre:", "Datos Personales") Sub Herramientas()
strMsg = "Bienvenido " & strNombre & " " & strApellido Dim EnMenu As CommandBar
MsgBox strMsg Dim miboton As CommandBarButton
End Sub Dim micontrol As CommandBarControl
'estas son para los botones de la barra de herramientas o Standard
Set EnMenu = Application.CommandBars("Standard")
Mensaje: estructura simple For Each miboton In EnMenu.Controls
On Error Resume Next
'para conocer los números de cada botón
Sub mensaje() MsgBox miboton.Caption & " - " & miboton.ID 'esto es para saber el
MsgBox "Texto del mensaje", vbOKOnly + vbInformation, "Titulo del número de control
Mensaje" 'If miboton.ID = 3 Then miboton.Enabled = False 'inhabilita el botón de
End Sub Guardar
'volverla a True antes de cerrar el libro
Mensaje: con avisos de opciones Next
Set EnMenu = Nothing
'estas son para las opciones del menú Edición
Set EnMenu = Application.CommandBars("Edit")
Sub pregunta()
For Each micontrol In EnMenu.Controls
intRespuesta = MsgBox("Desea terminar el proceso?", vbYesNo +
On Error Resume Next
vbQuestion, "MsgBox como función")
'para conocer los números de cada opción del menú
If intRespuesta = vbYes Then
MsgBox micontrol.Caption & " - " & micontrol.ID 'esto es para saber el
MsgBox ("guarde previamente la planilla") ' Terminar el proceso
número de control
Else
'If micontrol.ID = 19 Then micontrol.Enabled = false 'inhabilita la opción
MsgBox ("guarde la planilla y luego salga del sistema") ' Continuar con el
Copiar
proceso
'volverla a True antes de cerrar el libro
End If
Next
End Sub
Set EnMenu = Nothing
End Sub
Mensaje: Redondeo de valores dentro del mensaje