Ordenar hojas por mes

6 envíos / 0 nuevos
Último envío
Jesús Martínez ...
Imagen de Jesús Martínez Plantarosa
Offline
última acción: Hace 6 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 4938
Ordenar hojas por mes

Ayuda por favor:

Estoy trabajando con los meses del año Ene13, Feb13, Mar13 , etc y tengo tres hojas con los nombres de - Cliente , Txt y Mes, las cuales son mi base para hacer mis informes mensuales, cada que comienza un nuevo mes tengo que crear un nuevo mes, mi consulta es como ordenar por mes mis hojas de calculo execptuando mis tres hojas bases ?? desde ya muchas gracias por su tiempo

Saludos

Jesús

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 día 1 hora
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 9155
Re: Ordenar hojas por mes

Todo sería más sencillo si los nombres de los meses ordenados alfabéticamente se correspondiesen con el orden cronológico, pero no es así

 

por supuesto, esto habrá que hacerlo mediante una macro.

En tu caso, que tienes Ene13, Feb13, Mar13 (hasta aquí vamos bien), Abr13 (ya lo estropeamos...)

Tendrías que obtener el mes a partir de las tres primeras letras del nombre de la hoja. Bueno, con la función Left de VBA lo tenemos hecho.

pero necesitamos convertir esas tres letras en algo que podamos ordenar

Imagina una función como esta:

 

Function numero_de_mes(iniciales_del_mes As String) As Integer

    Select Case iniciales_del_mes

        Case "Ene"

            numero_de_mes = 1

        Case "Feb"

            numero_de_mes = 2

        Case "Mar"

            numero_de_mes = 3

        Case "Abr"

            numero_de_mes = 4

        Case "May"

            numero_de_mes = 5

        Case "Jun"

            numero_de_mes = 6

        Case "Jul"

            numero_de_mes = 7

        Case "Ago"

            numero_de_mes = 8

        Case "Sep"

            numero_de_mes = 9

        Case "Oct"

            numero_de_mes = 10

        Case "Nov"

            numero_de_mes = 11

        Case "Dic"

            numero_de_mes = 12

        Case Else

            'si no sabemos, lo ponemos al final

            numero_de_mes = 13

    End Select

End Function

 

Esta función devuelve el número de mes.

Ahora podríamos adaptar la función de este otr tema del foro:  http://www.necesitomas.com/ordenar-hojas-libro-excepto-menu#comment-8159

para que ordene las hojas, comprobando que su nombre no sea ni cliente, ni Txt ni Mes, y empleando esta función numero_de_mes que hemos definido antes, para obtener el número que corresponde al mes indicado por las tres primeras letras del nombre.

 

Sub OrdenarHojasPorMes()

Dim i As Integer, j As Integer, x As Integer

x = Sheets.Count

On Error GoTo ErrorTrap:

For i = 1 To x - 1

    For j = i + 1 To x

        If Sheets(j).Name <> "Cliente" _

          And Sheets(j).Name <> "Txt" _

          And Sheets(j).Name <> "Mes" Then

            If numero_de_mes(Left(Sheets(j).Name, 3)) < numero_de_mes(Left(Sheets(i).Name, 3)) Then

                Sheets(j).Move before:=Sheets(i)

            End If

        End If

    Next

Next

Sheets(1).Select

ErrorTrap:

End Sub

 

 

Data Tools Suite
datos y tablas con Excel

Jesús Martínez ...
Imagen de Jesús Martínez Plantarosa
Offline
última acción: Hace 6 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 4938
Re: Ordenar hojas por mes

Estimado PacoMegia , buena idea, solo que , todo tengo que poner un un solo modulo?

Gracias

Jesús

Jesus Martinez Plantarosa

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 día 1 hora
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 9155
Re: Ordenar hojas por mes

Sí, ponlo todo en un mismo módulo

 

en realidad no es obligatorio que esté en el mismo módulo, pero así será más sencillo de mantener en el futuro.

 

Data Tools Suite
datos y tablas con Excel

Jesús Martínez ...
Imagen de Jesús Martínez Plantarosa
Offline
última acción: Hace 6 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 4938
Re: Ordenar hojas por mes

Gracias milll

 

saludos

 

Jesús

Jesus Martinez Plantarosa

JDV (no verificado)
Imagen de JDV
Ordenar Hojas (pestañas) por mes

Buen día.

Primero que todo mil gracias por los aportes.

Soy nuevo en esto de macros, quiero hacer un pequeño aporte con respecto al código asignado, solo son un par de detalles.

  • Hacer que siempre se vean las hojas ocultas (esto entorpece el conteo a veces)
  • Nombrar las iniciales de las hojas en mayusculas y agregar la funcion "Ucase()" a la linea donde se extrae el nombre de las hojas, esto para evitar problemas de mayusculas y minusculas.

Copio el codigo dado con los ajustes personales.

Function NUM_MES(INI_MES As String) As Integer

    Select Case INI_MES

        Case "ENE"

            NUM_MES = 1

        Case "FEB"

            NUM_MES = 2

        Case "MAR"

            NUM_MES = 3

        Case "ABR"

            NUM_MES = 4

        Case "MaAY"

            NUM_MES = 5

        Case "JUN"

            NUM_MES = 6

        Case "JUL"

            NUM_MES = 7

        Case "AGO"

            NUM_MES = 8

        Case "SEP"

            NUM_MES = 9

        Case "OCT"

            NUM_MES = 10

        Case "NOV"

            NUM_MES = 11

        Case "DIC"

            NUM_MES = 12

        Case Else

            'Sí no sabemos, lo ponemos al final

            NUM_MES = 13

    End Select

End Function

Sub HOJAS_ENE_DIC()

Dim A As Integer, B As Integer, X As Integer

X = Sheets.Count

On Error GoTo ERROR_CONTEO:

For A = 1 To X

Sheets(A).Visible = True

    For B = A + 1 To X

    Sheets(B).Visible = True

            If NUM_MES(Left(UCase(Sheets(A).Name), 3)) > NUM_MES(Left(UCase(Sheets(B).Name), 3)) Then

                Sheets(B).Move before:=Sheets(A)

            End If

    Next B

Next A

Sheets(1).Select

ERROR_CONTEO:


End Sub


Feliz día.