** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Ayuda Transponer datos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAyuda Transponer datos

 Responder Responder
Autor
Mensaje
Prizionero Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 01/Diciembre/2011
Localización: Chile
Estado: Sin conexión
Puntos: 19
Enlace directo a este mensaje Tema: Ayuda Transponer datos
    Enviado: 27/Enero/2021 a las 17:38
Buenas tardes,
favor necesito de vuestra ayuda.

necesito transponer datos horizontal a vertical en exel pero con codigo vb ya que tabla es grande.
me explico:

tengo un plan de trabajo mensual en exel algo asi,

(estos datos son fijos)  /                                                  (dias del mes hasta el 31)
Encabezado -----> -sector-ubicacion-tipo-empresa -        1-2-3-4-5-6.....
   datos---------->  -  a     -  zona 1 - limpiar - particular -   0-0-1-0-0,5-1...
                            -    b   -  zona 2 - limpiar  - particular-    1-0-0-0-1-0...
                            -    c   - zona 5 -  cortar    - particular -   0-0-0-0-0-1...

Asi esta conformada la tabla en exel, lo que necesito es copiar de forma vertical los dias que contengan valor. (en vez de cero esa celda esta vacia)
ejemplo como deberia quedar:

sector-ubicacion  -tipo  -   empresa -   Dia - cantidad  
   a     -  zona 1 -   limpiar - particular -     3 -     1 
   a     -  zona 1 -   limpiar - particular -     5 -     0,5 
   a     -  zona 1 -   limpiar - particular -     6 -     1 
   b     -  zona 2 -   limpiar - particular-      1 -    1
   b     -  zona 2 -   limpiar - particular-      5 -    1
   c      - zona 5 -   cortar  - particular -      6-    1
....y asi sucesivamente, entonces como se ve en el ejemplo se repiten los datos fijos hacia abajo con su respectivo dia siempre y cuando tenga algun valor de lo contrario pasa al siguiente...

Espero haberme explicado bien y estoy atento a su ayuda..

Gracias
MSN
Arriba
Prizionero Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 01/Diciembre/2011
Localización: Chile
Estado: Sin conexión
Puntos: 19
Enlace directo a este mensaje Enviado: 27/Enero/2021 a las 20:25
parece esta complicado,
bueno, buscando buscando di con un codigo el cual modifique y quedo algo asi:

Sub TransposeInsertRows()
'transponerdatos
    Dim xRg As Range
    Dim i As Long, j As Long, k As Long
    Dim x As Long, y As Long
    Set xRg = Application.InputBox _
    (Prompt:="Range Selection...", _
    Title:="traspaso", Type:=8)
    Application.ScreenUpdating = False
    x = xRg(1, 1).Column + 8
    y = xRg(1, xRg.Columns.Count).Column
    For i = xRg(xRg.Rows.Count, 1).Row To xRg(1, 1).Row Step -1
        If Cells(i, x) <> "" And Cells(i, x + 1) <> "" Then
            k = Cells(i, x - 2).End(xlToRight).Column
            If k > y Then k = y
            For j = k To x + 1 Step -1
                Cells(i + 1, 1).EntireRow.Insert
                With Cells(i + 1, x - 2)
                    .Value = .Offset(-1, 0)
                    .Offset(0, 1) = .Offset(-1, 1)
                    .Offset(0, 2) = Cells(i, j)
                End With
                Cells(i, j).ClearContents
            Next j
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

queda asi:
sector-ubicacion  -tipo  -   empresa -   cantidad -Dia 
   a     -  zona 1 -   limpiar - particular -     0       
   a     -  zona 1 -   limpiar - particular -     0    
   a     -  zona 1 -   limpiar - particular -     0    
   a     -  zona 1 -   limpiar - particular-      0,5    
   a     -  zona 1 -   limpiar - particular-      1
   b      - zona 2 -   limpiar - particular -    1  
   b      - zona 2 -   limpiar - particular -    0
   b     - zona 2 -   limpiar - particular -     0
   b      - zona 2 -   limpiar - particular -    0
   b     - zona 2 -   limpiar - particular -     1
   b      - zona 2 -   limpiar - particular -    0
   c      - zona 5 -   cortar  - particular -    0
   c      - zona 5 -   cortar  - particular -    0
   c      - zona 5 -   cortar  - particular -    0
   c      - zona 5 -   cortar  - particular -    0
   c      - zona 5 -   cortar  - particular -    0
   c      - zona 5 -   cortar  - particular -    1


solo falta que agregue los dias en los cuales tiene valor mayor a 0..

gracias y sigo atento a su ayuda..


MSN
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Alcalá Meco
Estado: Sin conexión
Puntos: 3637
Enlace directo a este mensaje Enviado: 27/Enero/2021 a las 22:08
Y por que no lo dejas como esta y solo borras las filas que tengan 0 en cantidad-dia?

Lo mas facil es ir abajo del todo y en un bucle inverso ir borrando todos los que tengan valor 0

Con eso te vale lo que tienes y solo necesitas annadir un bucle de borrado al final

Un saludo.

Luis
El Búho es un pajarraco
Arriba
Prizionero Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 01/Diciembre/2011
Localización: Chile
Estado: Sin conexión
Puntos: 19
Enlace directo a este mensaje Enviado: 01/Febrero/2021 a las 23:22
Al final lo deje asi, gracias
MSN
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable