Tengo una hoja de Excel con muchos datos que deben analizarse. Es un gran proyecto para mí, logré hacerlo paso a paso hasta ahora, pero algo pequeño me detiene. En uno de mis campos tengo:

sadadasd|2|adsgfas
sadadasd|1|adsgfas 
sadadasd|0|adsgfas

Lo que quiero hacer es para las filas que contienen

|1| -> delete entire row
|2| -> delete everything before |1| including |1|
|0| -> Delete cell value.

Tengo las condiciones para 0 y 2, pero me falta 1. Actualmente estoy usando el siguiente código:

Dim myRange As Range
Dim myCell As Range
Set myRange = Range("H4:H1000")
For Each myCell In myRange
If myCell Like "*|0|*" Then

myCell.ClearContents


ElseIf myCell Like "*|1|*" Then
myCell.EntireRow.Delete

ElseIf myCell Like "*|2|*" Then
  result_3

Else
End If
Next myCell

¿Me pueden ayudar a reemplazar result_3 con un comando para eliminar todo excepto el texto en la parte posterior? Estoy seguro de que ya hay una solución, pero dediqué demasiado tiempo a esa y necesito terminar el proyecto pronto. ¡Gracias de antemano!

0
Asen Panayotov 9 nov. 2017 a las 17:08

2 respuestas

La mejor respuesta

Para eliminar todo lo que esté antes del número 1, incluido el '|' caracteres.

myCell.Value = Right(myCell.Value, Len(myCell.Value) - InStr(myCell.Value, "1") + 1)

Por cierto, de su explicación del problema, parece que está mezclando la solución para *|1|* y *|2|*.

0
Miguel_Ryu 9 nov. 2017 a las 14:20

Dale una oportunidad:

Sub qwerty()
    Dim i As Long, v As String, vv As String

    For i = 1000 To 4 Step -1
        With Cells(i, "H")
            v = .Value
            vv = Mid(v, 10, 2)
            Select Case vv
            Case "2|"
                .EntireRow.Delete
            Case "1|"
                .Value = Mid(v, 12, 9999)
            Case "0|"
                .Clear
            End Select
        End With
    Next i
End Sub

Si sus registros no tienen una longitud fija:

Sub qwerty()
    Dim i As Long, v As String

    For i = 1000 To 4 Step -1
        With Cells(i, "H")
            v = .Value
            If InStr(1, v, "|") > 0 Then
                Select Case Split(v, "|")(1)
                Case "2"
                    .EntireRow.Delete
                Case "1"
                    .Value = Split(v, "|")(2)
                Case "0"
                    .Clear
                End Select
            End If
        End With
    Next i
End Sub
1
Gary's Student 9 nov. 2017 a las 17:16