Visual Basic - ORDEN PERSONALIZADO DE FILAS SEPARADAS

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 03/05/2020 17:08:01
Buenas a todos
Alguien me puede ayudar por favor con este trabajo, seria para ordenar de mayor a menor en filas separadas, una relación de códigos de mas de 1000 filas que hay tambien entre medias datos que no se pueden borrar y hacen mas difícil el poder ordenar toda la columna A

Gracias a todos un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 03/05/2020 23:24:17
Entiendo lo que quieres hacer.

Lo que no entiendo es la estructura de datos, de hecho como no hay datos no entiendo nada.
Por los conocimiento de Excel que tengo puedo decir sin miedo a equivocarme que tu estructura de datos es pésima.
Excel tiene unas herramientas de totales muy buenas, incluso las Tablas Dinámicas son una gran alternativa.

Y ahora la MACRO:

Empiezo a contar líneas desde la fila 3 de la columna "A" códigos y ceros y se que llego a la línea de TOTAL porque encuentro ...
¿Como se que el contenido de la celda es un total y no un código?
¿Los dos son número enteros?
¿Porque la celda es de color?
¿Cuando acaba la lista?
¿Con una celda vacía?
¿La ultima celda es un total?
Si como en el ejemplo solo hay ceros colo las filas 46 a 49 ¿Hay total?
¿Solo se ordena por la columna "A"?

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 03/05/2020 23:27:36
Gracias por responder, Antoni
adjunto otro archivo donde se puede ver mejor de donde vienen los datos ya que tengo una hoja base donde tengo que tenerlo ordenado por la columna B que es por nombre, pero en el ejemplo he borrado los nombres, y luego tengo otra hoja que lo tengo que ordenar por codigo que esta en la columna A, el ejemplo no lo he puesto con todos las personas que hay en el archivo pueden ser 1000 filas y tampoco he puesto todos los meses del año por lo que pueden ser muchas mas columnas, entonces cuando en la hoja que hay que ordenarlo por la columna A, tambien el resto de columnas tiene que tener la informacion de cada fila.

Gracias por todos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 03/05/2020 23:52:35
No me has contestado a ninguna de las preguntas y la estructura de datos cambia del primer ejemplo al segundo.

Entiendo que:

1 - Empieza en la fila 5 y no en la fila 3
2 - La primera fila sera siempre un código.
3 - Debo suponer que los códigos son de 7 dígitos.
4 - Cuando encuentre una celda que su valor sea igual al número de códigos se para, es la del TOTAL.
5 - Ordena desde la primera hasta la anterior al total tomado todas las filas.
6 - Salto las celdas con valor CERO, que serán las 4 siguientes al total.
7 - Si la 5ª fila después del total no esta vacía saltar al punto 2.

¿Es esto?

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 04/05/2020 09:51:36
Buenas Antoni
Gracias por todo y haber si te contesto a todo.
1-El comienzo de la hoja que esta todo vinculado realmente comienza en la fila 5, la fila 3y 4 la copio y pego de donde estan los datos originales
2- La primera fila que es la 5 siempre es un código
3-Los códigos pueden ser de 5 a 7 dígitos.
4-cuando terminan los codigos es señal que cambia a otra area y siempre hay un total con 5 filas combinadas , que por eso cuando se vincula a la otra hoja se queda una fila con el total y 4 filas que pone cero.
5-Y se trata de ordenar desde donde empieza el primer codigo hasta el ultimo codigo antes del total, luego otra vez donde vuelve a ver codigo hasta el siguiente total, asi hasta unas 1000 filas, hay un monton de totales.
6-Y las celdas con valores cero no molestan, se puede poner una macros que oculte la columna A que sea valores cero.
7- siempre después del total hay 4 filas con ceros, y la siguiente fila vuelve a ser un código siempre.

Gracias Antoni, un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 04/05/2020 14:52:55
Te adjunto un fichero con 2 archivos.
Uno es la hoja de Excel con la macro para hacer las pruebas y el otro es el modulo para importarlo a tu libro.
El libro con la macro debes guardarlo como .xlsm o .xlsb.
Si es muy grande y tarda mucho en abrirlo mejor que lo guardes como la segunda opción, es mas pequeño y tarda menos en cargarlo.

El programa toma los siguientes criterios:

El valor de la celda de la columna A es CERO: ignora la fila
El valor de la celda de la columna A es es < 999: Es un total y ordena tomando desde la columna A hasta la XFD
El valor de la celda de la columna A es es > 999 : Es un código.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 04/05/2020 15:51:49
Buenas Antoni
He añadido el modulo , lo ejecuto pero me da un error de depuración, estoy haciendo algo mal.
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 04/05/2020 17:56:21
Si me dices que error fa y donde puedo mirar que es lo que pasa.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 04/05/2020 18:07:57
Buenas Antoni
La depuración sale en la siguiente linea
Rows(Ini & ":" & Fin).Select
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 04/05/2020 18:16:57
Pon antes de esta linea lo siguiente:

1
MsgBox Linea & VbCrLf & Ini & VbCrLf & Fin  :  Rows(Ini & ":" & Fin).Select
o
1
2
MsgBox Linea & VbCrLf & Ini & VbCrLf & Fin
Rows(Ini & ":" & Fin).Select

Esto debe mostrar 3 número justo antes de ordenar un grupo de códigos, todos deben ser mayores de cero.
* El primero indica la línea del total.
* El segundo el primera línea de código del grupo al que corresponde el total.
* El tercero la última línea de código del grupo al que corresponde el total. Y su valor debería ser uno menos que el primero.

Puedes mirar si corresponde con lo que tiene la hoja. Ya me contaras.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 04/05/2020 19:18:19
Antoni
He probado las dos lineas de copiarlas y en las dos da fallo, sale variable no definida y se que marcando el texto que pone linea.
1
MsgBox Linea & VbCrLf & Ini & VbCrLf & Fin
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 05/05/2020 15:27:15
Te reenvio el paquete corregido.

El fichero .BAS tenia una versión errónea.

Disculpa.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 05/05/2020 16:48:53
Buenas Antoni

Sale un error de depuración, me sabe mal si te estoy mareando

1
2
3
4
5
ActiveWorkbook.Worksheets(HOJA).Sort.SortFields.Add2 _
                               Key:=Range("A" & Ini), _
                               SortOn:=xlSortOnValues, _
                               Order:=xlAscending, _
                               DataOption:=xlSortNormal

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 05/05/2020 17:27:02
Cuando empece a realizar la macro me acorde de este error y al enviar el correo se me olvido.

Tienes que quitar el .add2 y cambiarlo por .add

1
2
3
4
5
ActiveWorkbook.Worksheets(HOJA).Sort.SortFields.Add _
                               Key:=Range("A" & Ini), _
                               SortOn:=xlSortOnValues, _
                               Order:=xlAscending, _
                               DataOption:=xlSortNormal

Es una problema con las diferentes versiones de Excel.

No me mareas, es a mi que me sabe mal haberme equivocado y marearte a ti.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 05/05/2020 18:01:23
Antoni

Muchas gracias, funciona de maravilla. eres una pasada

un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 05/05/2020 19:13:23
Una vez arreglada la macro te voy a explicar la forma de hacerlo sin macro.

Paso a paso

1 - Inserta una columna a la izquierda del código, esta sera la A y el código estará en la B.
2 - En la celda A5 pones un 10.
3 - En la celda A6 pones esta formula: =A5+SI(Y(B6>9999;B5>9999);0;SI(B6<9999;1;5))
4 - Una vez introduzca la formula le das doble click al recuadro de la celda A6 en la parte inferior derecha para que la replique hacia abajo.
5 - Oculta la columna "A".
6 - Selecciona toda la tabla.
7 Ordena por la columna A + la columna B.

Es bueno conocer otros trucos.

Saludos.
\\//
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 05/05/2020 19:34:38
Antoni

Lo he probado y va de lujo sin macros, cuanta sabiduría tienes, y con que facilidad se soluciona el ordenar mas de 1000 filas.


Gracias Antoni
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.229
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por Antoni Masana (444 intervenciones) el 07/05/2020 01:51:50
Buenas Jaíme,

He tenido una idea muy tonta, es que no puedo dormir y mi cabeza se entretiene pensando que maldita la falta que me hace a la una y media.

Veo que tienes dos hojas, una de datos y la otra que es básicamente una copia de la otra para cambiar el orden con un montón de formulas.
La idea es crear la columna A con la formula en la hoja de datos.
Y que consigues con eso, pues no necesitar la segunda hoja.

Para entender la idea veamos como quedan los datos

Columna A - Formula
Columna B - Código
Columna C - Nombre

Puedes ordenar por las columnas:

1
2
3
4
1 - A y C - El orden actual Nombre por Grupos
2 - A y B - El orden de la segunda hoja. Códigos por Grupos.
3 - Solo B - Orden por Código sin importar el Grupo.
4 - Solo C - Orden por Nombre sin importar el Grupo.

Incluso puedes crear las macros para cada uno de los casos y así todo resulta mucho más fácil.

La formula puede estar antes del código, columna "A", entre el código y el nombre, columna "B" o después del nombre, Columna "C", el lugar es indiferente porque se oculta, solo sirve para ordenar, lo que si es importante es saber cual es cual.

Y recuerda hacer copia de seguridad antes de hacer experimentos.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 63
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ORDEN PERSONALIZADO DE FILAS SEPARADAS

Publicado por JAIME (24 intervenciones) el 07/05/2020 10:54:30
Buenas Antoni
Tienes razón no hace falta tener una segunda hoja, lo he probado y de lujo.
Muchas Gracias por toda la ayuda que me esta dando.

un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar