VBA para ordenar hojas alfabéticamente
Cuando se trabaja con Excel, el orden de las hojas de trabajo es importante. Las pestañas deben reflejar el flujo que un usuario pueda entender. Dado que no existe una función nativa para hacerlo, usar VBA para acortar las hojas alfabéticamente puede resultar útil para ahorrar tiempo.
Pero las cosas nunca son tan sencillas, ¿verdad?
- La clasificación puede realizarse en orden estándar o inverso.
- En Excel, las hojas y las hojas de cálculo son diferentes. Las hojas de trabajo son solo aquellas que tienen celdas, mientras que las hojas pueden incluir hojas de trabajo y hojas de gráficos.
- Los nombres de las hojas de trabajo que contienen números no se ordenan como números sino como texto
En este post te daré el código necesario para afrontar todas estas situaciones.
Tabla de contenido
- VBA para ordenar las hojas de trabajo alfabéticamente
- Adaptando el código
- invertir el orden
- Cambiar el libro de trabajo
- Ordenar números como números
- Ordenar hojas en lugar de hojas de trabajo
VBA para ordenar las hojas de trabajo alfabéticamente
Ingrese el siguiente código en un módulo de código estándar:
Sub SortWorksheetsAlphabetially()'Apagar la actualización de pantallaApplication.ScreenUpdating = False'Crear variablesDim wb As WorkbookDim wsCount As IntegerDim i As IntegerDim j As Integer'Declarar el libro de trabajoSet wb = Workbooks(ActiveWorkbook.Name)'Cuenta el número de hojas de trabajowsCount = wb.Worksheets .Count'Recorre todas las hojas de trabajo y mueveFor i = 1 To wsCount - 1 For j = i + 1 To wsCount Si wb.Worksheets(j).Name wb.Worksheets(i).Name Entonces wb.Worksheets(j).Move antes:=wb.Worksheets(i) Finalizar si es siguiente jSiguiente i'Activar la actualización de pantallaApplication.ScreenUpdating = TrueEnd Sub
Adaptando el código
El ejemplo específico anterior colocará las hojas de trabajo del libro activo en orden alfabético. Pero podemos personalizar esto de muchas maneras:
- invertir el orden
- Aplicar a otros libros de trabajo
- Ordenar números como números
- Ordenar incluyendo hojas de gráficos
Echemos un vistazo a estas opciones por separado.
invertir el orden
Para invertir el orden, cambiamos el signo lógico de dirección.
Cambie esta línea de código:
Si wb.Worksheets(j).Nombrewb.Worksheets(i).Nombre Entonces
a esto:
Si wb.Worksheets(j).Nombrewb.Worksheets(i).Nombre Entonces
Cambiar el libro de trabajo
El código VBA también se puede cambiar para que funcione en cualquier libro abierto.
Libro de trabajo activo:
Este es el código utilizado actualmente en el ejemplo. Si desea cambiar el código, cambie esta línea a una de las siguientes.
Establecer wb = Libros de trabajo (ActiveWorkbook.Name)
Libro de trabajo con nombre:
Establecer wb = Libros de trabajo ("Nombre del libro de trabajo.xlsx")
Recuerde cambiarWorkbookName.xlsx por el nombre de su libro de trabajo.
Enésimo libro abierto
Establecer wb = Libros de trabajo (1)
El número se refiere a los libros en el orden en que se abrieron, donde 1 es el primer libro, 2 es el segundo libro, etc.
Ordenar números como números
Todos los nombres de las hojas de trabajo son cadenas de texto. Por lo tanto, si tuviéramos hojas llamadas “1”, “2” y “12”, su orden sería “1”, “12” y “2”. Pero podemos cambiar el código básico para ordenar números como números.
Todos los cambios del código original se han resaltado en negrita.
Sub SortWorksheetsAlphabetiallyAndNumerically()'Apagar la actualización de pantallaApplication.ScreenUpdating = False'Crear variablesDim wb As WorkbookDim wsCount As IntegerDim i As IntegerDim j As Integer Dim wsName1 As Variant Dim wsName2 As Variant 'Declarar el conjunto de libros wb = Workbooks(ActiveWorkbook.Name)'Count el número de hojas de trabajowsCount = wb.Worksheets.Count'Recorra todas las hojas de trabajo y muevaFor i = 1 To wsCount - 1 For j = i + 1 To wsCount 'Capturar nombres de hojas de trabajo wsName1 = wb.Worksheets(i).Name wsName2 = wb. Worksheets(j).Name 'Convertir números Si IsNumeric(wsName1) = True Entonces wsName1 = CLng(wsName1) Si IsNumeric(wsName2) = True Entonces wsName2 = CLng(wsName2) 'Ordenar hojas de trabajo Si wsName2 wsName1 Entonces wb.Worksheets(j) .Mover antes:=wb.Worksheets(i) Finalizar si es siguiente jSiguiente i'Activar actualización de pantallaApplication.ScreenUpdating = TrueEnd Sub
Ordenar hojas en lugar de hojas de trabajo
Como se indicó anteriormente, las hojas de gráficos se incluyen en la colección de hojas, pero no en la colección de hojas de trabajo. Por lo tanto, para incluir hojas de gráficos en el alcance del código, podemos utilizar el siguiente código como base.
Los cambios con respecto al código original se han resaltado en negrita.
Sub SortSheetsAlphabetially()'Apagar la pantalla updateApplication.ScreenUpdating = False'Crear variablesDim wb As WorkbookDim shtCount As IntegerDim i As IntegerDim j As Integer'Declarar el libro de trabajoSet wb = Workbooks(ActiveWorkbook.Name)'Cuenta el número de hojas de trabajo shtCount = wb. Sheets.Count 'Recorre todas las hojas de trabajo y mueveFor i = 1 To shtCount - 1 For j = i + 1 To shtCount If wb. Hojas (j).Nombre wb. Hojas (i).Nombre Luego wb. Hojas (j). Mover antes:=wb. Hojas (i) Finalizar si es siguiente jSiguiente i'Activar actualización de pantallaApplication.ScreenUpdating = TrueEnd Sub
También se pueden realizar en este código las mismas modificaciones para ordenar inversamente, ordenar números y ordenar otros libros.
Artículos Relacionados:
- Ocultar todas las hojas excepto una con Office Scripts
- Recorrer hojas seleccionadas con VBA
- Propiedades y métodos comunes de VBA para hojas de trabajo
- 30 macros VBA listas para usar
Deja una respuesta