Ciclo con Transpose

22/08/2009 - 02:21 por sebastico | Informe spam
Hola

En Excel 2003, tengo una hoja con datos string con el siguiente Rango A2:02
hasta A632:O632. Necesito hacer un ciclo con el siguiente código:

Range("A2:O2").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True

Range("A3:O3").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A19").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True

Range("A4:O4").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A37").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True

Y asi hasta A632:0632

Muchas gracias

Preguntas similare

Leer las respuestas

#6 sebastico
22/08/2009 - 23:23 | Informe spam
Pepe

Como lo dije al inicio tengo Excel 2003, no tengo Excel 2007.

Buscando ayuda tengo este código que me ha funcionado bien.

Option Explicit
Sub testme()
Dim wks As Worksheet
Dim DestCell As Range
Dim iRow As Long

Set wks = Worksheets("Sheet2") ' or ActiveSheet

Set DestCell = Worksheets("Sheet3").Range("b1")

With wks
For iRow = 2 To 632
' or last used cell in column A
'for irow = 2 to .Cells(.Rows.Count, "A").End(xlUp).Row
.Cells(iRow, "A").Resize(1, .Range("o1").Column).Copy
DestCell.PasteSpecial _
Paste:=xlPasteAll, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=True
Set DestCell = DestCell.Offset(18, 0)
Next iRow
End With
End Sub

Sin embargo, debido cada rango de fila es diferente por ejemplo:

A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 01
1 4 2 1 8 6 9 2 4 7 1 8 5 1 3

A2 B2 C2 D2 E2 F2 G2 H2 J1
3 2 7 5 1 4 8 1 5
.
.
.
A107 B107
4 7
.
.
A632 B632 C632 D 632 E532
6 9 2 7 5

Necesito que EL TRANSPOSE quede asi:

A B
1 4
1 4
1 2
1 1
1 8
1 6
1 9
1 2
1 4
1 7
1 1
1 8
1 5
1 1
1 3

A B
3 2
3 2
3 7
3 5
3 1
3 4
3 8
3 1
3 5

A B
4 7

A B
6 9
6 2
6 7
6 5


Etc hasta fila 631

El nombre de las columnas en el trasnpose es solo para ilustrar y no deben
estar al final del proceso.

Gracias de antemano y Salud2

"pepe" wrote:

Más o menos algo así:

for Row1 = 2 to 632
For col 1 = 1 to 15
Dato= worksheets("Hoja1").Cells(row1,col1)
Row2 = col1
col2 = row1
worksheets("Hoja2").Cells(row2,col2) = Dato
next
next


Espero que texngas excel 2007 porque de lo contrario te quedarás sin
columnas.






"sebastico" escribió en el mensaje de
noticias news:
> Hola Pepe
> ¿Cómo se escribe lo que sugieres en código?
> Gracias
>
> "pepe" wrote:
>
>> en estos casos es más fácil utilizar la notación fila y columna.
>>
>>
>>
>> "sebastico" escribió en el mensaje
>> de
>> noticias news:
>> > Hola
>> >
>> > En Excel 2003, tengo una hoja con datos string con el siguiente Rango
>> > A2:02
>> > hasta A632:O632. Necesito hacer un ciclo con el siguiente código:
>> >
>> > Range("A2:O2").Select
>> > Selection.Copy
>> > Sheets("Sheet2").Select
>> > Range("A1").Select
>> > Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
>> > SkipBlanks:= _
>> > False, Transpose:=True
>> >
>> > Range("A3:O3").Select
>> > Selection.Copy
>> > Sheets("Sheet2").Select
>> > Range("A19").Select
>> > Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
>> > SkipBlanks:= _
>> > False, Transpose:=True
>> >
>> > Range("A4:O4").Select
>> > Selection.Copy
>> > Sheets("Sheet2").Select
>> > Range("A37").Select
>> > Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
>> > SkipBlanks:= _
>> > False, Transpose:=True
>> >
>> > Y asi hasta A632:0632
>> >
>> > Muchas gracias
>> >
>>

Respuesta Responder a este mensaje
#7 Héctor Miguel
23/08/2009 - 02:01 | Informe spam
hola, !

Bueno puse "copiar" pues es el codigo que conozco pero si lo que deseo se puede hacer con el que sugieres esta bien.
Los datos a trabajar estan en Sheet1 y se deben pasar a Sheet2.
Podrias ayudarme a escribir el codigo que hace la operacion que sugieres...



prueba con una macro +/- como la siguiente:

Sub Copiar_transpuesto()
Dim Fila As Integer
Application.ScreenUpdating = False
With Worksheets("sheet1")
For Fila = 1 To 631
Worksheets("sheet2").Range("a" & (Fila - 1) * 18 + 1).Resize(15).Value = _
Application.Transpose(.Range("a" & Fila + 1).Resize(, 15).Value)
Next
End With
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#8 pepe
23/08/2009 - 08:32 | Informe spam
Por lo que veo transpones las filas siempre en en las columnas A y B. En
este caso no tienes el problema de la limitación de las 256 columnas de
Excel 2003.

Con este código escribirá en la hoja2, columna el número de la fila de la
que ha copiado ls datos y en la columna B el dato correspondiente.

he supuesto que el número de filas es 632 y el de columnas 15 pero si estos
datos son variables y no quieres molestarte en borrar las filas en blanco al
final del proceso, puedse incluir código para calcular el numero de filas y
columnas a tratar.


row2 = 1
' aquí el codigo para calcular la ultima fila de la hoja
for Row1 = 2 to 632 'ultimafila
' aqui el código para calcular la ultima columna de la fila
For col1 = 1 to 15 ' ultimacolumna
Dato= worksheets("Hoja1").Cells(row1,col1)
Row2 = row2 +1
worksheets("Hoja2").Cells(row2,1) = col1
worksheets("Hoja2").Cells(row2,2) = Dato
next
next




"sebastico" escribió en el mensaje de
noticias news:
Pepe

Como lo dije al inicio tengo Excel 2003, no tengo Excel 2007.

Buscando ayuda tengo este código que me ha funcionado bien.

Option Explicit
Sub testme()
Dim wks As Worksheet
Dim DestCell As Range
Dim iRow As Long

Set wks = Worksheets("Sheet2") ' or ActiveSheet

Set DestCell = Worksheets("Sheet3").Range("b1")

With wks
For iRow = 2 To 632
' or last used cell in column A
'for irow = 2 to .Cells(.Rows.Count, "A").End(xlUp).Row
.Cells(iRow, "A").Resize(1, .Range("o1").Column).Copy
DestCell.PasteSpecial _
Paste:=xlPasteAll, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=True
Set DestCell = DestCell.Offset(18, 0)
Next iRow
End With
End Sub

Sin embargo, debido cada rango de fila es diferente por ejemplo:

A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 01
1 4 2 1 8 6 9 2 4 7 1 8 5 1 3

A2 B2 C2 D2 E2 F2 G2 H2 J1
3 2 7 5 1 4 8 1 5
.
.
.
A107 B107
4 7
.
.
A632 B632 C632 D 632 E532
6 9 2 7 5

Necesito que EL TRANSPOSE quede asi:

A B
1 4
1 4
1 2
1 1
1 8
1 6
1 9
1 2
1 4
1 7
1 1
1 8
1 5
1 1
1 3

A B
3 2
3 2
3 7
3 5
3 1
3 4
3 8
3 1
3 5

A B
4 7

A B
6 9
6 2
6 7
6 5


Etc hasta fila 631

El nombre de las columnas en el trasnpose es solo para ilustrar y no deben
estar al final del proceso.

Gracias de antemano y Salud2

"pepe" wrote:

Más o menos algo así:

for Row1 = 2 to 632
For col 1 = 1 to 15
Dato= worksheets("Hoja1").Cells(row1,col1)
Row2 = col1
col2 = row1
worksheets("Hoja2").Cells(row2,col2) = Dato
next
next


Espero que texngas excel 2007 porque de lo contrario te quedarás sin
columnas.






"sebastico" escribió en el mensaje
de
noticias news:
> Hola Pepe
> ¿Cómo se escribe lo que sugieres en código?
> Gracias
>
> "pepe" wrote:
>
>> en estos casos es más fácil utilizar la notación fila y columna.
>>
>>
>>
>> "sebastico" escribió en el
>> mensaje
>> de
>> noticias news:
>> > Hola
>> >
>> > En Excel 2003, tengo una hoja con datos string con el siguiente
>> > Rango
>> > A2:02
>> > hasta A632:O632. Necesito hacer un ciclo con el siguiente código:
>> >
>> > Range("A2:O2").Select
>> > Selection.Copy
>> > Sheets("Sheet2").Select
>> > Range("A1").Select
>> > Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
>> > SkipBlanks:= _
>> > False, Transpose:=True
>> >
>> > Range("A3:O3").Select
>> > Selection.Copy
>> > Sheets("Sheet2").Select
>> > Range("A19").Select
>> > Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
>> > SkipBlanks:= _
>> > False, Transpose:=True
>> >
>> > Range("A4:O4").Select
>> > Selection.Copy
>> > Sheets("Sheet2").Select
>> > Range("A37").Select
>> > Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
>> > SkipBlanks:= _
>> > False, Transpose:=True
>> >
>> > Y asi hasta A632:0632
>> >
>> > Muchas gracias
>> >
>>

Respuesta Responder a este mensaje
#9 sebastico
23/08/2009 - 12:34 | Informe spam
Muchas gracias Héctor, este código funciona muy bien, empero debo agregar
otra aplicación que me ayude a ordenar los datos y a codificarlos.

Salud2

"Héctor Miguel" wrote:

hola, !

> Bueno puse "copiar" pues es el codigo que conozco pero si lo que deseo se puede hacer con el que sugieres esta bien.
> Los datos a trabajar estan en Sheet1 y se deben pasar a Sheet2.
> Podrias ayudarme a escribir el codigo que hace la operacion que sugieres...

prueba con una macro +/- como la siguiente:

Sub Copiar_transpuesto()
Dim Fila As Integer
Application.ScreenUpdating = False
With Worksheets("sheet1")
For Fila = 1 To 631
Worksheets("sheet2").Range("a" & (Fila - 1) * 18 + 1).Resize(15).Value = _
Application.Transpose(.Range("a" & Fila + 1).Resize(, 15).Value)
Next
End With
End Sub

saludos,
hector.



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