Macro que se pueda Combinar y Centrar

Me podrían apoyar con la siguiente macro por favor, tengo datos que comienzan en la celda "B1" terminando en la misma fila pero de columna variable.

Lo que estoy tratando de hacer es leer toda la fila y buscar celdas que contengan el mismo valor, los que tengan el contenido similar, se deberán combinar en la fila anterior; como ejemplo la imagen:

Hasta ahora solo eh logrado una macro que lo hace de manera vertical:

Sub CombinaryCentrar()
Dim rng As Range
MergeCells:
For Each rng In Selection
If rng.Value = rng.Offset(1, 0).Value And rng.Value <> "" Then
Range(rng, rng.Offset(1, 0)).Merge
Range(rng, rng.Offset(1, 0)).HorizontalAlignment = xlCenter
Range(rng, rng.Offset(1, 0)).VerticalAlignment = xlCenter
GoTo MergeCells
End If
Next
End Sub

¿alguna idea de que otra manera lo puedo llevar a cabo?

Respuesta
1

Leer toda la fila y buscar celdas que contengan el mismo valor

¿A qué te refieres con "contengan el mismo valor"?

Puedes poner 2 imágenes, una con la información original y otra con la información que te gustaría de resultado.

Gracias nuevamente Dante por tu tiempo:

Ok, te anexo la imagen con la información original y una breve explicación:

Y Anexo la imagen de como sería el resultado después de ejecutar la macro :

Espero quede más claro con estos ejemplos, quedo atento a tus indicaciones Dante. ¡Gracias!

¿El dato "Z1" en la fila1 no existe en la imagen1?

Entonces quieres que la macro, ¿primero obtenga el dato "Z1"?

Pero en los datos en la fila 2 debería existir un patrón, por ejemplo:

Carro Z1

Azul Z1

Barco Z1

Es decir, entre la palabra y el dato "Z1" hay un espacio. Entonces la macro puede identificar el dato en común.

Si ordenas tus datos de alguna manera, los procesos posteriores serán más fáciles. Si tus datos están desorganizados, las macros, las fórmulas, en general todo, será más complicado.

Entonces organiza tus datos para que tengan un patrón en común y vuelves a poner aquí las 2 imágenes.

Los datos no se pueden homologar, ya que desde inicio vienen de diferente manera tratare de con una macro hacer este proceso de homologación. Para este caso pondré un patrón para que sea más óptima la solución de la macro.

Datos entrada:

Datos Salida:

Muchas gracias!

¿Entonces vas a considerar el espacio? ¿Entre la palabra "carros " y el código "Z1"?

Si no puedes homologar y poner el espacio, ¿entonces podemos utilizar la "Z" para saber dónde termina la palabra "carros" y en dónde empieza el código "Z1"?

Lo que no entiendo es por qué pones este ejemplo: "valor LIKE "*Z1*", a qué te refieres con eso? o o acaso tú ya identificas que de A2 a C2 los tres textos pertenecen a Z1.

Creo que estás obviando algo que yo no estoy viendo en tus imágenes.

Según tu primer imagen las celdas A1, B1, C1, D1... están vacías. Entonces cómo sabes que para las celdas A1, ¿B1 y C1 va el valor Z1?

Hay otra cosa que tampoco he entendido, quieres que la macro obtenga el valor Z1, Z2... ¿Z90 y lo ponga en las celdas de la fila 1?

Respondo tus dudas.

¿Entonces vas a considerar el espacio? ¿Entre la palabra "carros " y el código "Z1"? 

Es correcto, voy a considerar ese espacio.

Si no puedes homologar y poner el espacio, ¿entonces podemos utilizar la "Z" para saber dónde termina la palabra "carros" y en dónde empieza el código "Z1"?

Voy a homologar con el espacio, ya que necesito identificar la letra junto con el número

Lo que no entiendo es por qué pones este ejemplo: "valor LIKE "*Z1*", a qué te refieres con eso? o o acaso tú ya identificas que de A2 a C2 los tres textos pertenecen a Z1.

No se mucho de macros, pero lo único que logre es que me diga que celdas contienen Z1, por eso el like ya que fue la única forma que encontré; lo que hago es un if por cada Z1, Z2, etc..

Creo que estás obviando algo que yo no estoy viendo en tus imágenes.

Según tu primer imagen las celdas A1, B1, C1, D1... están vacías. Entonces cómo sabes que para las celdas A1, ¿B1 y C1 va el valor Z1?

En la primer imagen muestro los datos como los tengo, solo son los encabezados que se encuentran ubicados de A2 hasta A(columna variable). La fila A1 se muestra vacía ya que no tengo datos ahí, en la segunda imagen muestro datos en la celda A1 hasta C1 combinados y centrados, ya que es lo que necesito que se muestren de esa manera, cuando encuentre celdas que tengan en su texto en común Z90 en la fila superior combinara las celdas hasta donde ya no coincida el dato.

Espero haber sido más explicito. Gracias.

Faltó esta duda:

Hay otra cosa que tampoco he entendido, quieres que la macro obtenga el valor Z1, Z2... ¿Z90 y lo ponga en las celdas de la fila 1?

Perdona tantas dudas, para ti es muy claro lo que quieres, pero sigo sin entender qué quieres lograr exactamente.

Para nada Dante, al contrario quién esta apenado soy yo por no darme a entender.

Hay otra cosa que tampoco he entendido, quieres que la macro obtenga el valor Z1, Z2... ¿Z90 y lo ponga en las celdas de la fila 1?

Es correcto, y las celdas de la fila 2 donde contiene Z1 que en la 1 se muestre Z1 con merge abarcando las celdas que contengan el valor.

Prueba lo siguiente:

Sub CombinarCentrar()
  Dim ant As String, c As Range, ini As Long, fin As Long
  '
  ant = Mid(Range("A2"), InStrRev(Range("A2"), " ") + 1)
  ini = 1
  '
  For Each c In Range("A2", Cells(2, Columns.Count).End(2))
    If ant <> Mid(c, InStrRev(c, " ") + 1) Then
      fin = c.Column - 1
      With Range(Cells(1, ini), Cells(1, fin))
        .Merge
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Value = ant
      End With
      ini = c.Column
    End If
    ant = Mid(c, InStrRev(c, " ") + 1)
  Next
End Sub

Me funciono perfecto. Muchas gracias por tu ayuda Dante.

Te luciste con la solución. :)

Encantado de ayudarte, gra cias por comentar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas