Como eliminar celdas que contenga un valor determinado con VBA

Necesito eliminar celdas de una columna de una hoja de excel que contiene una serie de datos, estos pueden ser repetidos, y el valor a borrar se determina en una celda fija de otra hoja, tengo la siguiente macro:

Sub elimnar_celdas_filas_vacias()
Dim tipo As Integer
Dim criterio As String
Dim check As Boolean
Dim celda As Range

tipo = 2
criterio = Hoja1.Cells(16, 7)
line1:
For Each celda In Hoja12.Range("A:A") 'Rng.Address, Cells(Rows.Count, Rng.Column).End(xlUp).Address)

Select Case tipo
Case 2

If celda = criterio Then
celda.EntireRow.Delete
GoTo line1
End If

End Select
Next
Hoja1.Cells(16, 7).ClearContents
End Sub

Pero cuando se ejecuta me elimina todos los valores que son iguales a la celda determinada, y necesito que solo elimine uno, es para llevar el registro de salida y entrada de un material

Por favor, ¿alguien sabe que puedo hacer para que solo elimine un dato y deje los demás?

Respuesta
1

.

Hola, Sandra

En tu rutina agregué una instrucción (entre '***) que sale del ciclo cuando elimina la primera fila coincidente.

Pero también me tomé el atrevimiento de anular algunas líneas que me parecieron redundantes.

Les puse un comentario al lado para que veas por qué sugiero hacerlo. Después decidirás si lo dejas así o le quitas los apóstrofes que le agregué.

Sub elimnar_celdas_filas_vacias()
Dim tipo As Integer
Dim criterio As String
Dim check As Boolean
Dim celda As Range
'tipo = 2
criterio = Hoja1.Cells(16, 7)
'line1:
For Each celda In Hoja12.Range("A:A") 'Rng.Address, Cells(Rows.Count, Rng.Column).End(xlUp).Address)
    'Select Case tipo (Al tener un único caso que, además, siempre será = a 2, equivale a tener sólo el IF)
    'Case 2
    If celda.Value = criterio Then
        celda.EntireRow.Delete
        '***
        Exit For 'con esta instrución deja de eliminar lineas
        '***
        'GoTo line1 ' (La estructura For...Next, precisamente vuelve debajo de line1 al llegar a Next)
    End If
    'End Select
Next
Hoja1.Cells(16, 7).ClearContents
End Sub

Espero haberte ayudado.

Saludos

Fernando

.

1 respuesta más de otro experto

Respuesta
1

:)

Hola! Sandra

Imagina que en tres celdas de la columna A de la hoja que llamas Hoja12 se cumple el "criterio".

Entonces y como dices que deseas "eliminar solo uno": ¿Cuál de ellas deseas eliminar? ¿La primera, la segunda o la tercera?...
Saludos, Mario R.

.

:)

la primera, y que me deje las otras dos 

:)

En ese caso, Sandra, ni tan siquiera requieres de un bucle. Es suficiente con:

Sub eliminar_celdas_filas_vacias_2()
Dim C As Range
Set C = Hoja12.Columns("A").Find(Hoja1.Cells(16, 7), _
  LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext)
If Not C Is Nothing Then C.EntireRow.Delete
End Sub

¿Entiendes la idea?...

:)

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas