Ejemplos de Usos de VB en Excel

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 28

1 https://www.excel-avanzado.com/39174/manipular-formatos-en-vba.

html
Utilizando la siguiente codificación para cada tipo de fuente, cambiando solo el .Name="Agregar el
tipo de fuente que deseemos":
Sub ARIAL()
' ARIAL Macro
Range("I9:L14").Select
With Selection.Font
.Name = "Arial"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.COLOR = -10477568
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
End Sub

2 Examinemos en este artículo las diversas formas en que se puede proceder a seleccionar un rango
de celdas.

Seleccionar una celda


Para seleccionar una celda primero se activa la hoja que voy a utilizar, luego lo programo en VBA
utilizando Range y select.
Sub SeleccionarCeldas()
Range("B7").Select
End Sub

Seleccionar una columna


Para seleccionar una columna primero se activa la hoja que voy a utilizar, luego lo programo en
VBA utilizando Range y select, pero lo que va dentro de range es la columna que voy a seleccionar
en este caso la columna (“B:B”).
Sub SeleccionaColumna()
Range("B:B").Select
End Sub

Seleccionar celdas discontinuas


Para seleccionar una celda primero se activa la hoja que voy a utilizar, luego lo programo en VBA
utilizando Range y select, pero lo que va dentro de range son las celdas que voy a seleccionar en
este caso las celdas ("A4:A10, D10, B5:B15").
Sub SelecionarCeldasDiscontinuas()
Range("A4:A10, D10, B5:B15").Select
End Sub

Seleccionar columnas discontinuas


Para seleccionar columnas primero se activa la hoja que voy a utilizar, luego lo programo en VBA
utilizando Range y select, pero lo que va dentro de range son las columna que voy a seleccionar en
este caso las columnas ("A:A, D:F").
Sub SeleccionarColumnasDiscontinuas()
Range("A:A, D:F").Select
End Sub

Seleccionar una fila


Para seleccionar una fila primero se activa la hoja que voy a utilizar, luego lo programo en VBA
utilizando Range y select, pero lo que va dentro de range es la fila que voy a seleccionar en este
caso la fila (“2:2”).
Sub seleccionarfila()
Range("2:2").Select
End Sub

Seleccionar filas discontinuas


Para seleccionar una filas primero se activa la hoja que voy a utilizar, luego lo programo en VBA
utilizando Range y select, pero lo que va dentro de range son las filas que voy a seleccionar en este
caso las filas ("2:2, 4:7").

Seleccionar celdas en una hoja específica y utilizando la propiedad Cells


Para seleccionar una celda en una hoja específica primero activo la hoja, luego lo programo en
VBA utilizando worksheets,cells.select. Lo que va dentro de cells es la celda (1,1) y en worksheets
la hoja. Cabe resaltar que se puede utilizar range por cells solo cambia la forma del argumento
range(“A1”)
Sub Seleccionar()
Worksheets(1).Cells(1, 1).Select
End Sub
Sub Seleccionar()
Worksheets(1).range(“A1”).Select
End Sub

Seleccionar el rango actualmente utilizado en la hoja activa


Se utiliza esta manera de seleccionar rango cuando tengo una base de datos en Excel ya hecha. Para
esto utilizo activesheet, usedrange, select de la siguiente forma.
Sub SelccionarRangoUtilizado()
ActiveSheet.UsedRange.Select
End Sub

Seleccionar un rango de celdas utilizando la propiedad Cells y Range


Para seleccionar un rango de celdas específica en Excel se utiliza dos formas: una con Cells y la
otra con Range. En la primera dentro de range se coloca cells (1,1) que representa la celda A1
seguido de una coma cells(5,5) que representa la celda E5 luego se cierra paréntesis de la siguiente
forma.
Sub seleccionarRangos()
ActiveSheet.Range(Cells(1, 1), Cells(5, 5)).Select
End Sub
La segunda forma es más rápida solo utilizando range (“A1:E5”).
Sub seleccionarRangos()
ActiveSheet.Range(“A1:A5”).Select
End Sub

Utilidad de seleccionar un rango de celdas


Al momento de seleccionar rango de celdas mediante VBA se automatiza tareas que se pueden
repetir constantemente. En consecuencia hay un aumento de eficacia y eficiencia en el trabajo que
realizas, puesto que reducimos horas de nuestro trabajo en realizar tareas manuales al convertirlas
en automáticas.

3 COMO ENCONTRAR CELDAS COMBINADAS


Cuando se tiene uno o varios conjuntos de celdas combinadas en la hoja activa y se desea identificar
que celdas y rangos son, se hace uso de las siguientes propiedades:
– Celda.MergeCells

– Celda.MergeArea
La primera identifica si existen celdas combinadas en la hoja activada. La segunda, identifica el
rango al que pertenece la celda combinada y arroja la información de los rangos. En caso la celda
seleccionada no pertenezca a un conjunto de celdas combinadas el valor que arroja es la celda
especifica.
Ejemplo:
En el siguiente ejemplo se tiene una hoja de Excel con algunos conjuntos de celdas combinadas,
según la programación mostrada se busca identificar las celdas que forman parte de algún conjunto
de celdas combinadas y mostrar sus respectivas ubicaciones (columna, fila). Adicionalmente se
muestra un cuadro de texto con los rangos de los diferentes conjuntos de celdas combinadas.

Sub EncontrarCeldasCombinadas()
For Each celda In ActiveSheet.UsedRange
If celda.MergeCells = True Then
mensaje = mensaje & celda.MergeArea.Address & Chr(10)
mensaje2 = mensaje2 & celda.Address & Chr(10)
End If
Next
MsgBox mensaje2
MsgBox mensaje
End Sub
4 Intercalar filas en blanco con Macros o VBA
El Excel no dispone de una manera fácil para realizar la función de intercalar filas en un
rango Sin embargo; existe una solución el cual consiste en realizar una macro que simplifique esta
función o lo ejecute por nosotros. En el caso de VBA Excel Avanzado Macros aplicado a
Intercalar filas alternas en un rango para realizar esta función necesitamos hacer un recorrido por
las filas del rango en sentido contrario al usual lo que significa empezaremos de abajo a arriba de
la última fila a la primera, para ello usaremos el método Insert. Este orden nos asegurara al que
que cuando insertemos nuevas filas no afecte a los siguientes insertados, lo que si pasaría cuando
empezamos de las filas superiores a las inferiores y Dentro del Explorador de proyectos del Editor
de VBA, insertaremos en un Módulo el siguiente código de nuestra macro de Excel ejecutando la
siguiente macro:

Sub intercalado()
Set Rng = Range("A1:A10")
'controlamos la primera y última fila
'donde se encuentra el rango a intercalar
rng1 = Rng.Item(1).Row
rng10 = Rng.Item(Rng.Count).Row
'inhabilitamos la actualización o refresco de pantalla
Application.ScreenUpdating = False
'recorremos en orden inverso las filas del rango
For i = rng10 To rng1 + 1 Step -1
'insertando filas y desplazándolas hacia abajo
'como pretendíamos
Rng.Item(i).Insert Shift:=xlDown
Next i
'reactivamos el refresco de pantalla
Application.ScreenUpdating = True
End Sub

5 Cambiar los colores de fondo con VBA


http://www.excel-avanzado.com/1346/cambiar-colores-fondo-vba.html
Por medio de esta aplicación VBA podemos modificar el color de una celda, un rango de celdas o
columnas de forma automática utilizando el código.

Sub Cambiarcolor()
Range("A1:A6").Interior.Color = RGB(500, 10, 27)
End Sub
6 Combinar dos columnas
Sub unir ()
Dim fila As String
Dim txt As Integer
fila =1
Do Until IsEmpty(Cells(fila,1))
Cells(fila,1) = Cells(fila,1) & “-” & Cells(fila,2)
Cells(fila,2).ClearContents
Range(Cells(fila,1), Cells(fila,2)).Merge
fila = fila + 1
Loop
Columns(1).AutoFit
End Sub

7 CATALOGO DE IMAGENES

8 Userform aplicado para extraer productos de una lista


Un Userform es un formulario diseñado con formato y estructura estándar que facilita la captura, la
organización y la edición de la información.
Este userform tiene como finalidad ayudar al usuario a extraer datos de una gran base de datos y
poder registrarlo en una nueva tabla. Así se logra una reducción en el tiempo de búsqueda del
usuario y el tiempo de registro de datos.
En este caso se cuenta con una lista de artículos que cuenta con los siguientes datos: número de
artículo, descripción, precio y stock. En base a esta base de datos se ejecutará la macro. Se crea un
botón el cual hará aparecer el formulario.
Este formulario nos ayudará a obtener los datos de la lista de productos. Se hará click en el botón
nuevo. Este formulario cuenta con una lista desplegable con la cual el usuario puede seleccionar el
artículo deseado. Luego, al hacer click en el botón transferir automáticamente se registrarán los
datos del productos a una nueva lista.

9 Macros para añadir texto a la izquierda o derecha en un rango

Muchas veces cuando trabajamos en Excel se desea agregar palabras al final o al comienzo de
un texto en una celda. Sin embargo, hacerlo de forma manual tomaría mucho tiempo especialmente
si el rango de celdas a los cuales se les desea realizar esa modificación es muy grande. Por ello, en
esta oportunidad desarrollaremos un macros usando fundamentalmente la estructura For each para
realizar dicha acción.

Lo primero que haremos es crear un botón para que al apretarlo podamos acceder a un
formulario que permita agregar texto a una celda numérica.

Luego creamos un formulario que


nos permita poder ingresar el rango de celdas al cual se le desea agregar el texto, si se desea
agregarlo después o antes de lo que aparece en la celda y que palabra o frase se desea agregar. A
continuación se presenta el formulario:
Luego, ingresamos la sintaxis para poder modificar las celdas :

Private Sub CommandButton1_Click()

Private Sub CommandButton1_Click()


If OptionButton1.Value = True Then
'Paso1: Declarar sus variables
Dim MyRange1 As Range
Dim MyCell1 As Range
'Paso2: Lo que hacemos aquí es agregar la opción de poder guardar la base de datos original
antes de modificarla
Select Case MsgBox("¿Desea usted guardar la base de datos antes de modificarla?",
vbYesNoCancel)
Case Is = vbYes
ThisWorkbook.Save
Case Is = vbCancel
Exit Sub
End Select

'Paso 3: Definimos el rango objetivo


Set MyRange1 = Range(TextBox1)
'Paso 4: Empieza el comando en el rango.
For Each MyCell1 In MyRange1
'Paso 5: Aseguramos que la celda no este vacía
If Not IsEmpty(MyCell1) Then

MyCell1 = MyCell1 & " " & TextBox2.Text


End If
'Paso 6: Pasamos a la siguiente celda del rango
Next MyCell1
End If

If OptionButton2.Value = True Then


'Paso1:Declarar sus variables
Dim MyRange As Range
Dim MyCell As Range

'Paso2: Lo que hacemos aquí es agregar la opción de poder guardar la base de datos original
antes de modificarla
Select Case MsgBox("¿Desea usted guardar la base de datos antes de modificarla?",
vbYesNoCancel)
Case Is = vbYes
ThisWorkbook.Save
Case Is = vbCancel
Exit Sub
End Select
'Paso 3: Definimos el rango objetivo
Set MyRange = Range(TextBox1)
'Paso 4: Empieza el comando en el rango.
For Each MyCell In MyRange
'Paso 5: Aseguramos que la celda no este vacía
If Not IsEmpty(MyCell) Then
MyCell = TextBox2.Text & " " & MyCell
End If
'Paso 6: Pasar a la siguiente celda del rango
Next MyCell
End If
End Sub

Ejemplo:
En el siguiente caso tenemos una hoja con nombres y edades. Si queremos añadir edades a los
nombres ponemos el rango B2:B7, que este antes del número y como palabra años. Si deseamos
podemos guardar la base que tenemos antes que sea modificada o no . A continuación se agrega el
archivo que contiene todo el macros para que pueda ser revisado.
VER ARCHIVO

10 Copiar filas filtradas hacia un nuevo libro


Usualmente, cuando trabajamos con información a la cual le aplicamos un filtro para quedarnos
solamente con algunas filas, deseamos que esas filas filtradas se copien a un nuevo libro de Excel.
Si bien, este proceso se puede realizar de manera manual, seleccionando el rango, copiándolo,
abriendo un nuevo libro de excel, pegar la información y ajustar el tamaño de las columnas,
mediante la siguiente macro presenta una alternativa que permite acelerar el proceso descrito. El
código que nos permitirá realizarlo es el siguiente:
Sub Copiar_filtro()
'Paso 1
If ActiveSheet.AutoFilterMode = False Then
Exit Sub
End If
'Paso2
ActiveSheet.AutoFilter.Range.Copy
Workbooks.Add.Worksheets(1).Paste
'Paso 3
Cells.EntireColumn.AutoFit
'Paso 4
Application.DisplayAlerts = False
Sheets("Hoja2").Delete
Sheets("Hoja3").Delete
End Sub

A manera de ejemplo, veamos el siguiente archivo Copiar filas filtradas.


Éste contiene una hoja llamada "08061000000" en la cual se encuentra la información
correspondiente a las exportaciones peruanas de Uva durante el año 2013, obtenido de la página
web de SUNAT (http://www.aduanet.gob.pe/).
En el paso 1, lo que hace la MACRO es verificar si es que se ha activado un filtro dentro de la hoja
activa, de no ser así, la MACRO termina en este paso y no ocurre nada con la data de la hoja;
Si se detecta un filtro, se procede al paso 2.

En el paso 2, lo que se hace es seleccionar el rango que se encuentre filtrado (en este caso se
ha filtrado las exportaciones hacia Bélgica, "Belgium" en el archivo). Entonces, las filas filtradas se
copian y se abre un nuevo libro de excel.
En el paso 3, en el nuevo libro se ajusta el tamaño de las columnas que se han pegado
En el paso 4, lo que se hace simplemente es eliminar las hojas 2 y 3 que aparecen por default
cuando se abre un nuevo libro, de tal manera que el libro generado para pegar la información
filtrada solo cuente con una hoja (aquella con la información que habíamos filtrado).

11 Crear hoja de una lista (VBA)

En varias ocasiones, al elaborar un libro de Excel, se necesita crear varias hojas para poder
manejar distintos contenidos. Esta macro, ayuda a organizarlas pues permite crearlas a partir de una
lista que contiene los nombres de las hojas de cálculo que se desea generar. Esta macro es
interesante pues se pueden crear varias hojas, con los nombres de los 24 departamentos por
ejemplo, con tan sólo ejecutar esta macro y seleccionar el rango.
De esta manera, se generan las hojas de cálculo con los nombres de la lista.

12 Proteger todas las hojas con macros


13 Ordenar hojas
Esta macro también genera un ahorro de tiempo ya que permite ordenar las hojas en forma
ascendente o descendente; lo cual resultaría difícil de realizar si no se contara con este programa.

14 Ocultar todas las hojas excepto la activa y mostrar todas las hojas que estén ocultas:
Estas son dos macros que se complementan y permiten un trabajo efectivo en las hojas de Excel.Durante el
trabajo de bases de datos resulta sumamente útil ocultar algunas hojas del libro de Excel de manera que el movimiento a
lo largo del trabajo resulta más ligero. La primera de ellas, permite ocultar todas las hojas excepto aquella en la que se
está trabajando, para lo cual se usa el comando de visibilidad de hoja (Sheet.Visible ).
Sub Ocultarhojasmenoslaactiva()
For Each Sheet In ActiveWorkbook.Sheets
If Sheet.Name <> ActiveSheet.Name Then
Sheet.Visible = False
End If
Next Sheet
End Sub
Por su parte, la segunda macro permite volver a mostrar las hojas que en algún momento se ocultaron:
Sub macro_mostrar()
Dim numero As Byte
Dim i As Byte
numero = Sheets.Count
For i = 1 To numero
Sheets(i).Visible = True
Next
End Sub
15 Crear un archivo por cada hoja de Excel
Esta macro es sumamente útil cuando los datos se encuentran en un mismo archivo, pero
necesitan ser distribuidos a diferentes áreas o personas, a las cuales solo se les debe dar una porción
de la información que se tiene en el archivo. Para ello, se necesita crear un archivo Excel por cada
hoja que se tiene, y en aquel archivo debe encontrarse toda la información que se encuentra en esa
hoja. Cabe mencionar que estos archivos se guardarán en la misma ruta en la que se encuentra el
archivo original.

16 Eliminar Filas Según Criterio


Basándose en el tema de la eliminación de columnas vacías, se adjunta en este artículo la
forma de eliminar en un archivo según un criterio en específico, para ello es necesario emplear el
código de la última fila. Esta macro generalizada, solicita la columna del criterio y cuál es esté para
poder facilitar al usuario su búsqueda.
17 Referencia a rangos en VBA
Por medio del uso Range podemos emplear diversos conjuntos de datos, en este artículo
veremos como hacer referencia a los rangos.
Por medio de Range podemos identificar los siguientes rangos:
* Un conjunto de celdas
* Una celda especifica
* Una fila o columna entera
* Celdas en otras hojas de trabajo.

Formas de Seleccionar celdas con Range


Una celda especifica:
Range("A1").select
Un conjunto de celdas:
Range("B1:C4").select
Range(Cells(1, 1), Cells(5, 3)).select
Conjunto de celdas no contiguas:
Range("B1,B5,D6").Select
Celdas no contiguas mas un conjunto especifico:
Range("G1,H2,A1:B3").Select
Ejemplos de referencia a rangos en VBA

A continuación vamos a revisar algunos ejemplos sobre como hacer referencia a rangos
usando Range
Sub ejemplo01()
' Escribir una misma palabra en todo el rango
Worksheets("Hoja2").Range("B15:E33") = "Hola"
' Ahora escriberemos otro texto solo en 2 celdas
Worksheets("Hoja2").Range("D5,G7") = "Excel"
Worksheets("Hoja2").Range("J1,H2,B8") = "Avanzado"
Range("A1").Offset(2, 2) = "Referencia"
End Sub
Como se puede ver el codigo Offset en VBA se basa en la celda, para a partir de esa referencia
emplear otra celda, para conocer mas detalles del offset se puede revisar: Utilidad del Offset
En el siguiente ejemplo observaremos como por medio de una variable (en este caso la
variable se llama "Mirango") se puede hacer referencia a un rango de celdas, y realizar diversas
operaciones sobre el conjunto de celdas.
Sub ejemplo02()
Dim Mirango As Range
Set Mirango = Worksheets("Hoja1").Range("B55:E59")
Mirango.Formula = "Area"
Mirango.Font.Bold = True
End Sub
18 Ejemplo de uso de select case aplicado a una planificacion de la produccion
La función Select Case
Nos permite darle la instrucción al programa que se utilizaran varias condiciones a la vez, a
diferencia de otras funciones que solo permiten el uso de dos condiciones, el programa lo que hace
es encontrar la coincidencia para cada caso y a partir de ahí ejecuta todo el grupo de instrucciones
asociadas a ese caso.
Ejemplo aplicado a un entorno de producción
Dentro de los entornos de producción el planificador debe de trabajar con una serie de
variables para definir el plan de producción del mes, dentro de estas variables tenemos: el histórico
de ventas, políticas de stocks, capacidades, entre otros.
Cada una de estas variables puede comportarse de manera diferente para cada rango de
valores, por ejemplo dentro de la política de ventas si la venta del mes anterior es menor a 100 kilos
se podría definir que no es necesario estimar un pronóstico de ventas sino que más bien es
conveniente la fabricación bajo pedido, para el resto de casos es conveniente la estimación de las
ventas. Por otro lado el caso podría complicarse si para cada rango de valores uno tiene un método
de estimación diferente, de manera que la función select case encaja perfectamente con el problema
propuesto.
EL sistema desarrollado en el archivo adjunto nos solicita el ingreso de cuatro variables y
finalmente nos indicara la cantidad a fabricar y los comentarios relevantes para cada caso.

19 Utilidad del offset


La función offset sirve para poder moverse a través de la hoja de cálculo, tal como si lo hiciéramos
con las flechas del teclado (arriba, abajo, izquierda, derecha).

Offset(número de filas, número de columnas)

Ejemplos:

ActiveCell.Offset(1, 0).Select -> Avanza una fila (abajo)


ActiveCell.Offset(0, 1).Select -> Avanza una columna (derecha)
ActiveCell.Offset(2, -1).Select -> Avanza 2 filas (abajo) y retrocede 1 columna (izquierda)
ActiveCell.Offset(0, 0).Select -> Se mantiene en la misma celda activa

Con esta función igualmente podemos poner valores a la celda activa seleccionada. Por ejemplo, la
siguiente macros:

Sub utilidad_del_offset()
Dim TITULO As Range
Set TITULO = Range("A1")
TITULO.Offset(1, 0).Value = "Utilidad del Offset"
End Sub
Los resultados serán que el título "Utilidad del Offset" será colocado 1 fila debajo de la celda A1:

Otra utilidad es para irse a la primera fila en blanco al final de una tabla completa de datos. La
sentencia sería (considerando que estamos dentro de la tabla):

Sub fin_inferior_de_la_tabla()
ActiveCell.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End Sub

Igualmente para irse al final derecho de la tabla:

Sub fin_der_de_la_tabla()
Selection.End(xlToRight).Select
Selection.Offset(0,1).Select
End Sub

He seleccionado algunas celdas de la columna B (rango variable) y quiero pegar un dato en las
mismas filas pero de la columna D, sé que es sencillo pero no logro ajustar el código para que
funcione.”
ActiveCell.Offset(0,2).Value=Tu valor

Range
El objeto Range se refiere a una celda específica , una celda activa, un conjunto de celdas
(separadas o juntas), o una fila entera o una columna.
Es decir, podemos aplicarla para seleccionar, dichas celdas, o bien para darles algún valor, o
aplicarles alguna fórmula.
Primero observemos las formas de poder seleccionarlas :
Range("A1").select 'selecciona la celda A1 en la hoja activa. Esto es porque no
especificamos el "Worksheets"
Range("A1: B10").select 'selecciona todo el rango desde A1 hasta B10 en la hoja activa.
Worksheets(3).Range("A1").select 'selecciona la celda A1 en la hoja 3
Range("A1,A3,C5").select 'selecciona celdas separadas en la hoja activa.
Range("Ingresos").select ' selecciona la celda o conjunto de celdas que tengan como
nombre "ingresos" en la hoja activa
Otra forma de referirse a específicas celdas en un rango de celdas es definir el rango de celda como
una variable, y después seleccionar ciertas celdas dentro de dicho rango
Por ejemplo :
Dim mirango as range
Set mirango = Range("B1:B11")
mirango.range("A1").select
mirango.range("B1").select ' Es importante saber que al seleccionar una celda dentro del
rango B1 : B11, la nominación A1 corresponde a la celda que se ubica en la esquina superior
izquierda, en este caso B1, y a partir de esa celda se ubican las demás.
Ahora veamos como darle valor a un rango:
Si se quiere que aparezca un valor como un número simplemente se hace lo siguiente :
Range("A1") = 35 'Hace que el número 35 aparezca en el la celda A1, en la hoja activa
Worksheets(3).Range("A1:B10").value = 1 'Hace que el valor de todas las celdas del rango
sean 1, en la hoja 3.

Nótese que se puede usar ".value" o no. El resultado será el mismo.


Otra forma de utilizar el objeto range es asignarle una fórmula :
Worksheets(1).Range("A1").Formula = Int(10 * Rnd()) 'Esta propiedad devuelve el resultado
de la fórmula (toma la parte entera de un numero aleatorio entre 0 y 1 multiplicado por 10) y
asigna dicho valor a la celda A1 y en la hoja 1

Una importante propiedad es OFFSET. Esta propiedad define a la celda activa con el valor de (0,0)
y al desplazarse una cada fila o columna se tiene que adicionar 1 o restar -1 a la posición inicial. El
primer carácter se refiere a las filas y el segundo a las columnas.
Por ejemplo :
Activecell.offset(1,0) = 35 'Si la posición inicial era la celda D5, entonces, esta propiedad
asigna el valor de 35 a la celda D6, ya que se desplaza una fila hacia abajo

Entonces, se puede observar que el objeto range, es muy útil para asignar valores y seleccionar
celdas, grupo de celdas, filas o columnas, ya sea en una hoja específica o en la hoja actual.
Realizar una acción en un rango de celdas

En esta ocasión, les daré un ejemplo de cómo aplicar un formato condicional con macros en el
programa Visual Basic, eligiendo un rango y poniéndole una condición y verificar si las celdas
dentro de ese rango cumplen con esta.
En este ejemplo se identifica que notas cumplen con la condición de ser aprobatorias y cuales no y
dependiendo de esto se les aplica un formato: fondo y letra de color rojo para los desaprobados y
azul para los aprobados.
A continuación explicare a más detalle la macro:
El primer paso es definir las variables:

La primera variable se refiere a todo el rango que el usuario elige donde están ubicadas las notas, a
diferencia del segundo, que se refiere a cada una de las celdas, es decir a la celda activa.
En esta ocasión, decidí poner un UserForm para que el usuario decidiera en que rango se aplicara la
macro.

Luego, se fija el rango “MyRange” que depende de lo respondido en el paso anterior.

Set MyRange = Range (rango)

Después, se crea la variable “contador” que se utilizara después para contar cuantas personas
desaprobadas hay.
Nos ayudamos con las funciones FOR e IF de la siguiente manera:

La función FOR como se puede ver sirve en este caso para analizar cada celda y ver si cumple con
la condición dada. En este caso, verificara si cada celda cumple con ser menor que 10.5 y si es asi,
colorea el fondo de color rojo, de otra forma, se coloreara de color azul. Y asi sucesivamente con
cada celda del rango dado. Además, en caso de cumplirse la condición, va contándolo para al final
saber cuántos desaprobados hay.

También incluí un MSGBOX para que diga cuantas personas están desaprobadas y también cual es la
nota promedio.
Ejemplo archivo 9

Do Loop aplicado a la selección de candidatos


Sub ejm3()
X=2
Do While Cells(X, 2) <> ""
If Cells(X, 2) > 18 And Cells(X, 2) < 30 And Cells(X, 3) = "SI" And Cells(X, 4) = "SI" Then
Cells(X, 5) = "PROCEDE A ENTREVISTA"
Else Cells(X, 5) = "NO PROCEDE A ENTREVISTA"
End If
X=X+1
Loop
End Sub

Quitar duplicados en VBA

FOR en VBA para la asignación de bonos


La Macros llamada "Asignación_de_bonos" sirve para identificar la especialidad de los
trabajadores
y consecuentemente, asignar la bonificación correspondiente de acuerdo a la naturaleza del trabajo
del empleado.

Ejemplo Práctico:
1ro – En la siguiente compañía, se busca asignar las bonificaciones correspondientes de Fiestas
Patrias
a sus trabajadores. La bonificación es distinta entre labores, pero la misma dentro de las áreas.
Es decir, todos los trabajadores en ventas (la misma área) reciben la misma bonificación.
2do – A continuación, se procede a digitar la Macros correspondiente, es decir, la mencionada
"Asignación_de_bonos".
La Macros sigue la estructura siguiente:
Sub Asignación_de_bonos()
ult01 = Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To ult01
rubro = Cells(j, 2)
If rubro = "ventas" Then
Cells(j, 3) = Cells(2, 8)
Cells(j, 4) = "Bonificación mayor de Fiestas Patrias"
End If
If rubro = "caja" Then
Cells(j, 3) = Cells(3, 8)
End If
If rubro = "logistica" Then
Cells(j, 3) = Cells(3, 8)
End If
If rubro = "contabilidad" Then
Cells(j, 3) = Cells(4, 8)
End If
Next
End Sub
3ra – Una vez introducida la Macros, al aplicarla obtenemos una adecuada asignación de las
bonificaciones que otorga
la compañia, teniendo ahora una tabla de bonificaciones que distribuye a cada empleado su cuota
correspondiente.
Conclusión:
Así se consigue asignar la bonificación correspondiente a cada empleado según su rubro o
especialización.

For… Next aplicado al cálculo del promedio del curso

29/06/2013 por Fernando Santos | Sin comentarios


Excel nos permite utilizar diferentes estructuras de control con la ayuda de VBA. En este caso, se
detallará acerca de la estructura For… Next.
La estructura For… Next nos permite repetir una serie de instrucciones cuando el número de
reproducciones es conocido.
En el ejemplo propuesto, se utiliza la estructura For… Next para calcular el promedio de los
alumnos del curso de Excel avanzado: Macros. Para ello requiere el dato de cuántos alumnos son en
la clase y se solicita la información de las notas de cada uno de los rubros que intervienen en el
cálculo del promedio. Cada uno de estos datos es solicitado en un InputBox.
Primero solicita la cantidad de alumnos:
FIG1

Luego, solicita las notas para cada rubro (Cada InputBox solicita el dato de una sola nota y en el
título del recuadro aparece el número correspondiente al alumno), por ejemplo:
FIG2
Se obtiene como respuesta el promedio que obtuvo cada
alumno y además señala qué alumnos obtendrán el
certificado debido a que consiguieron una nota aprobatoria.
Por otro lado, brinda información acerca del promedio de
toda la clase y el número de alumnos desaprobados en el
curso.
Aquí se puede apreciar las notas para 5 alumnos del curso, con los cálculos respectivos utilizando la
estructura de control For… Next desarrollada previamente.
FIG4
(Para mayor visualización de la imagen, hacer click en la misma)
Para poder ejecutarlo, se ha colocado un botón “Calcular promedio”
que al darle click comienza a solicitar la información.

FIG5
Asimismo, se ha colocado un botón “Limpiar celdas” para poder
utilizar el archivo en otra oportunidad.

Uso de Resize en Offset


21/04/2012 por Fernando Santos | Sin comentarios
La función del comando Resize es ampliar el rango de selección. Se le da como parámetros la cantidad de filas y
columnas extras  que se quieren seleccionar.
En este ejemplo se selecciona una tabla que se encuentra en la hoja 1
Sub sel()
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count – 1, tbl.Columns.Count).Select
End Sub
Utilizando el comando OFFSET se selecciona solo el contenido de la tabla, obviando los encabezados. Es decir se
salta una fila.
Con el siguiente modulo se copia la tabla seleccionada, es decir los datos en si, sin encabezados, en la hoja 2.
Sub final()
Application.Run "Libro1.xlsx!sel"
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
Podría ampliarse el alcance de esta macro al dar como parámetro las celdas que se desean copiar o mejor dicho las
columnas y unir solo las columnas requeridas para presentar un reporte en la hoja siguiente.
Líneas con Range
https://es.wikibooks.org/wiki/Seleccionar_o_referenciar_celdas_de_Excel_mediante_VBA

'Seleccionar un rango mayor al anteriormente seleccionado, el rango se amplía a 10 filas, 4 columnas

Range("D10").Select
Selection.Resize(10, 4).Select

'Seleccionar un rango mayor al anteriormente seleccionado, estableciendo la cantidad de fila y columnas


adicionales a seleccionar

Range("C2:D10").Select
Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count + 4).Select

'Seleccionar desde la celda E2 hasta la última celda con datos hacia abajo, similar a ctrl + shift + flecha hacia
abajo Range("E2", Range("E2").End(xlDown)).Select

'Otra forma de seleccionar


Range("E2:" & Range("E2").End(xlDown).Address).Select

'Seleccionar desde la celda E2 hasta la última celda con datos hacia la derecha, similar a ctrl + shift + flecha hacia
la derecha Range("E2", Range("E2").End(xlToRight)).Select

'Otra forma de seleccionar Range("E2:" &


Range("E2").End(xlToRight).Address).Select

'Seleccionar desde la celda E2 hasta la última celda con datos hacia la izquierda, similar a ctrl + shift + flecha
hacia la izquierda Range("E2", Range("E2").End(xlToLeft)).Select
'Otra forma de seleccionar

Range("E2:" & Range("E2").End(xlToLeft).Address).Select

'Seleccionar mediante variables y cells un rango hacia la derecha

Sheets("ApiladoVertical").Range((Cells(filaAV, 1)), Range((Cells(filaAV, 1)),


Cells(filaAV, 1)).End(xlToRight)).Select

'Seleccionar la última celda con datos hacia abajo, similar a ctrl + flecha hacia abajo

Range("E2").End(xlDown).Select
'Seleccionar la última celda con datos hacia la derecha, similar a ctrl + flecha
hacia la derecha Range("E2").End(xlToRight).Select

'Seleccionar la última celda con datos hacia la izquierda, similar a ctrl + flecha hacia la izquierda
Range("E2").End(xlToLeft).Select

'Seleccionar desde la celda E1048576 la primer celda con datos hacia arriba, similar a ctrl + flecha hacia arriba
Range("E1048576").End(xlUp).Select
'Hacer referencia a la ultima celda sin datos

ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select

'Hacer referencia a la ultima columna sin datos


ActiveSheet.Range("a1").End(xlDown).Offset(0, 1).Select

'Crear un objeto con las celdas visibles solamente copiarlo y pegarlo en otra hoja Set RG =
Sheets("ARTI").Range("C21",
Sheets("ARTI").Range("C21").End(xlDown)).SpecialCells(xlCellTypeVisible)
RG.CurrentRegion.Copy Sheets("BY879VbDAYRA10iBTOMYIUYT").Range("a1").PasteSpecial

TEORIA Y EJEMPLOS RANGE


https://cursovisualexcel.wordpress.com/2011/09/05/el-objeto-range/

Como propiedades el objeto Range tiene las siguientes:


◾ActiveCell->representa la primera celda activa de la ventana activa
(windowactive) o especificada.
◾Areas->todos los rangos de una seleción múltiple.
◾Cells->representa a una celda o clección de ellas.
◾Columns->representa las columnas de la hoja activa,o especificada, o del rango
especificado.
◾Entire column/row->la columna/fila entera dentro del rango.
◾End->la celda situada al final del rango especificado.
◾Offset->la celda desplazada según un nº específico de fila/columna.

Formas de seleccionar celdas con Range:


Una celda sólo:
Range(“A1”).Select
Un conjunto de celdas contiguas dentro de la misma hoja:
Range(“A1:G5”).Select
Para seleccionar celdas no contiguas:
Range(“A1,A5,B4”).Select
Para seleccionar celdas no contiguas mas un conjunto contiguo:
Range(“A1,A5,B4:B8”).Select
Otro ejemplo:
La siguiente tabla muestra algunas referencias de estilo A1 utilizando el método
Range.

Referencia Significado
Range(“A1”) Celda A1
Range(“A1:B5”) Celdas de la A1 a la B5
Range(“C5:D9,G9:H16”) Selección de varias áreas
Range(“A:A”) Columna A
Range(“1:1”) Fila uno
Range(“A:C”) Columnas de la A a la C
Range(“1:5”) Filas de la uno a la cinco
Range(“1:1,3:3,8:8”) Filas uno, tres y ocho
Range(“A:A,C:C,F:F”) Columnas A, C y F

De todas las propiedades descritas tal vez una de las más usadas sea Offset, que nos permite
seleccionar celdas contiguas a la celda activa según una determinada posición de filas y columnas:
expresión.Offset(RowOffset, RowOffset)

RowOffset Variant opcional. El número de filas (positivo, negativo o cero)


que indica el desplazamiento del rango. Los valores positivos desplazan hacia
abajo y los negativos, hacia arriba. El valor predeterminado es 0.
ColumnOffset Variant opcional. El número de columnas (positivo, negativo o
cero) que indica el desplazamiento del rango. Los valores positivos desplazan a la
derecha y los negativos, hacia la izquierda. El valor predeterminado es 0.

ActiveCell.Offset(0,0)->nos determina la posición actual


Ejemplo:

Sub ejemplo()
‘ejemplos del empleo de range y cells
‘escribo Hola en varias celdas de la hoja 2
Worksheets(“Hoja2”).Range(“A1:B5”) = “Hola”
‘lo mismo pero en celdas discontinuas
Worksheets(1).Range(“F1”, “G5”) = “Hi”
‘ahora en la hoja 2
Worksheets(“Hoja2”).Range(“J1, K3, H5”) = “AAA”
ActiveCell.Offset(2, 2) = “Me desplazo”
End Sub

Si establece una variable de objeto para un objeto Range, puede manipular fácilmente el rango
utilizando el nombre de la variable.
El siguiente procedimiento crea la variable de objeto miRango y, a continuación, asigna la variable
al rango A1:D5 de la Hoja1 del libro activo. Las instrucciones posteriores modifican las
propiedades del rango, sustituyendo el nombre de la variable por el objeto del rango.
Sub Aleatorio()
Dim miRango As Range
Set miRango = Worksheets(“Hoja1”).Range(“A1:D5”)
miRango.Formula = “=ALEATORIO()”
miRango.Font.Bold = True
End Sub

Utilice la función Array para identificar un grupo de hojas. El siguiente ejemplo selecciona tres
hojas del libro activo.
Sub Varias()
Worksheets(Array(“Hoja1”, “Hoja2”, “Hoja4”)).Select
End Sub
Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas propiedades
devuelven un objeto Range que representa un rango de celdas. En el siguiente ejemplo, Rows(1)
devuelve la fila uno de la Hoja1. A continuación, la propiedad Bold del objeto Font del rango se
establece en True.
Sub FilaNegrita()
Worksheets(“Hoja1”).Rows(1).Font.Bold = True
End Sub
La siguiente tabla muestra algunas referencias de fila y columna, utilizando las propiedades Rows y
Columns.
Referencia Significado
Rows(1) Fila uno
Rows Todas las filas de la hoja de cálculo
Columns(1) Columna uno
Columns(“A”) Columna uno
Columns Todas las columnas de la hoja de cálculo
Excel protegidos por password
https://www.rankia.com/blog/comstar/1021298-trucos-tretas-excel-vba-para-programadores

If ActiveSheet.ProtectContents Then
ActiveSheet.Unprotect Password:="XYZ"
End If

Este código se encargará de eliminar la protección contra password. En este caso el password es
XYZ. Cuando trabajas con hojas protegidas con password, obtendrás errores al tratar de acceder a
material protegido y por eso debes desproteger la hoja para trabajar en ella.

Enviar un correo con archivo adjunto

Si quieres generar un correo y pegarle un archivo adjunto, puedes usar el siguiente código:
Dim oLook As Object
Dim oMail As Object

Set oLook = CreateObject("Outlook.Application")


Set oMail = oLook.createitem(0)
With oMail
.To = "[email protected]"
.body = "Este es el cuerpo del mensaje. Ver archivo adjunto"
.Subject = "Asunto. Envio de archivo adjunto"
.Attachments.Add ("C:\MiArchivo.xlsx")
.Send
End With

Set oMail = Nothing


Set oLook = Nothing

Este código buscará el archivo MiArchivo.xlsx ubicado en C:\, construirá el mensaje y lo enviará a
la dirección [email protected]. La lógica de este código usa un poco de programación
orientada a objetos. oLook es un objeto que se encarga de manejar la aplicación Outlook, y oMail
es un objeto que se encarga de manejar el correo.

Ocultar una hoja e impedir que el usuario la vea


Si quieres ocultar una hoja de Excel para que el usuario no la pueda ver, y no pueda mostrar su
contenido usa este código:
Set hide_sheet = Sheet1
hide_sheet.Columns.Hidden = True
hide_sheet.Visible = False
El código lo que hace es ocultar todas las columnas de la hoja Sheet1 y luego oculta la hoja. Cabe
notar que Sheet1 no es el nombre de la hoja visible para el usuario, sino el nombre del objeto que
aparece en el editor de código de Excel VBA fuera de los paréntesis.

Copiar un rango de una página a otra


Se copiarán los datos presentes en el rango seleccionado en la página de trabajo (hoja 1), en el
rango seleccionado correspondiente en la página siguiente de la Hoja de Calculo, o Hoja2.
hoja1.Range(rango).copy destination:=hoja2.range(rango)
MSGBOX: El argumento Title
Antes de revisar el segundo argumento de la función MsgBox, hablaremos sobre su tercer
argumento que es el título del cuadro de diálogo. Para poner un título personalizado será suficiente
indicarlo de la siguiente manera:
1
2
3

Esta instrucción mostrará el título del cuadro de diálogo como “Mensaje especial” y ya no se
mostrará el nombre de la aplicación. Observa el resultado:

ARGUMENTO BUTTONS

También podría gustarte