Ejemplos de macros

En esta página iremos insertando macros  y códigos que pueden servirle de ayuda.

Macro para solicitar confirmación de salir de Excel.

‘macro que solicita al usuario que confirme salir de Excel
Private Sub salir()
If msgbox(“¿Desea salir de Excel?”,vbQuestion+ vbYesNo)=vbYes Then
    Application.quit

    End If
End Sub

Macro para guardar archivo seleccionando ubicación

Sub guardar_archivo()
Dim stArchivo
stArchivo = Application.GetOpenFilename(“Hoja de Excel , *.xls*”, _
    , “Seleccione archivo “)

End Sub

Macro para guardar archivos en otro formato

Sub guardar_archivo_otro()
‘con esta macro guardamos el archivo con la fecha y hora actual y formato csv
Dim nombre, nombrearch, hoja, ruta
nombre = Format(Now, “dd-mm-yy hh.mm.ss”)
ruta = ActiveWorkbook.Path
nombrearch = ActiveWorkbook.Name
hoja = ActiveSheet.Name
ActiveWorkbook.SaveAs Filename:=ruta & “\” & hoja & nombre & “.csv”, FileFormat:=xlCSV
ActiveSheet.SaveAs ruta & “\” & nombrearch & nombre & “.xlsm”
End Sub

Copiar rango de una hoja a otra

Si queremos que se quiera copiar los rangos de la hoja activa de una hoja a otra ejecutariamos la macro siguiente:

Option Explicit

Dim f, c

Public Sub CopiarRango()

ActiveCell.CurrentRegion.Select

f = ActiveCell.Row

c = ActiveCell.Column

Selection.Copy

Sheets(“Hoja2″).Activate

Cells(f, c).Activate

ActiveSheet.Paste

End Sub

Cerrar libro Excel (guardar cambios)

ActiveWorkbook.Close
ActiveWorkbook.Close Savechanges:=True
ActiveWorkbook.Close(True)

Cerrar libro Excel (sin guardar cambios)

ActiveWorkbook.Close(False)
ActiveWorkbook.Close Savechanges:=False

Cerrar libro Excel (variable, sin guardar cambios)

Application.DisplayAlerts = False Windows(Libro_mayor).Close Application.DisplayAlerts = True Abrir libro Excel (ruta fija) Workbooks.Open FileName:="C:\Trabajo\Informe.xls"

Desplazarnos a la última hoja del libro

Sub ultima_hoja()

Sheets(Sheets.Count).Select
End Sub

Desplazarnos a la primera hoja del libro

Sub primera_hoja()

Sheets(1).Select
End Sub

Copiar el contenido seleccionado en otra hoja

Sub CopiaColumnas()
Dim mirango As Range
Dim col As Range
Dim NuevaHoja As Worksheet
Dim i As Integer

Set mirango = Selection

Worksheets.Add
i = 0
For Each col In mirango.Columns
col.Copy ActiveSheet.Range("A1").Offset(, i)
i = i + 1
Next col

End Sub

Macro para crear índices de hojas en libros

Private Sub Worksheet_Activate()
Dim cHoja As Worksheet
Dim L As Long
L = 1
With Me
.Columns(1).ClearContents
.Cells(1, 1) = “INDICE”
.Cells(1, 1).Name = “Indice”
End With
For Each cHoja In Worksheets
If cHoja.Name <> Me.Name Then
L = L + 1
With cHoja
.Range(“A1″).Name = “Inicio” & cHoja.Index
.Hyperlinks.Add Anchor:=.Range(“A1″), Address:=” “, SubAddress:=”Indice”, TextToDisplay:=”Volver al índice”
End With
Me.Hyperlinks.Add Anchor:=Me.Cells(L, 1), Address:=” “, SubAddress:=”Inicio” & cHoja.Index, TextToDisplay:=cHoja.Name
End If
Next cHoja
End Sub

Macro para imprimir hoja activa con datos


Sub macro imprimir_ha()

Range("A1") = "Lo que sea"
'Imprimimos la hoja de excel con una sola copia
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub

Buscar la última fila vacía

Sub ultimafila()
'variable donde almacenamos el número de fila
Dim ultima As Long

'vamos subiendo por la columna A desde la última fila
ultima = Range("A65536").End(xlUp).Row

'le sumamos una porque queremos la 1ª fila vacía
ultima = ultima + 1

'seleccionamos si queremos otra columna cambiar el número
 Cells(ultima, 1).Select

End Sub

Encontrar última fila (en columna especificada)

Dim intUltimaFila As Range

If WorksheetFunction.CountA(Columns(1)) > 0 Then
Set intUltimaFila = Range(“65536″).End(xlUp)
MsgBox intUltimaFila.Address
End If

Suprimir filas vacías

intLastRow = Columns(“A:A”).Range(“A65536″).End(xlUp).Row
For r = intLastRow To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r

Suprimir filas vacías

Dim intNumDeFilas As Long

Selection.SpecialCells(xlCellTypeLastCell).Select
intNumDeFilas = Selection.Row
For i = 1 To intNumDeFilas
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next

Suprimir filas vacías

intUltimaFila = ActiveSheet.UsedRange.Row – 1 + ActiveSheet.UsedRange.Rows.Count
For r = intUltimaFila To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r

Suprimir filas por condición

Dim rngString As Range

Do
Set rngString = Cells.Find(“Aglis”, MatchCase:=False, _
LookAt:=xlPart, LookIn:=xlValues)
If Not rngString Is Nothing Then
rngString.EntireRow.Delete
End If
Loop Until rngString Is Nothing

Suprimir filas vacías por dos condiciónes X, Y

For i = intUltimaFila To 1 Step -1
Let strTest= Application.Cells(i, 2)
If strTest <> “X” And strTest <> “Y” Then Rows(i).Delete
Next i

Métodos abreviados de teclado en Excel

Límites de Excel

Número total de columnas disponibles en Excel.

  • Límite Excel 2003: 256 (2^8)
  • Límite Excel 2007: 16.384 (2^14)

Número total de filas disponibles en Excel.

  • Límite Excel 2003: 65.536 (2^16)
  • Límite Excel 2007: el 1.048.576 (2^20)

Las celdas por hoja es la multiplicación de las filas por las columnas.

Un libro puede tener un número variable de hojas, según nuestras necesidades. El límite estaba en 256 y está ahora en 1024.

Número total de hojas disponibles en Excel.

  • Límite Excel 2003: 256 (2^8)
  • Límite Excel 2007: 1.024 (2^10)

Cantidad total de memoria del PC que Excel puede utilizar.

  • Límite Excel 2003: 1GB.
  • Límite Excel 2007: 2 GB.

Número de colores únicos permitido en un solo libro de trabajo.

  • Límite Excel 2003: 56 (color puesto en un índice)
  • Límite Excel 2007: 4.294.967.296 (casi 4300 millones, color 32-bit)

Número de condiciones condicionales del formato en una celda.

  • Límite Excel 2003: 3 condiciones
  • Límite Excel 2007: Limitado por memoria disponible

Número de niveles para ordenar en una lista o una tabla.

  • Límite Excel 2003: 3
  • Límite Excel 2007: 64

Número de datos mostrados en el Autofiltro.

  • Límite Excel 2003: 1.000
  • Límite Excel 2007: 10.000

Número total de caracteres que puede exhibir una celda.

  • Límite Excel 2003: 1.024 (cuando se ajusta a formato el texto)
  • Límite Excel 2007: 32.768 o tanto como quepa en la celda (sin importar el formato)

Número de caracteres por celda que el Excel puede imprimir.

  • Límite Excel 2003: 1.024
  • Límite Excel 2007: 32.768

Número total de los estilos únicos de la celda en un libro de trabajo (combinaciones de todo el formato de la celda).

  • Límite Excel 2003: 4000
  • Límite Excel 2007: 65.536

Longitud máxima de fórmulas (en caracteres).

  • Límite Excel 2003: carácteres 1.024
  • Límite Excel 2007: carácteres 8.192

Número de niveles de anidación que Excel permite en fórmulas.

  • Límite Excel 2003: 7
  • Límite Excel 2007: 64

Número máximo de discusiones a una función.

  • Límite Excel 2003: 30
  • Límite Excel 2007: 255

Número máximo de artículos que encuentra el comando “buscar todos”.

  • Límite Excel 2003: ~64k (65472)
  • Límite Excel 2007: ~2 mil millones

Número de filas permitidos en una tabla dinámica.

  • Límite Excel 2003: 65.536
  • Límite Excel 2007: 1.048.576

Número de columnas permitidoen una tabla dinámica.

  • Límite Excel 2003: 255
  • Límite Excel 2007: 16.384

Número máximo de artículos únicos dentro de un solo campo de una tabla dinámica.

  • Límite Excel 2003: 32.768
  • Límite Excel 2007: 1.048.576

Longitud del nombre de MDX para un artículo de una tabla dinámica; también la longitud de la secuencia para una tabla dinámica emparentada.

  • Límite Excel 2003: 255 caracteres
  • Límite Excel 2007: 32.768

Longitud a la cual se truncan los campos que etiquetan una tabla dinámica; esto también incluye limitaciones de la longitud del subtítulo.

  • Límite Excel 2003: 255
  • Límite Excel 2007: 32.768

El número de campos (según lo visto en la lista del campo) que una sola tabla dinámica puede tener.

  • Límite Excel 2003: 255
  • Límite Excel 2007: 16.384

Número de celdas que pueden depender de un solo rango antes que Excel necesite hacer cálculos completos en vez de cálculos parciales (porque no puede seguir las dependencias requeridas para hacer cálculos parciales).

  • Límite Excel 2003: 8.192
  • Límite Excel 2007: Limitado por memoria disponible

El número de rangos diversos en una hoja que pueden tener dependencias antes de que Excel necesite hacer cálculos completos en vez de cálculos parciales (porque no puede seguir las dependencias requeridas para hacer cálculos parciales).

  • Límite Excel 2003: 65.536
  • Límite Excel 2007: Limitado por memoria disponible

Número de fórmulas en conjunto en una hoja de trabajo que pueden referir a otra hoja de trabajo.

  • Límite Excel 2003: 65.536
  • Límite Excel 2007: Limitado por memoria disponible

Número de categorías que las funciones personalizadas pueden encapsular.

  • Límite Excel 2003: 32
  • Límite Excel 2007: 255

Número de caracteres que se pueden actualizar en una referencia externa que no pertenece al libro de trabajo.

  • Límite Excel 2003: 255
  • Límite Excel 2007: 32.768

Número de filas de una o varias columnas que se pueden referir en una fórmula matricial (array formula).

  • Límite Excel 2003: 65.335
  • Límite Excel 2007: No hay límites.

Número de caracteres que se pueden almacenar y exhibir en una celda ajustada a formato de texto.

  • Límite Excel 2003: 255
  • Límite Excel 2007: 32.768

Macro que elimina las barras de desplazamiento

Sub elimina_barra()

    With ActiveWindow
        .DisplayHorizontalScrollBar = False
        .DisplayVerticalScrollBar = False
    End With
End Sub

Macro que protege el libro y la hoja

Sub proteger()

    ActiveWorkbook.Protect Password:="1234"
    Sheets("Hoja1").Protect Password:="1234"
End Sub

Calculo del NIF

Esta función calcula el NIF (Número de Identificación Fiscal).

Function nif(dni As Long) As String
    nif = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (dni Mod 23) + 1, 1)
End Function

2 Responses to Ejemplos de macros

  1. Enrique dice:

    Formidable

  2. Guillermo dice:

    excelente el Blog

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

%d personas les gusta esto: