Saltar al contenido

Macro para trasponer Datos por campo clave


Recommended Posts

publicado

Buenas, tengo un fichero con un montón de registros (yo os paso un ejemplo). Donde los datos vienen estructurados por orden de la siguiente manera: A, A1, A2 / a veces solo A y A1; y otras solo la A

Por ejemplo:

Clave  Nivel Cantidad
1 A 50
1 A1 25
1 A2

25

Y lo que quiero es esto:

Clave  Nivel Cantidad A1 A2
1 A 50 25 25
1 A1 25    
1 A2 25    

De modo que la A es la raíz y ese, A1 y A2 son ramificaciones. Necesito añadir al lado de esa A, el dato de la cantidad de A1 y A2

No se me ocurre cómo hacerlo.

Os paso ejemplo por si me podéis echar un cable. 

Muchas gracias!

Ejemplo_FORO.7z

publicado
Private Sub CommandButton1_Click(): Application.ScreenUpdating = False

With Hoja1
    .Range("D2", "E" & .Range("A" & .Rows.Count).End(xlUp).Row).ClearContents
    ' Aplicar filtro avanzado en columna A y copiar resultados a columna R
    .Range("A:A").AdvancedFilter 2, , .Range("R1"), 1

    ' Inicializar una variable para almacenar la clave
    Dim clave As Variant

    ' Recorrer las filas desde la segunda fila hasta la última fila en columna R
    For x = 2 To .Range("R" & .Rows.Count).End(xlUp).Row
        clave = .Cells(x, 18) ' Obtener el valor de la celda en la columna R

        ' Recorrer la columna A para buscar coincidencias con la clave
        For Each buscado In .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
            If buscado = clave And .Cells(buscado.Row, 2) = "A" Then
                posicion = buscado.Row ' Almacenar la posición de la coincidencia
            End If
            ' Verificar las condiciones y realizar las acciones necesarias
            If buscado = clave And .Cells(buscado.Row, 2) = "A1" Then
                .Cells(posicion, 4) = .Cells(buscado.Row, 3) ' Copiar valor a columna D
            ElseIf buscado = clave And .Cells(buscado.Row, 2) = "A2" Then
                .Cells(posicion, 5) = .Cells(buscado.Row, 3) ' Copiar valor a columna E
                Exit For ' Salir del bucle una vez que se encuentre una coincidencia A2
            End If

        Next
    Next x

    ' Eliminar la columna 18 (columna R)
    .Columns(18).Delete
End With
End Sub

 

Ejemplo_FORO.xlsm

publicado
hace 10 horas, JSDJSD dijo:
Private Sub CommandButton1_Click(): Application.ScreenUpdating = False

With Hoja1
    .Range("D2", "E" & .Range("A" & .Rows.Count).End(xlUp).Row).ClearContents
    ' Aplicar filtro avanzado en columna A y copiar resultados a columna R
    .Range("A:A").AdvancedFilter 2, , .Range("R1"), 1

    ' Inicializar una variable para almacenar la clave
    Dim clave As Variant

    ' Recorrer las filas desde la segunda fila hasta la última fila en columna R
    For x = 2 To .Range("R" & .Rows.Count).End(xlUp).Row
        clave = .Cells(x, 18) ' Obtener el valor de la celda en la columna R

        ' Recorrer la columna A para buscar coincidencias con la clave
        For Each buscado In .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
            If buscado = clave And .Cells(buscado.Row, 2) = "A" Then
                posicion = buscado.Row ' Almacenar la posición de la coincidencia
            End If
            ' Verificar las condiciones y realizar las acciones necesarias
            If buscado = clave And .Cells(buscado.Row, 2) = "A1" Then
                .Cells(posicion, 4) = .Cells(buscado.Row, 3) ' Copiar valor a columna D
            ElseIf buscado = clave And .Cells(buscado.Row, 2) = "A2" Then
                .Cells(posicion, 5) = .Cells(buscado.Row, 3) ' Copiar valor a columna E
                Exit For ' Salir del bucle una vez que se encuentre una coincidencia A2
            End If

        Next
    Next x

    ' Eliminar la columna 18 (columna R)
    .Columns(18).Delete
End With
End Sub

 

Ejemplo_FORO.xlsm 28.66 kB · 1 descarga

Muchísimas, gracias! Funciona a la perfección!

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
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
    • Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
    • Mil gracias, en verdad todo apoyo es super agradecido,   Su aporte y comentarios valen mucho para in servidor, y tiene razon esperare a conocer si alguien comparte alguna otra manera,   Gracias!!! (y)
  • 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.