Ordenar por Valor de Columnas

30/03/2009 - 21:33 por Adrian V. | Informe spam
Buenas tardes a todos, pudieran ayudarme a resolver un pequeño problema, es
el siguiente:

Tengo una matriz de datos (Excel 2002) donde se visuliza a personas con
distintos pedidos y cantidades

Nombre Pedido1 Cantidad1 Pedido2 Cantidad2 PedidoN CantidadN
Persona1 Pieza A 6 Pieza G 5 Pieza I 4
Persona2 Pieza B 5 Pieza D 5 Pieza I 4
Persona3 Pieza O 21 Pieza B 17 Pieza E 6
Persona4 Pieza G 3 Pieza B 1
Persona5 Pieza L 4 Pieza A 3 Pieza D 2
Persona6 Pieza D 21 Pieza A 16 Pieza C 15
Persona7 Pieza A 4 Pieza M 1
Persona8 Pieza A 2 Pieza B 2 Pieza F 1

Obtengo un indice de todos los productos existentes(yo definiría el órden de
acuerdo a factores variables) en este paso no tengo problema:
1 Pieza A
2 Pieza B
3 Pieza C
4 Pieza D
5 Pieza E
6 Pieza F
7 Pieza G
8 Pieza H
9 Pieza I
10 Pieza J
11 Pieza K
12 Pieza L
13 Pieza M
14 Pieza N
15 Pieza O
16 Pieza O

Con base al índice anterior, necesito ordenar los productos por columna, es
decir:

Nombre Pedido1 Cantidad1 Pedido2 Cantidad2 Pedido3 Cantidad3
Persona1 Pieza A 6 Pieza C 2
Persona2 Pieza A 3 Pieza B 5 Pieza C 3
Persona3 Pieza B 17
Persona4 Pieza B 1
Persona5 Pieza A 3
Persona6 Pieza A 16 Pieza C 15
Persona7 Pieza A 4
Persona8 Pieza A 2 Pieza B 2

Es posible ordenar la información a través de alguna macro, ya que son
muchas filas y columnas?

De antemano agradezco la atención a esta pregunta. Saludos

Preguntas similare

Leer las respuestas

#6 Adrian V.
02/04/2009 - 20:00 | Informe spam
OK, creo que perdí el enfoque principal de “Grupos de discusión”, como este,
además otros usuarios no podrían ver las posibles respuestas a situaciones
semejantes.

Intentaré describir los procedimientos que he realizado para lograr el
objetivo, que es, a final de cuentas, poder realizar filtros por cada una de
las piezas solicitadas por los clientes de acuerdo al índice.

Las respuestas, las agregó en las preguntas

Héctor, agradezco la paciencia y espero haberme hecho entender, como verás
la opción que he encontrado, es DEMASIADO repetitiva, de ahí mi intención de
que fuera en una macro, o en su caso una fórmula que no tenga que cambiar
tantas veces.

En espera de tus comentarios, GRACIAS.


"Héctor Miguel" escribió:

hola, Adrian !

> ... seria posible que te enviara un correo con un ejemplo mas concreto de lo que requiro?

(creeme...) si "me" envias un correo, tu mismo recortaras el alcance de tus probabilidades de recibir propuestas
(los que no lo reciban no estarian participando, no crees ?)

por que no mejor "ejercitamos la palabra" (escrita) y comentas acerca de las (re)preguntas del mensaje anterior ?

si te sirve, es posible obtener "la cuenta" de cada elemento en la lista que extraes de los articulos (o piezas)
(en la segunda tabla de tu mensaje original), a menos que (realmente) requieras "ordenar" tu listado original (la primera tabla) -???-

(haz caso de la ultima parte de mi mensaje anterior) :))

saludos,
hector.

__ OP __
>> comenta algunos detalles adicionales que permitan la (re)construccion de un modelo de trabajo "igual al tuyo"
>> o sea, incluye datos como los siguientes (de preferencia, +/- exactamente):


>> - lugar (hoja y rango) de tu listado original (titulos y tipo de datos por columna)>>>


En el archivo que tengo en la primera pestaña (llamada Sheet1) los datos
llegan hasta las columnas AD y AE y cuenta con 103 filas (personas), cada
cliente puede tener n cantidad de pedidos, es decir la persona 50 puede tener
5 pedidos (hasta las columnas J y K), mientras que la persona 2 puede llegar
a tener 14 pedidos (hasta las columnas AB y AC) los datos se presentan de la
siguiente forma:

En la Fila “1” se encuentran los encabezados de la tabla, estos son:
A1: Nombre de Cliente (texto = Persona 1, son únicos y no se repiten)
B1: Pedido #1 (texto = Pieza A)
C1: Cantidad (numérico = 6)
D1: Pedido #2 (texto = Pieza B)
E1: Cantidad (numérico = 8)
F1: Pedido #3 (texto = Pieza H)
G1: Cantidad (numérico = 4)
H1: Pedido #4 (texto = Pieza Z)
I1: Cantidad (numérico = 16)
Con este acomodo hasta llegar a las columnas AD y AE.

>> - hasta cual columna (maximo ?) se podrian encontrar registros (a menos que uses xl-2007 solo registraras 127 operaciones)>>>>


En otros archivos la cantidad de pedidos (con la cantidad respectiva) podría
aumentar o disminuir ± 5 pedidos.


>> - lugar (hoja y rango) donde tienes el indice para cada tipo de producto>>>


El índice lo genero realizando un filtro de las celdas “No vacías” en cada
una de las columnas de Pedido, copiando y pegando la información en la Hoja
2, de tal forma que al tener una sola columna con todas las piezas, genero
una tabla dinámica, obteniendo los nombres únicos de las piezas. Con los
nombres únicos, puedo ordenar la lista alfabéticamente o con algún otro
factor para ordenar. La cantidad de Piezas resultante de este procedimiento
es de 64 (en este punto no tengo problema)

>> es probable que resulte mas apropiado "reproducir" en lugar separado (otra hoja) tu matriz original de datos (pero ordenada)>>>


Esta opción es la más adecuada, de hecho presento un ejemplo con esta opción.

>> y tambien es solo probable que se puedan utilizar formulas y funciones de hoja de calculo, o sea necesario usar macros -?-
>> (dependera de la "fidelidad" con que se puede reproducir tu modelo de trabajo y del numero de "registros") -?- >>>


He realizado la siguiente prueba:

1. Copio la pestaña “Sheet1” con todos sus datos (quedando como Sheet3)
2. Generó el índice en la pestaña “Sheet2”
3. Borro los datos de los pedidos y cantidades en Sheet3 (de la columna B
hasta la AE)
4. En la celda B2, escribo la siguiente formula:
=IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,2,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,2,0),"")
donde “Sheet2!$A$2” es el primer nombre de Pieza de mi índice.
5. En la celda C2, también escribo la siguiente formula:
=IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,2,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,3,0),"") para que me regrese la cantidad asignada
6. Una vez que la fórmula me identifica aquellas personas con pedidos de la
primera Pieza, en el primer pedido de Sheet1 (columnas B y C), procedo a
cambiar la formula a para el número de pedido y la cantidad (Columnas B y C)
respectivamente:
IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,4,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,4,0),"")
;
IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,4,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,5,0),"")
para buscar la primera pieza de mi índice en el pedido #2 de Sheet1

Este procedimiento me resulta para identificar la primera pieza, pero tengo
que cambiar la formula tantos pedidos tenga en mi pestaña principal (15
cambios para la primera Pieza).

Además tengo que repetir la fórmula por cada uno de los Piezas existentes en
el ìndice (64 cambios)
lo que me da un total de 960 cambios para que la base quede órdeneada.




Respuesta Responder a este mensaje
#7 Héctor Miguel
03/04/2009 - 06:25 | Informe spam
hola, Adrian !

si entiendo bien, el objetivo es...
- obtener el numero de piezas de cada articulo "por persona/cliente/..."
SIN importar si en la realidad correspondian al pedido #1 o al pedido #n -???-
- la lista original (Sheet1) contiene dos columnas por cada pedido (pieza y cantidad) a partir de la columna B (ByC, DyE, FyG, etc.)
con titulos en la fila 1 por lo que los datos inician en la fila 2 (y se extienden hasta la fila "n")

te propongo usar (solamente) una segunda hoja (Sheet2 ?) con el siguiente arreglo:
- los nombres de los clientes en la fila 1 a partir de la columna B (B1, C1, D1, ...)
- el listado (o indice) de tus articulos en la columna A y a partir de la fila 2
- a manera de "tabla resumen" (casi como tabla dinamica) podras obtener la cuenta/suma de piezas-persona
con el siguiente procedimiento (entiendo que tu excel esta en ingles ?)

1) define/crea/... dos nombres +/- de la siguiente forma (menu: insert / name / define..."
nombre formula
Registros =row(indirect("1:8"))
Pedidos =2*transpose(row(indirect("1:3")))

OJO: el numero 8 del primer nombre corresponde al numero de filas con registros (8 ?, 35 ?, 103 ?, ???)
el numero 3 del segundo nombre corresponde al numero de "grupos" (dos columnas para pieza-cantidad)
p.e. para el caso de 14 pedidos este numero sera 14 (aunque el rango sea de 28 columnas SIN incluir la columna A)

2) usa la siguiente formula iniciando en la primer celda del "cuadrante" (la casi-tabla dinamica) [B2]
toma nota que debera ser en una sola linea

=sumproduct(--(t(offset(sheet1!$a$1,registros,))=$a2)*pedidos^0,--(t(offset(sheet1!$a$1,registros,pedidos-1))=b$1),n(offset(sheet1!$a$1,registros,pedidos)))

haz algunas pruebas y, si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
... el objetivo... es... realizar filtros por cada una de las piezas solicitadas por los clientes de acuerdo al indice.
... en... Sheet1... datos... hasta las columnas AD y AE y cuenta con 103 filas (personas)
En la Fila 1... los encabezados de la tabla, estos son:
A1: Nombre de Cliente (texto ...
B1: Pedido #1 (texto ...
C1: Cantidad (numerico ...
D1: Pedido #2 (texto ...
E1: Cantidad (numerico ...
(...)
Con este acomodo hasta llegar a las columnas AD y AE.
El indice lo... filtro de las celdas No vacias en... las columnas de Pedido, copiando y pegando... en la Hoja 2
... genero una tabla dinamica... Con los nombres unicos, puedo ordenar la lista ...
1. Copio la pestana Sheet1 con todos sus datos (quedando como Sheet3)
2. Genere el indice en la pestana Sheet2
3. Borro los datos de los pedidos y cantidades en Sheet3 (de la columna B hasta la AE)
4. En la celda B2, escribo la siguiente formula:
=IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,2,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,2,0),"")
donde Sheet2!$A$2 es el primer nombre de Pieza de mi indice.
5. En la celda C2, tambien escribo la siguiente formula:
=IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,2,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,3,0),"")
para que me regrese la cantidad asignada
6. Una vez que la fórmula me identifica aquellas personas con pedidos de la primera Pieza
en el primer pedido de Sheet1 (columnas B y C), procedo a cambiar la formula a para el numero de pedido y la cantidad (Columnas B y C)
IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,4,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,4,0),"")
;
IF(VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,4,0)=Sheet2!$A$2,VLOOKUP(Sheet3!A2,Sheet1!$A$2:$AE$104,5,0),"")
para buscar la primera pieza de mi à­ndice en el pedido #2 de Sheet1

Este procedimiento me resulta para identificar la primera pieza
pero tengo que cambiar la formula tantos pedidos tenga en mi pestana principal (15 cambios para la primera Pieza).
Ademas tengo que repetir la formula por cada uno de los Piezas existentes en el indice (64 cambios)
lo que me da un total de 960 cambios para que la base quede ordeneada.
Respuesta Responder a este mensaje
#8 Adrian V.
03/04/2009 - 20:30 | Informe spam
Gracias Héctor nuevamente, al aplicar los arreglos que indicas y al copiar y
pegar la formula en todas las celdas (B2:CZ66) el resultado es “0” (cero),
podrías indicar que estoy haciendo mal?

Así mismo te comento algunas dudas y confirmo comentarios (entre lineas)…


"Héctor Miguel" escribió:

hola, Adrian !

si entiendo bien, el objetivo es...
- obtener el numero de piezas de cada articulo "por persona/cliente/..."
SIN importar si en la realidad correspondian al pedido #1 o al pedido #n -???- <Es correcto>
- la lista original (Sheet1) contiene dos columnas por cada pedido (pieza y cantidad) a partir de la columna B (ByC, DyE, FyG, etc.)
con titulos en la fila 1 por lo que los datos inician en la fila 2 (y se extienden hasta la fila "n")<Es correcto>

te propongo usar (solamente) una segunda hoja (Sheet2 ?) con el siguiente arreglo:
- los nombres de los clientes en la fila 1 a partir de la columna B (B1, C1, D1, ...)<lo realice tal cual>
- el listado (o indice) de tus articulos en la columna A y a partir de la fila 2
- a manera de "tabla resumen" (casi como tabla dinamica) podras obtener la cuenta/suma de piezas-persona
con el siguiente procedimiento (entiendo que tu excel esta en ingles ?) <Es correcto y disculpa la omisión de este detalle>

1) define/crea/... dos nombres +/- de la siguiente forma (menu: insert / name / define..."
nombre formula
Registros =row(indirect("1:8"))
Pedidos =2*transpose(row(indirect("1:3")))

OJO: el numero 8 del primer nombre corresponde al numero de filas con registros (8 ?, 35 ?, 103 ?, ???) <éste número debe cambiar a 1 para cada persona?; o puedo dejarlo fijo a 103 personas?>
el numero 3 del segundo nombre corresponde al numero de "grupos" (dos columnas para pieza-cantidad)
p.e. para el caso de 14 pedidos este numero sera 14 (aunque el rango sea de 28 columnas SIN incluir la columna A) < Este número debe cambiar para persona? es decir, debo contar primero el numero de pedidos por persona? o puedo dejarlo fijo a 15 pedidos>

2) usa la siguiente formula iniciando en la primer celda del "cuadrante" (la casi-tabla dinamica) [B2]
toma nota que debera ser en una sola linea

=sumproduct(--(t(offset(sheet1!$a$1,registros,))=$a2)*pedidos^0,--(t(offset(sheet1!$a$1,registros,pedidos-1))=b$1),n(offset(sheet1!$a$1,registros,pedidos)))

haz algunas pruebas y, si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#9 Héctor Miguel
03/04/2009 - 22:54 | Informe spam
hola, Adrian !

... al aplicar los arreglos que indicas y al copiar y pegar la formula en todas las celdas (B2:CZ66)
el resultado es "0" (cero), podrias indicar que estoy haciendo mal?



1) de acuerdo con el rango que mencionas (B2:CZ66) estamos hablando de que en la hoja-resumen (Sheet2 ?)
tienes 65 filas-articulos [A2:A66]
y 103 columnas-clientes [B1:CZ1]

2) esto a su vez se "traduce" a que en tu hoja principal (Sheet1 ?)
tienes 103 filas-registros-clientes [A2:A104]
y "n" pares de columnas a partir de la columna B (ByC, DyE, FyG, ...)

3) el nombre que definimos (Registros ?) esta relacionado/ligado/... con las 103 (o "x") filas-registros-clintes en Sheet1
para el caso este, la formula seria: =row(indirect("1:103"))

4) el otro nombre (Pedidos ?) corresponde a "n" PARES de columnas tambien en Sheet1

si cualquier duda... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#10 Adrian V.
06/04/2009 - 20:51 | Informe spam
Muchas Gracias Héctor, antes que nada disculpa la tardanza en contestar,
estuve realizando varias pruebas (modificando) con la fórmula que me
enviaste, ya que el resultado en todo momento era "0", hasta el día de hoy
detecte que estaba invertido un parametro:

La formula que me enviaste:
=sumproduct(--(t(offset(sheet1!$a$1,registros,))=$a2)*pedidos^0,--(t(offset(sheet1!$a$1,registros,pedidos-1))=b$1),n(offset(sheet1!$a$1,registros,pedidos)))

Con la herramienta de "evaluate Formula" logre detectar que en la primera
parte de la formula (=sumproduct(--(t(offset(sheet1!$a$1,registros,))=$a2))
busca valores distintos


Haciendo la corrección pertinente la formula queda:
=SUMPRODUCT(--(T(OFFSET(Sheet1!$A$1,Registros,))=B$1)*Pedidos^0,--(T(OFFSET(Sheet1!$A$1,Registros,Pedidos-1))=$A2),N(OFFSET(Sheet1!$A$1,Registros,Pedidos)))

No entiendo muy bien los pasos en general de la formula, me ayudarìas a
entender el procedimiento de la misma, así como referirme alguna página donde
pueda encontrar ejemplos de la combinación de fórmulas con Offset?

Por lo pronte he resulo mi problema, MIL GRACIAS.


"Héctor Miguel" escribió:

hola, Adrian !

> ... al aplicar los arreglos que indicas y al copiar y pegar la formula en todas las celdas (B2:CZ66)
> el resultado es "0" (cero), podrias indicar que estoy haciendo mal?

1) de acuerdo con el rango que mencionas (B2:CZ66) estamos hablando de que en la hoja-resumen (Sheet2 ?)
tienes 65 filas-articulos [A2:A66]
y 103 columnas-clientes [B1:CZ1]

2) esto a su vez se "traduce" a que en tu hoja principal (Sheet1 ?)
tienes 103 filas-registros-clientes [A2:A104]
y "n" pares de columnas a partir de la columna B (ByC, DyE, FyG, ...)

3) el nombre que definimos (Registros ?) esta relacionado/ligado/... con las 103 (o "x") filas-registros-clintes en Sheet1
para el caso este, la formula seria: =row(indirect("1:103"))

4) el otro nombre (Pedidos ?) corresponde a "n" PARES de columnas tambien en Sheet1

si cualquier duda... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida