Necesito depurar una Macro que compara datos

Hice una macro que me compara informacion entre dos celdas, pero creo que se puede depurar espero me ayuden.
Rapidamente comento: tengo una base de 5000 datos y unicamente en 4 necesito identificarlos, para eso la macro, me agrega un renglon y me los identifica agregando la terminacion "B".
Aqui esta la macro
Gracias de antemano
Sub comparar()
'
' comparar Macro
'
' Acceso directo: Ctrl+Mayús+M
'
ActiveSheet.Range("b11").Select
While ActiveCell.Value <> ""
If Mid(ActiveCell, 1, 9) = Mid(ActiveCell.Offset(1, 0), 1, 9) Then
ActiveCell.Offset(1, 0).Select
Else
    If Mid(ActiveCell, 1, 9) = "05-01-401" Then
        ActiveCell.Offset(1, 1).EntireRow.Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(0, 1).Value = "05-01-401B"
    End If
    If Mid(ActiveCell, 1, 9) = "05-07-201" Then
        ActiveCell.Offset(1, 1).EntireRow.Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(0, 1).Value = "05-07-201B"
    End If
End If
ActiveCell.Offset(1, 0).Select
Wend
ActiveSheet.Range("b11").Select
While ActiveCell.Value <> ""
If Mid(ActiveCell, 1, 9) = Mid(ActiveCell.Offset(1, 0), 1, 9) Then
ActiveCell.Offset(1, 0).Select
Else
    If Mid(ActiveCell, 1, 9) = "05-07-201" Then
        ActiveCell.Offset(1, 1).EntireRow.Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(0, 1).Value = "05-07-201B"
    End If
End If
ActiveCell.Offset(1, 0).Select
Wend
ActiveSheet.Range("b11").Select
While ActiveCell.Value <> ""
If Mid(ActiveCell, 1, 9) = Mid(ActiveCell.Offset(1, 0), 1, 9) Then
ActiveCell.Offset(1, 0).Select
Else
    If Mid(ActiveCell, 1, 9) = "05-08-201" Then
        ActiveCell.Offset(1, 1).EntireRow.Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(0, 1).Value = "05-08-201B"
    End If
End If
ActiveCell.Offset(1, 0).Select
Wend
ActiveSheet.Range("b11").Select
While ActiveCell.Value <> ""
If Mid(ActiveCell, 1, 9) = Mid(ActiveCell.Offset(1, 0), 1, 9) Then
ActiveCell.Offset(1, 0).Select
Else
    If Mid(ActiveCell, 1, 9) = "05-08-301" Then
        ActiveCell.Offset(1, 1).EntireRow.Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(0, 1).Value = "05-08-301B"
    End If
End If
ActiveCell.Offset(1, 0).Select
Wend
End Sub

1 respuesta

Respuesta
1
Sin entrar a armar una nueva macro, te dejo algunas pautas a considerar: veo que tenés 3 bucles para el mismo rango, entonces utilizá 1 solo, donde realizarás todas las comparaciones
While ActiveCell.Value <> ""
If Mid(ActiveCell, 1, 9) = Mid(ActiveCell.Offset(1, 0), 1, 9) Then
ActiveCell.Offset(1, 0).Select
Else
    If Mid(ActiveCell, 1, 9) = "05-01-401" or Mid(ActiveCell, 1, 9) = "05-07-201" Then
       dato = Mid(ActiveCell, 1, 9)
        ActiveCell.Offset(1, 1).EntireRow.Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(0, 1).Value = dato & "B"
    End If
End If
ActiveCell.Offset(1, 0).Select  'atención que esto ya está en el primer if-controlar
Wend
Este es un ejemplo, donde podés colocar todos los criterios separados con OR
Si tendrás distintas opciones según el criterio , te convendrá utilizar SELECT CASE (ver en la Ayuda algún ejemplo)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas