Diseño de macros en Excel
Ejercicio. Estructuras de bucles II
1. Crea una macro que recorra las celdas de una tabla y si una celda está en blanco escriba un 0 en la celda. Además, debe establecer la fuente en rojo para los valores 0. Estos son los pasos que deben efectuarse:
- Definir las variables
- Seleccionar la tabla entera
- Guardar en las variables la cantidad de filas y columnas de la tabla
- Recorrer la tabla entera y, para cada celda:
- Si está vacía ( =”” ) escribir el valor 0.
- Si contiene el valor 0 establecer el color de la fuente a rojo.
Esta podría ser una posible solución:
Sub Macro()
Dim intColumnas As Integer
Dim intFilas As Integer
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Range(Selection, Selection.End(xlToRight)).Select
intColumnas = Selection.Columns.Count
intFilas = Selection.Rows.Count
ActiveCell.Offset(0, 0).Select
For i = 1 To intColumnas
For j = 1 To intFilas
If Selection.Value = "" Then Selection.Value = 0
If Selection.Value = 0 Then
Selection.Font.Color = RGB(255, 0, 0)
End If
ActiveCell.Offset(1, 0).Select
Next j
ActiveCell.Offset(-1, 0).Select
Selection.End(xlUp).Select
ActiveCell.Offset(0, 1).Select
Next i
End Sub
2. Crea una macro que copie cada columna de una tabla en una hoja nueva. Estos son los pasos que deben efectuarse:
- Definir las variables
Seleccionar la tabla entera
Guardar en las variables la cantidad columnas de la tabla y el nombre de la hoja activa. - Recorrer las columnas y, para cada columna:
- Seleccionar la columna
- Copiar las celdas seleccionadas
- Añadir una nueva hoja y pegar las celdas copiadas
Esta podría ser una posible solución:
Sub Macro()
Dim strNombreHoja As String
Dim intColumnas As Integer
strNombreHoja = ActiveSheet.Name
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
intColumnas = Selection.Columns.Count
ActiveCell.Offset(0, 0).Select
For i = 1 To intColumnas
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets.Add
ActiveSheet.Name = "columna" & i
ActiveSheet.Range("A1").Select
ActiveCell.PasteSpecial xlPasteValues
Sheets(strNombreHoja).Select
ActiveCell.Offset(0, 1).Select
Next i
End Sub