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
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.
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.
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
- Compartir respuesta