1 votos

VBA Excel - Comprobación de la similitud de texto en la misma columna

Imagen 1

Imagen 2

Estoy tratando de comprobar la similitud de texto para el texto en el "Line-Side Loc" en la columna J. Si el texto de la columna J no es el mismo, me gustaría que se aplicara un borde inferior grueso de las columnas A-J para anunciar la diferencia. Si el texto es el mismo, me gustaría que fuera una línea fina. La imagen 1 es el aspecto actual cuando la macro termina. Lo ideal sería que se viera como la Imagen 2.

Este es mi código y donde me gustaría insertar el nuevo código para añadir las líneas gruesas Code

No sé cómo escribir este código. Cualquier ayuda será apreciada.

Gracias.

Actualmente, esto es lo que ocurre. Con el código que tengo a continuación. Current Outcome Current Code

1voto

polyglot Puntos 27

Esto se consigue fácilmente con el formato condicional.

  1. Hacer la celda activa J2
  2. Abrir el cuadro de diálogo de formato condicional
  3. Seleccione Use Formula for Conditional Formatting
  4. Escriba la fórmula =$J2<>$J1 y establece el borde a tu gusto
  5. Ajuste el Applies To celdas para que el subrayado vaya a las celdas que quieras

Excel Conditional Formatting

1voto

Ron Rosenfeld Puntos 418

Si le parece bien un borde negro fino, entonces el formato condicional funcionará. Si realmente quiere un grueso borde negro, necesitará un código de evento VBA, ya que no puede modificar el grosor de un borde en la propiedad de borde del formato condicional.

Para introducir esta macro activada por eventos, haga clic con el botón derecho del ratón en la pestaña de la hoja. Seleccione "Ver código" en el menú desplegable del botón derecho. A continuación, pegue el código siguiente en la ventana que se abre.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim dataRange As Range
    Dim v As Variant, I As Long

Set dataRange = Range(Cells(2, 2), Cells(100, 10)) 'change as needed
If Not Intersect(Target, dataRange) Is Nothing Then
    With dataRange
        v = .Columns(9)
        For I = 1 To UBound(v) - 1
            If v(I, 1) <> v(I + 1, 1) Then
                With .Rows(I).Borders(xlEdgeBottom)
                    .LineStyle = xlContinuous
                    .Color = vbBlack
                    .Weight = xlThick
                End With
            Else
                .Rows(I).Borders(xlEdgeBottom).LineStyle = xlNone 'or whatever you want for the default border
            End If
        Next I
    End With
End If
End Sub

Edición: para tener una macro autónoma y no activada por eventos
entrar en un módulo regular
puede llamarla desde otra macro, o activarla con un botón, o iniciarla manualmente

Option Explicit
Sub LineIT()
    Dim WS As Worksheet
    Dim dataRange As Range
    Dim v As Variant, I As Long

Set WS = ThisWorkbook.Worksheets("Sheet4") 'or whatever workbook and worksheet the table you which to process is located

With WS
    Set dataRange = Range(.Cells(2, 1), Cells(.Rows.Count, 10).End(xlUp)) 'change as needed
    With dataRange
        v = .Columns(10)
        For I = 1 To UBound(v) - 1
            If v(I, 1) <> v(I + 1, 1) Then
                With .Rows(I).Borders(xlEdgeBottom)
                    .LineStyle = xlContinuous
                    .Color = vbBlack
                    .Weight = xlThick
                End With
            Else
                .Rows(I).Borders(xlEdgeBottom).LineStyle = xlNone 'or whatever you want for the default border
            End If
        Next I
    End With
End With
End Sub

enter image description here

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X