Macro para unir celdas de acuerdo a repetición de datos

Necesito una macro que me COMBINE 1 fila de acuerdo a la repetición de otra fila, por ejemplo adjunto un excel para verlo mejor...

1 Respuesta

Respuesta
1

¿Y el archivo?

ejemplo.xls

Necesito que en el ejemplo.xls la columna R donde esta el STOCK se combine y centre de acuerdo a la columna C que se repite. Y también se combine y se centre la columna C.

Saludos y gracias por tu tiempo.

¿Puedes ser más especifico?, ¿Y poner un ejemplo del resultado que esperas obtener?

Hola James, disculpa estoy abrumado con esta solución ahí te volví a poner el ejemplo con el resultado en la columna S.

https://takeafile.com/?f=tabosevuyi 

Saludos.

Francisco.

Lo que quieres es combinar las celdas de la columna stock en las que se repita el sku y la cantidad, eso es fácil, este es el resultado de la macro y abajo de la imagen esta la macro

Sub combinar_celdas()
With Range("a1").CurrentRegion
    filas = .Rows.Count:    col = .Columns.Count
    Set datos = Range("a2").Resize(filas, col)
    Set tabla = Range("a2").Columns(col + 3).Resize(filas, 3)
End With
With datos
    Union(.Columns(3), .Columns(col - 1)).Copy: tabla.PasteSpecial
    With tabla
        For i = 1 To filas
            .Cells(i, 3) = Join(Application.Transpose(Application.Transpose(.Rows(i))), ",")
        Next i
    Set tabla2 = .Columns(5).Resize(filas, 1)
    End With
    With tabla2
        .Value = tabla.Columns(3).Value
        .RemoveDuplicates Columns:=1
        filas = .CurrentRegion.Rows.Count
        For i = 1 To filas
            cadena = .Cells(i)
            cuenta = WorksheetFunction.CountIf(tabla.Columns(3), cadena)
            If cuenta > 1 Then
                indice = WorksheetFunction.Match(cadena, tabla.Columns(3), 0)
                With datos.Cells(indice, col).Resize(cuenta, 1)
                    .Merge
                    .HorizontalAlignment = xlCenter
                    .Value = tabla.Cells(indice, 2)
                End With
            End If
        Next i
    End With
End With
tabla.Clear: tabla2.Clear
Set tabla = Nothing: Set datos = Nothing: Set tabla2 = Nothing
End Sub

disculpa pero la pego en una macro y le doy ejecutar o tengo que seleccionar alguna columna para que se ejecute. Saludos.

Listo entendido que tengo que seleccionar las dos columnas como mostrás en la foto. Muchas gracias por la SOLUCIÓN, todo un experto. Saludos. Francisco.

Hola James, cuando lo selecciono las columnas V W para ejecutar la macro y da error, no se si estoy haciendo algo mal. Saludos.

Sube el archivo para ver que esta pasando

Hola James, el archivo es pesado porque tengo todas los productos con sus variaciones:
https://takeafile.com/?f=fepeyijeka 
Saludos.

El problema es que quieres usar la macro hecha para el primer archivo que subiste que tiene una estructura muy diferente a este nuevo arhcio que subiste, la amcro se tiene que modificar y hacer unos ajustes en tu hoja, primero tienes que insertar una columna entre la ultima columna ES (stock)y la tabla que tienes al lado, de no hacerlo la macro puede (no aseguro que pase)que te de problemas, la segunda tienes demasiadas fórmulas en la hoja esto hace que la macro recalcule cada que la macro usa la hoja para los cálculos lo cual alentá la macro e interfiere en su funciomaniento, esta nueva macro desactiva los cálculos y los vuelve a activar una vez que acaba, repito primero inserta una columna enseguida de la columna S(Stock) y luego corres la macro, por cierto tu no escoges nada la macro ya tiene programadas sobre que columnas trabajar, los únicos datos que cambiarías serian a3, ap3 o .columns(3) (C), .columns(19)(S)

Sub combinar_celdas()
Application.Calculation = xlCalculationManual
With Range("a3").CurrentRegion
    filas = .Rows.Count:    col = .Columns.Count
    Set datos = Range("a3").Resize(filas, col)
    Set tabla = Range("ap3").Resize(filas, 3)
End With
With datos
    Union(.Columns(3), .Columns(19)).Copy: tabla.PasteSpecial
    With tabla
        For i = 1 To filas
            .Cells(i, 3) = Join(Application.Transpose(Application.Transpose(.Rows(i))), ",")
        Next i
    Set tabla2 = .Columns(5).Resize(filas, 1)
    End With
    With tabla2
        .Value = tabla.Columns(3).Value
        .RemoveDuplicates Columns:=1
        filas = .CurrentRegion.Rows.Count
        For i = 1 To filas
            cadena = .Cells(i)
            cuenta = WorksheetFunction.CountIf(tabla.Columns(3), cadena)
            If cuenta > 1 Then
                indice = WorksheetFunction.Match(cadena, tabla.Columns(3), 0)
                With datos.Cells(indice, col + 1).Resize(cuenta, 1)
                    .Merge
                    .HorizontalAlignment = xlCenter
                    .Value = tabla.Cells(indice, 2)
                End With
            End If
        Next i
    End With
End With
tabla.Clear: tabla2.Clear
Set tabla = Nothing: Set datos = Nothing: Set tabla2 = Nothing
Application.Calculation = xlCalculationAutomatic
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas