Selección de Celdas en VBA para Excel
Selección de Celdas en VBA para Excel
Sub selecciono09()
Sub selecciono04() 'ampliar el rango de selección
Dim variable As Integer Range("A1:B5").Select
variable = 5 [Link](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").[Link]
[Link](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 [Link] <> ""
[Link](1, 0).Select
'si la celda contiene datos, pasa a la fila siguiente
Wend
Sub selecciono12()
filalibre = [Link]
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 = [Link]
'guarda la referencia absoluta
lugar2 = [Link](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
[Link] 'hoja anterior a la activa
Range("A2") = [Link] 'nombre de la hoja
Range("A3") = [Link] 'número de hoja
End Sub
Módulo 2: Edición: Copiar, Borrar, Range("C2").Select
[Link]
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 [Link] = UCase([Link])
(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
[Link] = LCase([Link])
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
[Link] = UCase([Link])
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).[Link] = 7 'fucsia
col1 = 1 Case Else
col2 = 5 Cells(fila, columna).[Link] = 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).[Link] = 5 'azul End Sub
Else
If Cells(fila, columna).Value < 1500 Then Colores: Oculta fila con color determinado
Cells(fila, columna).[Link] = 3 'rojo
Else
Cells(fila, columna).[Link] = 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 [Link] <> ""
If [Link] = xlColorIndexAutomatic Then
Colores: recorre un rango coloreando las celdas según su valor [Link] = True
End If
[Link](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 [Link] = 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
[Link] = 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).[Link] = 5 'azul
Rows("2:1000").Select
Case 1000 To 1499
[Link] = False
Cells(fila, columna).[Link] = 3 'rojo
Range("C3").Select
Case 1500 To 1999
[Link] = True
Cells(fila, columna).[Link] = 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")
[Link] = MiNombre
Next hoja
End Sub
Módulo 4: Insertar: Nombre, Columna, Fila, [Link]
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"
[Link](0, 1).Value = [Link] 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")
[Link] = 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")
[Link] = 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
[Link] "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
[Link] 'previamente se habrá seleccionado algo
fila3 = 2
[Link] Destination:=[Link](1, 4)
Range("A2").Select
[Link] = False
While Cells(fila1, 1).Value <> ""
'desprotege la hoja para poder ocultar una columna
'compara las col 1 y 2, copiando en la 4
[Link] "contraseña"
If Cells(fila1, 1).Value = Cells(fila2, 2).Value Then
'oculta la col 1 de la hoja activa
fila1 = fila1 + 1
[Link] = 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()
[Link] 'oculta la ejecución de los siguientes pasos de la macro
'imprime la hoja activa [Link] = False
[Link] Copies:=1, Collate:=True 'abre un segundo librolibro (ajustar la ruta)
End Sub [Link] "C:\Mis documentos\[Link]"
'activa el segundo libro
Workbooks("[Link]").Worksheets("Hoja2").Activate
Imprimir: seleccionar área de impresión 'abriendo un libro y deshabilitando la actualización de vínculos
'[Link] Filename:="C:\Mis documentos\[Link]",
UpdateLinks:=0
Sub AreaImpresion() 'se vuelve al estado normal de ejecución
Dim primera, ultima As Variant [Link] = True
Range("A1").Select End Sub
If [Link] = "" Then
[Link](xlToRight).Select Cerrar: cerrar libro sin guardar
End If
primera = [Link]
[Link](xlLastCell).Select
ultima = [Link] Sub CerrandoLibros_1()
[Link] = (primera & ":" & ultima) 'cierra el libro sin guardar los cambios
End Sub Workbooks("[Link]").Close False
End Sub
Imprimir: configurar impresión
Cerrar: cerrar libro y guardar
Sub Configurando()
With [Link] Sub CerrandoLibros_2()
'para el encabezado 'guarda y cierra el libro activo
LeftHeader = "Nombre Empresa" 'ingresar un texto [Link]
CenterHeader = "&T" 'Time u hora [Link]
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
[Link] = False
'guardando el segundo libro
Workbooks("[Link]").SaveAs Filename:="C:\Mis
documentos\[Link]", FileFormat:=xlNormal, Password:="clave",
ReadOnlyRecommended:=False
'omitiendo algunas opciones
Workbooks("[Link]").SaveAs Filename:="C:\Mis
documentos\[Link]"
'cerrando un libro guardado
Workbooks("[Link]").Close
'guardando el libro activo con nombre = valor de celda
[Link] Filename:=Range("A2").Value
End Sub
Sub selecciono08()
Range("D3").Select
[Link](-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
[Link] = 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 = [Link]("Standard")
Mensaje: estructura simple For Each miboton In [Link]
On Error Resume Next
'para conocer los números de cada botón
Sub mensaje() MsgBox [Link] & " - " & [Link] 'esto es para saber el
MsgBox "Texto del mensaje", vbOKOnly + vbInformation, "Titulo del número de control
Mensaje" 'If [Link] = 3 Then [Link] = 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 = [Link]("Edit")
Sub pregunta()
For Each micontrol In [Link]
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 [Link] & " - " & [Link] 'esto es para saber el
MsgBox ("guarde previamente la planilla") ' Terminar el proceso
número de control
Else
'If [Link] = 19 Then [Link] = 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