Excel - URGENTE Ordenar Complicado

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Cristopher (5 intervenciones) el 17/07/2019 20:01:01
Buenas.
Tengo una consulta tengo una base en Excel y debo acomodarlo de la siguiente manera:
Las columnas son Nombre, Contrato y Monto
Debe quedar ordenado por el monto mas alto, el valor que sigue debe ser el valor que continua segun el mismo contrato del anterior.
Posteriormente en el 3° lugar debe de quedar el 2 valor mas alto, en la posicion 4 debe de ser el valor que continua segun el mismo contrato del anterior...
En la imagen del lado Izquierdo muestro un ejemplo de como me llega la base y como debe de quedar acomodada.
EJEMPLO
Agradezco la ayuda que me puedan dar
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Antoni Masana (2485 intervenciones) el 18/07/2019 10:42:08
Debes ordenar por NOMBRE y MONTO.

Pero tienes un problema con el nombre, si se toman los tres o cuatro primeros caracteres o la primera palabra funciona, pues hagámoslo, crea una columna adicional que puedes llamar NOMBRE CORTO que puede estar oculta que solo sirve para ordenar y le pones esta formula:

1
=IZQUIERDA(A2;LARGO(A2)-1)

Esto copia todo el nombre excepto el número y ya puedes ordenar por NOMBRE CORTO y MONTO.

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: 11
Ha aumentado su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Cristopher (5 intervenciones) el 18/07/2019 16:55:27
Claro de esa manera lo intente pero cuando agregue mas nombres, contratos y montos, no funciona, por ejemplo otro nombre seria abis 1(2 y 3) con contrato 32 y con montos ¢95.000, ¢72.000 y ¢66.800, ya alli me se vuelve a descuadrar, se que debe de existir algo pero no lo puedo encontrar, soy programador llevo 10 años en formulas y vba de excel y otros pero nunca me había topado con esta solicitud.
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 Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Andres Leonardo (1583 intervenciones) el 18/07/2019 17:13:52
Como quedaria con los nuevos nombres

creo que se me ocurre hacer una macro para darle este formato....

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: 11
Ha aumentado su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Cristopher (5 intervenciones) el 18/07/2019 17:26:40
Hola andres, esta sería ingresando esos datos comentados, lo que pasa es que la base algunas veces vienen mas nombres otras menos o vienen por ejemplo INS 1 solamente y otras hasta INS 4 o 5, La verdad llevo días tratando de hacer una forma pero cuando encuentro una cambia algo como lo de los nombres y debo empezar de cero, quiza con una macro pueda ser mejor pero mi mente esta cansada de ver datos y no encontrar respuesta, por eso pido ayuda para ver diferentes puntos de vista

ejemplo
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Antoni Masana (2485 intervenciones) el 18/07/2019 19:17:24
Con mi opción ABIS queda entra ASSA y GESS y veo que no es lo que necesitas.

Creo que la opción de Andres Leonardo de hacer una macro es la mejor idea.

Como entiendo que debe quedar los datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
CONTRATO   IMPORTE
   15         9000
   15          900
   15           90
   35         8000
   35          800
   35           80
   27         7000
   27          700
   27           70
   19         6000
   19          600
   19           60

Primero linea el contrato que tenga el importe más alto y el resto de lineas del mismo contrato por orden de importe.
El segundo contrato con mayor importe y el resto de lineas del mismo contrato por orden de importe.
Y así hasta el final.

Si el procedimiento para ordenar es este hay que hacer una macro, que ha de ordenar dos veces, la primera para saber cual es el importe más alto de cada contrato y crear una columna con un indice para ordenar y esto solo lo puede hacer una macro.

Y lo que cuento es correcto, si no corrígeme ya podemos hacer la macro.

Si puedes subir un libro de ejemplo y cuanta mayor variedad de datos tenga mejor.

Así sera más fácil probar la macro.

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: 11
Ha aumentado su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Cristopher (5 intervenciones) el 18/07/2019 21:20:15
Muchas gracias Antoni, he tratado con varias posibles soluciones pero es bastante complicado llegar al resultado de la imagen, por que lo que se basa es un acomodo de mayor a menor por monto y después (que es donde esta lo complicado) debe de ser el mismo contrato del mayor monto seguido por el contrato mas bajo pero del mismo nombre que el anterior, tal y como es tu ejemplo de las 13 lineas, si lo ves por separado, cada nombre esta ordenado por monto de mayor a menor pero no se como hacer algo para "agruparlos" para que me dé ese resultado
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Antoni Masana (2485 intervenciones) el 18/07/2019 22:49:47
Bien, esta es la macro.

Hace 5 cosas:

1.- Cuenta cuantas lineas hay con datos.
2.- Ordena por CONTRATO y MONTO (de Mayor a Menor)
3.- Si es la primera fila de un contrato pongo el MONTO en la columna D. Si el contrato es el mismo que el anterior copia en la columna D el contenido de la celda anterior de la misma columna.
4.- Y ahora ordena por la Columna D (de Mayor a Menor) y el MONTO (de Mayor a Menor)
5.- Borra la columna D

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Sub Macro1()
    Dim Num_Filas As Long, Fila As Long, Hoja As String
 
    Hoja = "Hoja1"
 
    ' ---&--- Cuento cuantas filas hay datos
    '         para ello busco la primera celda de la columna A vacia
 
    Num_Filas = 2
    While Cells(Num_Filas, "A") <> ""
        Num_Filas = Num_Filas + 1
    Wend
    Num_Filas = Num_Filas - 1
 
    ' ---&--- Ordena por CONTRATO y MONTO (de Mayor a Menor)
 
    Columns("A:C").Select
    ActiveWorkbook.Worksheets(Hoja).AutoFilter.Sort.SortFields.Clear
 
    ActiveWorkbook.Worksheets(Hoja).AutoFilter.Sort.SortFields.Add2 _
                                    Key:=Range("B2:B14"), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlAscending, _
                                    DataOption:=xlSortNormal
 
    ActiveWorkbook.Worksheets(Hoja).AutoFilter.Sort.SortFields.Add2 _
                                    Key:=Range("C2:C14"), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlDescending, _
                                    DataOption:=xlSortNormal
 
    With ActiveWorkbook.Worksheets(Hoja).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    ' ---&--- Si es la primera fila de un contrato pongo el MONTO en la columna D
    '         Si el contrato es el mismo que el anterior copio en la columna D anterior
 
    For Fila = 2 To Num_Filas
        If Cells(Fila, "B") <> Cells(Fila - 1, "B") Then
           Cells(Fila, "D") = Cells(Fila, "C")
        Else
           Cells(Fila, "D") = Cells(Fila - 1, "D")
        End If
    Next
 
    ' ---&--- Y ahora ordena por la Columna D (de Mayor a Menor) y el MONTO (de Mayor a Menor)
 
    Columns("A:D").Select
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Clear
 
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Add2 _
                                    Key:=Range("D2:D" & Num_Filas), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlDescending, _
                                    DataOption:=xlSortNormal
 
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Add2 _
                                    Key:=Range("C2:C" & Num_Filas), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlDescending, _
                                    DataOption:=xlSortNormal
 
    With ActiveWorkbook.Worksheets(Hoja).Sort
        .SetRange Range("A1:D" & Num_Filas)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    ' ---&--- Borra la columna D
 
    'Columns("D:D").Select
    'Selection.Delete Shift:=xlToLeft
 
    Range("A2").Select
 
    MsgBox "Fin de la MACRO"
End Sub

La Tabla antes de ejecutar la macro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| NOMBRE | CONTRATO |     MONTO  |
+--------+----------+------------+
| INS 1  |    20    | 1.553.000  |
| INS 2  |    20    |   200.000  |
| INS 3  |    20    |   100.000  |
| GES 1  |    47    |   500.000  |
| GES 2  |    47    |   650.000  |
| GES 3  |    47    |   800.000  |
| GASS 1 |    85    | 1.100.000  |
| GASS 2 |    85    |   650.000  |
| ASSA 1 |    15    | 1.300.000  |
| ASSA 2 |    15    |   850.000  |
| ABIS 1 |    32    |    72.000  |
| ABIS 2 |    32    |    95.000  |
| ABIS 3 |    32    |    66.800  |
+--------+----------+------------+

Este es el resultado antes de borrar la columna D

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| NOMBRE | CONTRATO |     MONTO |         |
+--------+----------+-----------+---------+
| INS 1  |    20    | 1.553.000 | 1553000 |
| INS 2  |    20    |   200.000 | 1553000 |
| INS 3  |    20    |   100.000 | 1553000 |
| ASSA 1 |    15    | 1.300.000 | 1300000 |
| ASSA 2 |    15    |   850.000 | 1300000 |
| GASS 1 |    85    | 1.100.000 | 1100000 |
| GASS 2 |    85    |   650.000 | 1100000 |
| GES 3  |    47    |   800.000 |  800000 |
| GES 2  |    47    |   650.000 |  800000 |
| GES 1  |    47    |   500.000 |  800000 |
| ABIS 2 |    32    |    95.000 |   95000 |
| ABIS 1 |    32    |    72.000 |   95000 |
| ABIS 3 |    32    |    66.800 |   95000 |
+--------+----------+-----------+---------+

Tu ejemplo me ha despistado un poco porque esta mal.


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: 11
Ha aumentado su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

URGENTE Ordenar Complicado

Publicado por Cristopher (5 intervenciones) el 19/07/2019 19:44:49
Muchas gracias Antoni, le hice unos pequeños cambios pero dejando siempre la esencia de la macro, me funciona a la perfección.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Sub Macro1()
    Dim Num_Filas As Long, Fila As Long, Hoja As String
 
    Hoja = "Hoja1"
 
    ' ---&--- Cuento cuantas filas hay datos
    '         para ello busco la primera celda de la columna A vacia
 
    Num_Filas = 2
    While Cells(Num_Filas, "A") <> ""
        Num_Filas = Num_Filas + 1
    Wend
    Num_Filas = Num_Filas - 1
 
    ' ---&--- Ordena por CONTRATO y MONTO (de Mayor a Menor)
 
    Columns("A:C").Select
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Clear
 
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Add _
                                    Key:=Range("B2:B" & Num_Filas), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlAscending, _
                                    DataOption:=xlSortNormal
 
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Add _
                                    Key:=Range("C2:C" & Num_Filas), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlDescending, _
                                    DataOption:=xlSortNormal
 
    With ActiveWorkbook.Worksheets(Hoja).Sort
        .SetRange Range("A1:C" & Num_Filas)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    ' ---&--- Si es la primera fila de un contrato pongo el MONTO en la columna D
    '         Si el contrato es el mismo que el anterior copio en la columna D anterior
 
    For Fila = 2 To Num_Filas
        If Cells(Fila, "B") <> Cells(Fila - 1, "B") Then
           Cells(Fila, "D") = Cells(Fila, "C")
        Else
           Cells(Fila, "D") = Cells(Fila - 1, "D")
        End If
    Next
 
    ' ---&--- Y ahora ordena por la Columna D (de Mayor a Menor) y el MONTO (de Mayor a Menor)
 
    Columns("A:D").Select
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Clear
 
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Add _
                                    Key:=Range("D2:D" & Num_Filas), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlDescending, _
                                    DataOption:=xlSortNormal
 
    ActiveWorkbook.Worksheets(Hoja).Sort.SortFields.Add _
                                    Key:=Range("C2:C" & Num_Filas), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlDescending, _
                                    DataOption:=xlSortNormal
 
    With ActiveWorkbook.Worksheets(Hoja).Sort
        .SetRange Range("A1:D" & Num_Filas)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    ' ---&--- Borra la columna D
 
    Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
 
    Range("A2").Select
 
    MsgBox "Fin de la MACRO"
End Sub
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