Excel: ¿Cómo combinar celdas automáticamente?
Quiero saber si existe una manera para combinar una celda, con la de la derecha automáticamente, en cada celda por separado en una columna, si se escribe en ella.
Si no se escribe en la celda izquierda, no se combina, y se puede escribir en la celda de la derecha.
Solo si hay escrito algo en la celda derecha, se puede escribir en la de la izquierda, sin combinar.
Columna izq - columna der
Celda izq - celda der
C. Vacía - c. Vacía
C.llena =>combinar con c. Der (auto)
C. Vacía - c. Llena (no combinar)
Si c.der esta llena, c. Der se puede llenar y no combinar:
C.llena - c. Llena
*Se me ocurre hacer una regla que active una macro. Y fórmula de "si".
Lo que no se muy bien es el lenguaje. Solo esta Está idea.
1 respuesta
Para poder conseguir lo que quieres te valdrá este código:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B:B")) Is Nothing Then If Target.Offset(0, 1).Value = "" Then Range(Target, Target.Offset(0, 1)).Select Selection.Merge With Selection 'PONER AQUI EL RESULTADO DE LA GRABADORA End With End If End If End Sub
Deberás poner la macro en la hoja donde quieras que se ejecute y realacionada con el evento Worksheet_change
En este ejemplo, la macro se ejecuta cuando cambia el valor de cualquier celda de la columna B. Si te interesa otra columna deberás cambiar ("B:B") por lo que te interese
Si en la columna C no hay valor, se combina, sinó no.
Por último, utiliza la grabadora de macros y combina 2 celdas con el formato que te interese, luego copias lo que te haya dado entre With Selection y End With en el lugar que te he indicado
Hola Gregori, Muchas gracias por la ayuda,
hice exactamente lo que me has explicado, pero me aparece este error de compilación.
y este fue el código de la Macro que grabé:
Sub Macro1_Combinar_y_Formato() ' ' Macro1_Combinar_y_Formato Macro ' Combina la celda con la celda derecha y cambia el formato alinear a la izquierda. ' ' Range("D:E").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With End Sub
Y en esta parte:
Range("D:E").Select
Aparecían los números de celda, y los borré, quizás eso estuvo mal... ("D29:E29")
hice la combinación en las celdas "29" como ejemplo.
Muchas gracias por la ayuda.
No cambie los números del rango.
Y en el codigo Borré Sub Combinar() y el ultimo End sub.
Todo bien, hasta que quise borrar texto.
Me aparece ese error y puse "Depurar"
Y marca en amarillo lo siguiente del código:
If Target.Offset(0, 1).Value = "" Then
Si borro, por que quiero cambiar la Celda que se combino,
Se debería por defecto "separar" de la que se combino automáticamente y volver al formato original de celda. (En mi caso ocupo "Todos los Bordes") Si no queda la celda con borde blanco
Eso falto.
Te has liado un poco, prueba esto:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D:D")) Is Nothing Then If Target.Offset(0, 1).Value = "" Then Range(Target, Target.Offset(0, 1)).Select Selection.Merge With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext End With End If End If End Sub
Hola Gregori Acabo de probar este código, se soluciona que no combine la celda de grabación de la macro...
El dilema que continua es que cuando se borra la celda que se combinó, se vuelve a combinar con la tercera hacia la derecha así sucesivamente...
La idea es que se automatice también la separación y el formato de celda de los bordes que se borran. (eso ocurre siempre en excel, cada vez que se separa una celda combinada, se borra el borde)
Acción: Borrar celda izquierda => separar + volver cursor a la izquierda + rellenar celdas con "todos los bordes"
Gracias!
Pues para esto deberás añadir una macro que su utilidad será la de borrar.
Puedes crear un shortcut para que te sea más fácil
Sub Unmerge() Application.EnableEvents = False Selection.Unmerge With Selection .ClearContents .Borders.LineStyle = xlContinuous End With Application.EnableEvents = True End Sub
Ok, Lo puse a continuación pero no sucede nada,
¿O debo colocarlo dentro del Código? si es así, ¿En qué lugar? Para no cometer más errores.
O lo que quieres decir es que debo grabar una macro nueva, ¿esta vez borrando y cambiando el formato?
Muchísimas Gracias Gregori
Son dos macros diferentes, no debes mezclarlas. Crea 2 botones y asignale a cada uno de ellos una de las macros.
Te dejo un enlace donde explica como crear un boton y asignarle una macro
http://www.exceleinfo.com/ejecutar-macro-desde-un-botn-un-control-o-una-forma-en-excel-vba/
Pero no quiero Botones,
esto tiene que ser Automático.
Cuando se borra, en vez de separar las celdas, sigue combinando hacia la derecha... infinitamente...
Sigamos puliendo :-)
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D:D")) Is Nothing Then If Target.Offset(0, 1).Value = "" Then Range(Target, Target.Offset(0, 1)).Select Selection.Merge With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext End With End If End If If ActiveCell.Value = "" Then Selection.UnMerge ActiveCell.Offset(0, 0).Select End If End Sub
Hola Gregori.
Muy bien, funciona para separar las celdas, pero aun no logro que vuelva el formato.
que se puede hacer?
Muchas gracias
Según lo que grabaste, prueba este:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D:D")) Is Nothing Then If Target.Offset(0, 1).Value = "" Then Range(Target, Target.Offset(0, 1)).Select Selection.Merge With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext End With End If End If If ActiveCell.Value = "" Then Selection.UnMerge With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(0, 0).Select End If End Sub
Gracias,
lo probé, pero no cambia nada,
y encontré otro problema,
cuando se escribe nuevamente en la celda ya combinada, la vuelve a combinar hacia la siguiente celda a la derecha, eso no debería pasar...
Gracias ... otra vez...
El segundo error con esta se arregla:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D:D")) Is Nothing Then If Target.Offset(0, 1).Column = 5 Then If Target.Offset(0, 1).Value = "" Then Range(Target, Target.Offset(0, 1)).Select Selection.Merge With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext End With End If End If End If If ActiveCell.Value = "" Then Selection.UnMerge With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(0, 0).Select End If End Sub
De todos modos, cuando borras el valor de la celda y quieres que te aplique un formato específico para las celdas descombinadas, tienes que grabar una macro y decombinar y aplicar el formato que necesites y cambiar este trozo del código
With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With
- Compartir respuesta