codigo para ordenar datos

12/03/2010 - 23:05 por Daniel | Informe spam
Hola a tod@s
Necesito saber como puedo generar una macro que en un rango b1:z50 comience
a leer por columna vale decir:

Tipo nombre_B nombre_C ... Nombre_Z
fecha 21/10 03/03 25/05
sala 1 10
50
sala 2 20 50
120
sala 3 -- 1


necesito un codigo para ir leyendo por Columna a partir de la columna
nombre, entonces cuando vea Nombre_B siga y vea la fecha, luego la sala y la
cantidad. Estos datos los coloque luego en otra hoja, y los ordene como fila
asi:

Nombre_B.fecha ...Sala 1..cantidad.
Luego en la siguiente fila
Nombre_B.fecha ...Sala 2..cantidad.
luego que ya no hay salas siga en la columna nombre_C


he intentado hacer algo pero no logro encontrar la forma.

De antemano gracias


La idea es poder ordenar las salas

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
13/03/2010 - 05:24 | Informe spam
hola, Daniel !

(antes de requerir de macros...) prueba con el siguiente procedimiento:

1) selecciona en la hoja (de salida) un rango invirtiendo filas <-> columnas del rago "origen" (es decir)
a) si tu listado original usa el rango [B1:Z50] (50 filas x 25 columnas)
b) selecciona en la otra hoja un rango invertido de 25 filas x 50 columnas p.e. [A1:AX25]

2) solamente en la primer celda del rango seleccionado ([A1] ?)...
a) introduce la siguiente formula: =transponer(hoja1!b1:z50) <= OJO con el nombre de la hoja
b) pulsa ctrl + shift + enter (NO un simple enter) para confirmar una formula de arreglo matricial
c) copia y pega especial con la opcion de valores

comentas si prefieres macros que hagan algo parecido o lo mismo que lo anterior ?
saludos,
hector.

__ OP __
Necesito saber como puedo generar una macro que en un rango b1:z50 comience a leer por columna vale decir:
Tipo nombre_B nombre_C ... Nombre_Z
fecha 21/10 03/03 25/05
sala 1 10 50
sala 2 20 50 120
sala 3 -- 1 --
necesito un codigo para ir leyendo por Columna a partir de la columna nombre
entonces cuando vea Nombre_B siga y vea la fecha, luego la sala y la cantidad.
Estos datos los coloque luego en otra hoja, y los ordene como fila asi:
Nombre_B.fecha ...Sala 1..cantidad.
Luego en la siguiente fila
Nombre_B.fecha ...Sala 2..cantidad.
luego que ya no hay salas siga en la columna nombre_C
he intentado hacer algo pero no logro encontrar la forma.
De antemano gracias
La idea es poder ordenar las salas
Respuesta Responder a este mensaje
#2 Daniel
13/03/2010 - 13:34 | Informe spam
Gracias por tu respuesta Hector.
Este comando gira los valores de la tabla y eso funciona a la perfeccion, de
hecho no sabia que existen comandos matriciales.
Con respecto a la tabla tengo en nombre_B dos salas distintas . lo que
requiero es darle una fila a cada sala por nombre en la matriz en realidad es
como desintegrar la matriz, y dejar por cada sala requerida una fila
indicando la fecha, nombre. Ademas existen casillas en blanco en la salas lo
que no necesito que aparezcan.
Gracias por tu ayuda Hector Miguel.


"Héctor Miguel" wrote:

hola, Daniel !

(antes de requerir de macros...) prueba con el siguiente procedimiento:

1) selecciona en la hoja (de salida) un rango invirtiendo filas <-> columnas del rago "origen" (es decir)
a) si tu listado original usa el rango [B1:Z50] (50 filas x 25 columnas)
b) selecciona en la otra hoja un rango invertido de 25 filas x 50 columnas p.e. [A1:AX25]

2) solamente en la primer celda del rango seleccionado ([A1] ?)...
a) introduce la siguiente formula: =transponer(hoja1!b1:z50) <= OJO con el nombre de la hoja
b) pulsa ctrl + shift + enter (NO un simple enter) para confirmar una formula de arreglo matricial
c) copia y pega especial con la opcion de valores

comentas si prefieres macros que hagan algo parecido o lo mismo que lo anterior ?
saludos,
hector.

__ OP __
> Necesito saber como puedo generar una macro que en un rango b1:z50 comience a leer por columna vale decir:
> Tipo nombre_B nombre_C ... Nombre_Z
> fecha 21/10 03/03 25/05
> sala 1 10 50
> sala 2 20 50 120
> sala 3 -- 1 --
> necesito un codigo para ir leyendo por Columna a partir de la columna nombre
> entonces cuando vea Nombre_B siga y vea la fecha, luego la sala y la cantidad.
> Estos datos los coloque luego en otra hoja, y los ordene como fila asi:
> Nombre_B.fecha ...Sala 1..cantidad.
> Luego en la siguiente fila
> Nombre_B.fecha ...Sala 2..cantidad.
> luego que ya no hay salas siga en la columna nombre_C
> he intentado hacer algo pero no logro encontrar la forma.
> De antemano gracias
> La idea es poder ordenar las salas


.

Respuesta Responder a este mensaje
#3 Héctor Miguel
13/03/2010 - 22:02 | Informe spam
hola, Daniel !
... lo que requiero es darle una fila a cada sala por nombre en la matriz en realidad
es como desintegrar la matriz, y dejar por cada sala requerida una fila indicando la fecha, nombre.
Ademas existen casillas en blanco en la salas lo que no necesito que aparezcan...



prueba (corrige/adapta) con una macro +/- como la siguiente:

Sub Arreglo_x_salas()
Dim srcSheet As String, dstSheet As String, srcData As Range, Col As Byte, Celda As Range
srcSheet = "hoja1"
dstSheet = "hoja2"
Application.ScreenUpdating = False
Set srcData = Worksheets(srcSheet).Range("a1").CurrentRegion
With srcData
For Col = 2 To .Columns.Count
.AutoFilter Field:=Col, Criteria1:="<>"
With .Parent.AutoFilter.Range
For Each Celda In .Offset(2).Resize(.Rows.Count - 2, 1).SpecialCells(xlCellTypeVisible)
With Worksheets(dstSheet).Range("a65536").End(xlUp).Offset(1)
.Resize(, 2).Value = Application.Transpose(srcData.Offset(, Col - 1).Resize(2, 1).Value)
.Offset(, 2).Resize(, 2).Value = Array(Celda.Value, Celda.Offset(, Col - 1).Value)
End With
Next
End With
.AutoFilter
Next
End With
Set srcData = Nothing
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#4 Daniel
14/03/2010 - 20:23 | Informe spam
Ok Hector loprobare y tee cuento

"Héctor Miguel" wrote:

hola, Daniel !
> ... lo que requiero es darle una fila a cada sala por nombre en la matriz en realidad
> es como desintegrar la matriz, y dejar por cada sala requerida una fila indicando la fecha, nombre.
> Ademas existen casillas en blanco en la salas lo que no necesito que aparezcan...

prueba (corrige/adapta) con una macro +/- como la siguiente:

Sub Arreglo_x_salas()
Dim srcSheet As String, dstSheet As String, srcData As Range, Col As Byte, Celda As Range
srcSheet = "hoja1"
dstSheet = "hoja2"
Application.ScreenUpdating = False
Set srcData = Worksheets(srcSheet).Range("a1").CurrentRegion
With srcData
For Col = 2 To .Columns.Count
.AutoFilter Field:=Col, Criteria1:="<>"
With .Parent.AutoFilter.Range
For Each Celda In .Offset(2).Resize(.Rows.Count - 2, 1).SpecialCells(xlCellTypeVisible)
With Worksheets(dstSheet).Range("a65536").End(xlUp).Offset(1)
.Resize(, 2).Value = Application.Transpose(srcData.Offset(, Col - 1).Resize(2, 1).Value)
.Offset(, 2).Resize(, 2).Value = Array(Celda.Value, Celda.Offset(, Col - 1).Value)
End With
Next
End With
.AutoFilter
Next
End With
Set srcData = Nothing
End Sub

saludos,
hector.


.

Respuesta Responder a este mensaje
#5 Daniel
18/03/2010 - 00:27 | Informe spam
Gracias por tu respuesta Hector Hector.
Disculpa no haberte respondido antes pero me has dejado tratando de aprender
lo que hiciste y tratar de colgarme de esto para hacer mas cosas pero no pude
saber mas, ya que como te dije al principio trate de resumir lo que necesito
hacer, pero mi resumen fue pesimo pues lo que haces en la macro es
exactamente lo que plantie. Yo omiti informacion que se encuentra en las
columnas vale decir en la columna de tipo va Tipo, Fecha, codigo, OC, y luego
vienen los productos sala1hasta sala x.
cuando haces el traspose, tu tomas el valor de que busca por columna de
nombres, y luego va desmenuzando la base segun los valores encontrados en
NOmbres, fecha, pero no puedo intercalar otros datos como OC, y codigo que va
para todos los productos. no se si me entiendes pero lo ecplico asi:


sala1 Nombre_b fecha codigo OC valor_encontrado
sala2 Nombre_N fecha codigoN OC_N valor_encontrado_N

Espero que me entiendas desde ya gracias.

"Héctor Miguel" wrote:

hola, Daniel !
> ... lo que requiero es darle una fila a cada sala por nombre en la matriz en realidad
> es como desintegrar la matriz, y dejar por cada sala requerida una fila indicando la fecha, nombre.
> Ademas existen casillas en blanco en la salas lo que no necesito que aparezcan...

prueba (corrige/adapta) con una macro +/- como la siguiente:

Sub Arreglo_x_salas()
Dim srcSheet As String, dstSheet As String, srcData As Range, Col As Byte, Celda As Range
srcSheet = "hoja1"
dstSheet = "hoja2"
Application.ScreenUpdating = False
Set srcData = Worksheets(srcSheet).Range("a1").CurrentRegion
With srcData
For Col = 2 To .Columns.Count
.AutoFilter Field:=Col, Criteria1:="<>"
With .Parent.AutoFilter.Range
For Each Celda In .Offset(2).Resize(.Rows.Count - 2, 1).SpecialCells(xlCellTypeVisible)
With Worksheets(dstSheet).Range("a65536").End(xlUp).Offset(1)
.Resize(, 2).Value = Application.Transpose(srcData.Offset(, Col - 1).Resize(2, 1).Value)
.Offset(, 2).Resize(, 2).Value = Array(Celda.Value, Celda.Offset(, Col - 1).Value)
End With
Next
End With
.AutoFilter
Next
End With
Set srcData = Nothing
End Sub

saludos,
hector.


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida