Pegar transpuesto
Quiero hacer una macro para pegar transpuesto. Es decir selecciono un rango, copio (ctrl+V), y elijo la celda de destino y ejecuto una macro para que pegue transpuesto, en lugar de ir a pegado especial... Transpuesto.
Dejo solo la instrucción del pegado especail, pero me arroja un error !
Dejo solo la instrucción del pegado especail, pero me arroja un error !
Respuesta de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
Hubiera sido interesante que mencionaras cual era el mensaje de error.
De todos modos esta es una macro que funciona:
Sub Transpo()
Range("S14:S38").Copy
Range("U11").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
End Sub
----
Por otra parte, aunque oculta, MS Excel proporciona una forma de transponer utilizando fórmulas, por lo cual cuando cambia algo en el rango original, también lo hace en el transpuesto.
Para lograrlo, necesitarás una fórmula aplicada como matriz, es decir una fórmula matricial (Array Fórmula o CSE fórmula)
Este tipo de fórmulas se ingresa tipeándola y presionando luego Ctrl+Shift+Enter. Un par de corchetes se agregarán automáticamente, encerrando la fórmula.
Siguiendo el caso de la macro, si el rango a transponer fuese S14:S38 (25 lineas, 1 columna), selecciona el rango en destino, horizontal de 25 celdas y escribe:
=TRANSPONER(S14:S38)
y presiona Ctrl+Shift+Enter. NO solo ENTER.
Las 25 celdas se llenaran con su correspondiente valor y, adicionalmente, se actualizará cada vez que cambien los valores en las celdas originales.
Esto debería resolver tu pregunta. Si así fuera, ya sabes qué hacer...;)
Un abrazo!
Fernando
De todos modos esta es una macro que funciona:
Sub Transpo()
Range("S14:S38").Copy
Range("U11").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
End Sub
----
Por otra parte, aunque oculta, MS Excel proporciona una forma de transponer utilizando fórmulas, por lo cual cuando cambia algo en el rango original, también lo hace en el transpuesto.
Para lograrlo, necesitarás una fórmula aplicada como matriz, es decir una fórmula matricial (Array Fórmula o CSE fórmula)
Este tipo de fórmulas se ingresa tipeándola y presionando luego Ctrl+Shift+Enter. Un par de corchetes se agregarán automáticamente, encerrando la fórmula.
Siguiendo el caso de la macro, si el rango a transponer fuese S14:S38 (25 lineas, 1 columna), selecciona el rango en destino, horizontal de 25 celdas y escribe:
=TRANSPONER(S14:S38)
y presiona Ctrl+Shift+Enter. NO solo ENTER.
Las 25 celdas se llenaran con su correspondiente valor y, adicionalmente, se actualizará cada vez que cambien los valores en las celdas originales.
Esto debería resolver tu pregunta. Si así fuera, ya sabes qué hacer...;)
Un abrazo!
Fernando
¿Primero qué nada no te había contestado porque no me ha llegado el mail de aviso?
Por suerte me metí por casualidad a Mi Todoexpertos y vi la respuesta.
Bueno con lo de las matrices me dejaste loco !
¿Dónde puedo conseguir como utilizar estas funciones?
Sobre el error me indica "Fallo en el método PasteSpecial de la clase range"
Yo quiero seleccionar un rango cualquiera, copiar, seleccionar la celda de destino y ejecutar la macro para que pegue transpuesto.
La macro pienso yo debería ser algo así :
Sub trans()
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
End Sub
Pero me arroja ese error !
¿Se puede hacer lo que quiero?
Así como existe el botón pegar valores y pegar formato, me gustaría hacer uno que sea pegar transpuesto, es decir seleccionar copiar, seleccionar destino y apretar botón...
¿Me explico?
Gracias.
Por suerte me metí por casualidad a Mi Todoexpertos y vi la respuesta.
Bueno con lo de las matrices me dejaste loco !
¿Dónde puedo conseguir como utilizar estas funciones?
Sobre el error me indica "Fallo en el método PasteSpecial de la clase range"
Yo quiero seleccionar un rango cualquiera, copiar, seleccionar la celda de destino y ejecutar la macro para que pegue transpuesto.
La macro pienso yo debería ser algo así :
Sub trans()
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
End Sub
Pero me arroja ese error !
¿Se puede hacer lo que quiero?
Así como existe el botón pegar valores y pegar formato, me gustaría hacer uno que sea pegar transpuesto, es decir seleccionar copiar, seleccionar destino y apretar botón...
¿Me explico?
Gracias.
Así es, che!
Varios han comentado que no se enteran de que les contesté la pregunta porque el Sitio no les avisa.
Lo que no sé es si eso es una opción que hace cada usuario o que está funcionando mal el sistema.
Es una pena porque trato de contestar lo más rápido posible...
Respecto a las fórmulas matriciales, no hay mucha información disponible.
De hecho, yo mismo me enteré a través del otro sitio donde contesto preguntas de MS Excel.
Hace unos días, escribí una explicación sobre las mismas respecto a una fórmula. Estoy esperando que el beneficiario de esa explicación me conteste así recupero el texto. Seguramente, en otra respuesta te pego aquella explicación.
Respecto a la macro que propones, le está faltando la instrucción de copia.
El problema se plantea porque tienes que indicarle dos rangos a la macro:
1.- El rango a trasponer
2.- La celda de destino
La primera puede tomarse del rango seleccionado, pero la segunda deberás indicársela de algún otro modo. (Por ejemplo con un control RefEdit dentro de un formulario).
Prueba con esta:
Sub trans()
Selection.Copy
Range("U11").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
End Sub
Debes asegurarte que ni el rango a trasponer ni el rango donde "caeran" los valores contengan celdas combinadas y obviamente como destino elegir ua sola celda.
Salvo por eso la macro debería funcionar OK
Prueba y dime.
Que tengas un gran fin de semana!
Fernando
Pd: ¿Tienes un nombre?
Varios han comentado que no se enteran de que les contesté la pregunta porque el Sitio no les avisa.
Lo que no sé es si eso es una opción que hace cada usuario o que está funcionando mal el sistema.
Es una pena porque trato de contestar lo más rápido posible...
Respecto a las fórmulas matriciales, no hay mucha información disponible.
De hecho, yo mismo me enteré a través del otro sitio donde contesto preguntas de MS Excel.
Hace unos días, escribí una explicación sobre las mismas respecto a una fórmula. Estoy esperando que el beneficiario de esa explicación me conteste así recupero el texto. Seguramente, en otra respuesta te pego aquella explicación.
Respecto a la macro que propones, le está faltando la instrucción de copia.
El problema se plantea porque tienes que indicarle dos rangos a la macro:
1.- El rango a trasponer
2.- La celda de destino
La primera puede tomarse del rango seleccionado, pero la segunda deberás indicársela de algún otro modo. (Por ejemplo con un control RefEdit dentro de un formulario).
Prueba con esta:
Sub trans()
Selection.Copy
Range("U11").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
End Sub
Debes asegurarte que ni el rango a trasponer ni el rango donde "caeran" los valores contengan celdas combinadas y obviamente como destino elegir ua sola celda.
Salvo por eso la macro debería funcionar OK
Prueba y dime.
Que tengas un gran fin de semana!
Fernando
Pd: ¿Tienes un nombre?
Tuviste suerte!
Acaba de volver el mail con la explicación.
Se trataba de lograr una función que contara casos si se cumplían tres condiciones:
A.- valor mayor que cero
B.- Valor menor que 1045
C.- Valor distinto a 677
Esta fue mi respuesta:
La función contar. Si es bastante interesante, pero limitada. Además siempre me molestó eso de poner la condición entre comillas.
Por suerte, MS Excel esconde otro tipo de fórmula, lejos, más potente. Son las denominadas "Fórmulas Matriciales" (Array formulas/CSE fórmulas, en ingles)
Es algo así como las fórmulas SUMAR. SI() o CONTAR. SI(), que suman o cuentan en base a una condición, pero estas permiten agregar cmás condiciones y eventualmente modificar datos antes de usarlos apra calcular "en el aire".
Este tipo de fórmulas se ingresa tipeándola y presionando luego Ctrl+Shift+Enter. Un par de corchetes se agregarán automáticamente, encerrando la fórmula.
La que sigue es una de la fórmula que usé:
=SUMA(SI(D7:D50<>0;SI(D7:D50<$H$10;SI(D7:D50<>$H$9;1;0))))
[Por prolijidad, reemplazé 677 y 1045 por celdas donde estan escritos tales valores, pero puedes colocarlos dentro de la fórmula)
Asusta, pero cuando la entiendas te va a gustar.
En el archivo adjunto está la fórmula de arriba y hay una forma alternativa, más doméstica que carga en una columna 1 o 0 según se cumplan las tres condiciones o no. Sólo que la matricial en lugar de usa una columna auxiliar, carga los resultados (1 ó 0) en una matriz y luego hace una suma matricial...
Ella hace: sólo para las celdas del rango que cumplan la primer condición (>0), evalúa si cumplen la segunda (<1045), de las que queden controla la tercer condición (<> 677). Por cada celda del rango que haya pasado estos filtros guardará un 1, finalmente sumará todos la matriz. Claro que esto, tu no lo verás, simplemente tendrás el resultado deseado.
Espero que te aclare un poco más el tema.
Un abrazo!
Fer
Acaba de volver el mail con la explicación.
Se trataba de lograr una función que contara casos si se cumplían tres condiciones:
A.- valor mayor que cero
B.- Valor menor que 1045
C.- Valor distinto a 677
Esta fue mi respuesta:
La función contar. Si es bastante interesante, pero limitada. Además siempre me molestó eso de poner la condición entre comillas.
Por suerte, MS Excel esconde otro tipo de fórmula, lejos, más potente. Son las denominadas "Fórmulas Matriciales" (Array formulas/CSE fórmulas, en ingles)
Es algo así como las fórmulas SUMAR. SI() o CONTAR. SI(), que suman o cuentan en base a una condición, pero estas permiten agregar cmás condiciones y eventualmente modificar datos antes de usarlos apra calcular "en el aire".
Este tipo de fórmulas se ingresa tipeándola y presionando luego Ctrl+Shift+Enter. Un par de corchetes se agregarán automáticamente, encerrando la fórmula.
La que sigue es una de la fórmula que usé:
=SUMA(SI(D7:D50<>0;SI(D7:D50<$H$10;SI(D7:D50<>$H$9;1;0))))
[Por prolijidad, reemplazé 677 y 1045 por celdas donde estan escritos tales valores, pero puedes colocarlos dentro de la fórmula)
Asusta, pero cuando la entiendas te va a gustar.
En el archivo adjunto está la fórmula de arriba y hay una forma alternativa, más doméstica que carga en una columna 1 o 0 según se cumplan las tres condiciones o no. Sólo que la matricial en lugar de usa una columna auxiliar, carga los resultados (1 ó 0) en una matriz y luego hace una suma matricial...
Ella hace: sólo para las celdas del rango que cumplan la primer condición (>0), evalúa si cumplen la segunda (<1045), de las que queden controla la tercer condición (<> 677). Por cada celda del rango que haya pasado estos filtros guardará un 1, finalmente sumará todos la matriz. Claro que esto, tu no lo verás, simplemente tendrás el resultado deseado.
Espero que te aclare un poco más el tema.
Un abrazo!
Fer
Muy bien. Excelente.
Ahora si llegaron los e-mail.
Entonces no se puede hacer un botón de pegar transpuesto, salvo utilizando un refedit.
Sigo impresionado con las matrices, estoy tratando de invertir una (obtener la inversa, no comprar una je je)
Ah, se me olvidaba, mi nombre es Rodrigo, vivo en Osorno Chile, tengo 28 años y de profesión soy ingeniero eléctrico.
Chao maestro.
Ahora si llegaron los e-mail.
Entonces no se puede hacer un botón de pegar transpuesto, salvo utilizando un refedit.
Sigo impresionado con las matrices, estoy tratando de invertir una (obtener la inversa, no comprar una je je)
Ah, se me olvidaba, mi nombre es Rodrigo, vivo en Osorno Chile, tengo 28 años y de profesión soy ingeniero eléctrico.
Chao maestro.
- Compartir respuesta
1 comentario
fejoal Hola quería saber si me puedes ayudar con mi caso de copiar y pegar transpuesto pero en diferentes posiciones con macroTengo una hoja 1 con una lista de desplegable asiC1=AzulC2= VerdeC3= Amarillo y así sucesivamenteYo quiere ejecutar una segunda macro en la hoja2 y que me pegue esa lista pero traspuesta y separada cada celda por 2 espacio o columnas es decir que las pegue asihojaD4= Azul, G4= Verde, J4= Amarillo y así sucesivamente.. - Nelson Soto