Saltar al contenido

Transponer filas a columnas por formula


hectorcc_18

Recommended Posts

publicado

Hola!!

Tengo un archivo con dos hojas, en la primera se encuentra un estado de cuenta de los clientes de la empresa (Hoja 1); en la segunda se encuentra un resumen de los movimiento del mes (Hoja 2), de la Hoja 1 debo pasar a la Hoja 2 solo los valores de SALDO INICIAL, CARGO y ABONOS, esta información se encuentra al final de los movimientos mensuales de cada cliente; en la Hoja 1 dichos valores se encuentran en filas p.e D16, D17 y D18, pero en la Hoja 2 los necesito en columnas p.e. C4, D4, E4, actualmente utilizo la función de Excel TRANSPONER, pero debo seleccionar el rango donde deseo copiar los valores, escribir la formula (=TRANSPONER), luego cambiar de hoja, seleccionar las filas a copiar y presionar SHIFT+CTRL+ENTER, situación esta última que por la prisa olvido y se tiene que repetir todo el proceso.

Me gustaría poder colocar el primer valor en la hoja 2 y que por formula se obtengan los otros dos valores, es decir manualmente decir que Hoja2!C4=Hoja1!D16, y que por formula se calcule que Hoja2!D4=Hoja1!D17 y Hoja2!E4=Hoja1!D19.

Coloque este tema en Excel, aunque estoy abierto a utilizar VBA, solo que no soy muy bueno el ello, pero estoy aprendiendo, y en gran medida gracias a ustedes.

Como dato aclaratorio, la Hoja 1 hago la revisión de manera manual ya que el número de Clientes y Movimientos es variable por mes, así que le resumen de mi primer cliente lo mismo puede empezar en la celda D4 que en la D8 o en la D15... o en cualquiera.

Atte.

Héctor Cornejo Cravioto

Piensa diferente... y vivirás mejor

publicado

Gracias, los he estado revisando y ya creo tener una idea de como hacerlo, ahora a experimentar un poco, ya les contaré que desenlace tuvo este tema.

Atte.

Héctor Cornejo Cravioto

Piensa diferente... y vivirás mejor

publicado

Hola!!

Gracias a Leopoldo Blancas, he visto una buena cantidad de los videos que me sugeriste, y estoy aprendiendo bastante de VBA, pero también he estado experimentando y jugando  un poco con las formulas de Excel y finalmente encontré la manera de resolver mi problema, resulta que la lógica de cómo hacerlo la tenía, lo que no podía encontrar era la manera de obtener la referencia (no el dato) de la celda que contenía el primer dato de mis filas en la tabla donde pasaba a columnas; finalmente encontré la formula FORMULATEXTO, una vez obtenido este valor pude hacer uso de algunas formulas y calcular la nueva dirección, el problema ahora era cómo indicarle a Excel que el texto calculado era una referencia a una dirección, así que busqué y encontré la fórmula INDIRECTO.

Hice un pequeño archivo para explicar lo que hice, lo subo para que quien esté interesado en el tema lo pueda consultar y dado el caso mejorarlo o adaptarlo a sus necesidades.

Por mi parte creo que este ya es un tema resuelto.

Transponer filas a columnas por formula.xlsx

publicado

Buenas tardes!!
Podrías seleccionar un rango de 4x3 y poner esta fórmula

=TRANSPONER('Valores en filas'!A2:C5)

Luego presionas CTRL+SHIFT+ENTER y ya está

Pero me parece muy interesante tu forma de hacerlo

publicado

¡Hola, @DiegoPC!

Si observas bien... verás que la fórmula depende del valor fijo en la columna B.

Entonces, tu propuesta pudiese acomodarse, seleccionando C19:E19 e introduciendo la fórmula (Ctrl + Shift + Enter):

=TRANSPONER(INDICE('Valores en filas'!$A$3:$C$5;;COINCIDIR($B19;'Valores en filas'!$A$2:$C$2;)))

Siendo B19 el primer valor fijo.  ¡Bendiciones!

publicado

Rayos!!! Perdona que no vi que ya sabías =TRANSPONER, propongo otra con VBA!!

 

Sub Transpone()
    Selection.CurrentRegion.Copy
    Selection.CurrentRegion.Offset(Selection.CurrentRegion.Rows.Count + 1, 0).Resize(1, 1).PasteSpecial Transpose:=True
End Sub
 

publicado
Hace 27 minutos , johnmpl dijo:

Si observas bien...

Hola @johnmpl , creo que ando de despistado, no me di cuenta del detalle, para la siguiente veré bien y me presto los lentes de @Silvia que siempre ve más allá de lo evidente :D

publicado
Hace 15 horas, johnmpl dijo:

Entonces, tu propuesta pudiese acomodarse, seleccionando C19:E19 e introduciendo la fórmula (Ctrl + Shift + Enter):

Hola!!
Gracias @johnmpl y @DiegoPC,  TRANSPONER fue la primer opción de solución que tuve en mi hoja, pero comenté en mi mensaje inicial que por la prisa y lo la cantidad de registros que hay que copiar se vuelve tedioso y complicado el presionar Ctrl + Shift + Enter cada vez, tanto en mi caso como con algunos capturistas que revisaron la solución utilizando TRANSPONER, en 50 registros omitían la combinación de teclas en al menos 5 ocasiones (un 10% de ineficiencia) y había que regresar a corregir los errores, se que con el tiempo se deberían de acostumbrar, pero el chiste es facilitarles la vida, por ello batallé un poco pero logré la solución que se requiere; decía un maestro, "muchas veces la solución más simple no es la mejor", en este caso aplica esta frase, se tuvo que programar más, pero a la hora de la captura solo hay que referenciar una celda y Excel hace el resto.

Gracias por sus comentarios

Atentamente

Héctor Cornejo Cravioto

Piensa diferente... y vivirás mejor

publicado
En 12/5/2018 at 21:39 , johnmpl dijo:

Héctor... Revisaste las dos soluciones que propuse?  Comenta si te sirven.  Saludos!

Hola!!

SI, revisé tus opciones, y en mi caso en específico no aplican, te comento; los valores en mi archivo no se encuentran en filas y columnas contiguas donde pueda definir una matriz, además algunos valores se repiten, es decir dos o más clientes pueden tener el mismo saldo inicial que es el dato que busco; tal vez si adjunto un archivo parecido a mi archivo de trabajo quedaría más claro, inicialmente no lo adjunté porque la información que se maneja es de índole confidencial y tengo prohibido compartir cualquier dato, así que eliminé la información relevante y puse valores irreales (aunque típico s de un mes); espero que con este archivo quede claro el manejo de información que hago.

2018-04 Reportes para socios.xlsm

publicado
Hace 1 hora, hectorcc_18 dijo:

y en mi caso en específico no aplican

????:angry::angry::angry:

@hectorcc_18, despues de 8 Post que te contestaron nuestros amigos que tan amablemente colaboran aquí con solo el fin de ayudar dices esto???

POR ESO EXPLÍCATE EXACTAMENTE TU CASO, PARA NO HACER TRABAJAR INNECESARIAMENTE A LOS COLABORADORES.

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.