Imprimir página | Cerrar ventana

Ayuda Transponer datos

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85768
Fecha de impresión: 26/Marzo/2026 a las 18:58


Tema: Ayuda Transponer datos
Publicado por: Prizionero
Asunto: Ayuda Transponer datos
Fecha de publicación: 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



Respuestas:
Publicado por: Prizionero
Fecha de publicación: 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


Publicado por: lbauluz
Fecha de publicación: 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


Publicado por: Prizionero
Fecha de publicación: 01/Febrero/2021 a las 23:22
Al final lo deje asi, gracias

-------------
MSN



Imprimir página | Cerrar ventana