Código para extraer dato de columna anterior

Les solicito su ayuda en este tema. Tengo una tabla, donde la columna A contiene números de ficha, y la columna C tiene números de identificación personal. En un userform, tengo un textbox donde anoto un número de identificación personal y un botón que activa la siguiente macro, avisándome si ese número está o no en el registro.

Private Sub ComprobarRut_Click()
fila = Application.WorksheetFunction.CountA(Range("C:C")) + 1
For i = 1 To fila
Next i
Dim UltFil As Long
UltFil = Hoja1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
If Application.WorksheetFunction.CountIf(Hoja1.Range("C1:C" & UltFil), Me.TextBox1) >= 1 Then
MsgBox "Este RUT ya está REGISTRADO. Su número de Ficha es " & Cells(i, 1).Value, 16, ""
ElseIf Application.WorksheetFunction.CountIf(Hoja1.Range("C1:C" & UltFil), Me.TextBox1) = 0 Then
MsgBox "RUT DISPONIBLE", 64, ""
End If
End Sub

Agregué un dato en el primer MsgBox, que busco pueda darme el número de ficha asociado a ese número de identificación personal, pero solo me indica el número de ficha de la ultima fila libre. Me refiero a este MsgBox:

MsgBox "Este RUT ya está REGISTRADO. Su número de Ficha es " & Cells(i, 1).Value, 16, ""

¿Podrían ayudarme a que el código final de ese MsgBox me muestre el número de ficha (que está en la columna A) asociado al número que busco en la columna C?

Adjunto una captura de pantalla en la que se muestra el resultado de este código, mostrando que el resultado no muestra el número de ficha que necesito. Para el RUT que busco, el MsgBox debería decirme que el número de Ficha es el 109.

NOTA: El dato "RUT" está en la columna C, y mediante una fórmula le doy el formato de RUT definitivo en la columna D.

Respuesta
1

[Hola

Tienes varias líneas que la final no hacen nada por lo que te sugiero usar algo así más bien:

Dim UltimaFila As Long
Dim Buscar As Range
Let UltimaFila = Cells(Rows.Count, 3).End(xlUp).Row
With Range("C3:C" & UltimaFila)
    Set Buscar = .Find(TextBox1, LookIn:=xlValues)
    If Not Buscar Is Nothing Then
        MsgBox "Este RUT ya está REGISTRADO. Su número de Ficha es: " & Range("A" & Buscar.Row).Value
    Else
        MsgBox "No se halló el valor"
        Exit Sub
    End If
End With

Comentas

Abraham Valencia

¡Gracias Abraham!

Funciona perfecto, y hace justo lo que necesito. Muchísimas gracias

Saludos

P.D.: Doy por cerrada mi consulta

Abraham Valencia

¿Es posible que este misma macro busque el dato no solo en la hoja REGISTRO, sino también en otra hoja (DESCARTADOS)?. En esa hoja la Ficha está en la columna D y el rut buscado está en la columna C. 

Te agradezco mucho

Perdón, el número de Ficha está en la columna A. 

En la macro que usted me facilitó, le agregué unas palabras en el MsgBox para indicarme la hoja en donde esta el dato, aunque no sé si servirá para indicar que el dato se encuentra en esa segunda hoja. 

MsgBox "ESTE RUT YA ESTÁ REGISTRADO. Su número de Ficha es " & Range("A" & Buscar.Row).Value & " ubicada en la Hoja " & ActiveSheet.Name, 48, "ATENCIÓN"

Te agradezco

Armé esta macro, sumando algunos puntos a la que me usted me facilitó, pero cuando debe buscar el dato en la hoja DESCARTADOS, a veces funciona bien y otras no, y no sé cual es la razón

Podría ayudarme?

Este es el código

Private Sub ComprobarRut_Click()
Application.ScreenUpdating = False
Dim UltimaFila As Long
Dim Buscar As Range
Let UltimaFila = Cells(Rows.Count, 3).End(xlUp).Row
    Set h1 = Sheets("REGISTRO")
    Set h2 = Sheets("DESCARTADOS")
With Range("C3:C" & UltimaFila)
    Set Buscar = .Find(TextBox1, LookIn:=xlValues)
    If Buscar Is Nothing Then
     h2.Activate
     Set Buscar = .Find(TextBox1, LookIn:=xlValues)
     End If
    If Not Buscar Is Nothing Then
        MsgBox "ESTE RUT YA ESTÁ REGISTRADO. Su número de Ficha es " & Range("A" & Buscar.Row).Value & " ubicada en la Hoja " & ActiveSheet.Name, 48, "ATENCIÓN"
    Else
        MsgBox "RUT NO REGISTRADO. Puede continuar con el ingreso del postulante", 64, "CONTINUAR INGRESO"
        Exit Sub
     End If
         h1.Activate
End With
End Sub

Muchas gracias

[Hola

No me queda claro, o sea ¿a veces el código que buscas está en una hoja u otra? ¿Se debe de buscar en las dos hojas siempre? De ser así confirma porque no es difícil pero en realidad no resultará con esos cambios que has hecho.

Abraham Valencia

Gracias por tu respuesta Abraham

La macro siempre la inicio desde la hoja REGISTRO, pero antes que me entregue los MsgBox, la idea es que visite las dos hojas ("REGISTRO" y "DESCARTADOS"), y si encuentra el dato me indique en que número de ficha está y en cual de esas dos hojas. Si definitivamente no lo encuentra, entonces que entregue el segundo mensaje indicando que el rut no está ingresado, y que por ende, puedo continuar con el ingreso.

El tema es que, asi como dejé la macro, cuando busco a propósito un rut que está en la hoja DESCARTADOS, presiono el botón y el mensaje que muestra es el segundo (que el rut no esta ingresado), pero si lo vuelvo a presionar, ahí recién me indica que el dato está en la hoja DESCARTADOS con el código completo (indicando número de ficha y nombre de la hoja en que se encuentra)

En las imágenes se muestra lo que comento, ambas imagenes corresponden a dos presiones al boton de forma consecutiva

Gracias por tu ayuda!

[Hola nuevamente

Primero que nada, usar "Select" o "Activate" nunca es necesario. Segundo, al ser solo dos hojas, algo así es suficiente:

Dim h1 As Worksheet, h2 As Worksheet
Dim UltimaFila As Long
Dim Buscar As Range
Application.ScreenUpdating = False
Set h1 = Sheets("REGISTRO")
Set h2 = Sheets("DESCARTADOS")
Let UltimaFila = h1.Cells(Rows.Count, 3).End(xlUp).Row
With h1.Range("C3:C" & UltimaFila)
    Set Buscar = .Find(TextBox1, LookIn:=xlValues)
    If Not Buscar Is Nothing Then
        MsgBox "Este RUT ya está REGISTRADO. Su número de Ficha es: " & h1.Range("A" & Buscar.Row).Value & " y está ubicado en la hoja " & h1.Name
        Exit Sub
    End If
End With
Set Buscar = Nothing
Let UltimaFila = h2.Cells(Rows.Count, 3).End(xlUp).Row
With h2.Range("C3:C" & UltimaFila)
    Set Buscar = .Find(TextBox1, LookIn:=xlValues)
    If Not Buscar Is Nothing Then
        MsgBox "Este RUT ya está REGISTRADO. Su número de Ficha es: " & h2.Range("D" & Buscar.Row).Value & " y está ubicado en la hoja " & h2.Name
        Exit Sub
    End If
End With
MsgBox "No existe el dato"
Set Buscar = Nothing
Application.ScreenUpdating = True

Felices fiestas

Abraham Valencia

¡Muchísimas gracias Abraham!

Todo funcionando espectacular. 

¡Que tengas unas muy felices fiestas también!

Excelente, hasta la próxima.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas