Búsqueda de valores en un rango determinado (Visual Basic Excel)

Tengo la siguiente planilla (reducida para ejemplificar):

Básicamente consiste en una planilla de almacenamiento en la cual, por ejemplo, el rango A1:A5 conforma un casillero con 4 espacios disponibles para almacenar folios o pedidos.

Necesito llamarlos a través del siguiente UserForm:

La idea es que, al ingresar un folio en el textbox, y presionar el botón "BUSCAR", el label me diga en que casillero se encuentra el folio consultado. Primeramente lo encare con un IF para cada caso, pero tengo mas de 30 casilleros en la planilla original, considerando que son 4 espacios por casillero, son 120 IF que debería usar, y el código se hace demasiado largo. Se agradece cualquier aporte, estaré atento.

1

1 respuesta

Respuesta
1

Te anexo el código para buscar

Private Sub CommandButton1_Click()
    Label1.Caption = ""
    valor = TextBox1.Value
    If valor = "" Then
        MsgBox "Captura un folio"
        TextBox1.SetFocus
        Exit Sub
    End If
    If IsNumeric(valor) Then valor = Val(valor)
    Set b = Sheets("Hoja1").Cells.Find(valor, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        Label1.Caption = b.Address
    Else
        MsgBox "El folio no existe"
    End If
End Sub

Cambia los nombres de commandbutton1, textbox1, label1 y Hoja1 por los nombres de tus controles.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Gracias por tu respuesta Dante.! la macro funciona, pero...

Al consultar un folio, necesito que me diga en que casillero se encuentra, y la macro que me adjuntas,lo que hace, es decirme en que celda se encuentra. Ejemplo:

Si te fijas, me da la ubicación de celda "AA3", cuando debería decirme que se encuentra en el casillero 29... Hay alguna forma de asignarle rangos a un casillero? por ejemplo, al buscar, si se encuentra dentro del rango A1:A5 que me arroje "casillero 1" , entre el rango B1:B5 "casillero 2" ETC...? Una vez mas se agradece cualquier aporte :)

Te anexo la macro actualizada

Private Sub CommandButton1_Click()
    Label1.Caption = ""
    valor = TextBox1.Value
    If valor = "" Then
        MsgBox "Captura un folio"
        TextBox1.SetFocus
        Exit Sub
    End If
    If IsNumeric(valor) Then valor = Val(valor)
    Set h = Sheets("Hoja1")
    Set b = h.Cells.Find(valor, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        For j = b.Row To 1 Step -1
            If Left(LCase(h.Cells(j, b.Column).Value), 9) = LCase("casillero") Then
                Label1.Caption = h.Cells(j, b.Column)
            End If
        Next
    Else
        MsgBox "El folio no existe"
    End If
End Sub
'

'.[No olvides valorar la respuesta. 

No Dante, ahora directamente no me muestra ni siquiera la celda... Te serviría si te envío la planilla? esta en proceso y bastante desordenada, pero tal vez sirva para visualizar mejor lo que necesito que haga la macro... Acá busque alguna opción de adjuntar archivo pero no encontré, existe alguna forma de enviarte el archivo?

Me sirve si pones los ejemplos reales.

Esto pusiste en tu petición original:

Si tus datos no están como en la imagen, entonces no puedo imaginarme cómo los tienes.

Si en las celdas no existe la palabra "casillero" entonces la macro no va a funcionar.

Si tienes celdas combinadas, tampoco va a funcionar.

Si pudieras poner unas imágenes mostrando tal cual están tus datos, actualizo la macro.

Dante disculpa la demora, pasa que la planilla original la tengo en el trabajo, y en casa hice esta a la rápida, pero es prácticamente igual a esta:

Nada más que llega al casillero numero 32 hacia abajo, lo de vencimiento y picking son datos adicionales que no vienen a este caso, e incluye una columna "PATIO PICKING" que es un casillero que abarca 40 espacios aprox. hacia abajo. Gracias por tus aportes Dante.! Cualquier cosa me avisas, estaré atento.

Ya hice varias pruebas con números, con letras y con números y letras.

Si en la misma columna donde encontró el folio en la parte de arriba hay un texto que empiece con la palabra "casillero", entonces en label te muestra el dato.

Prueba con lo siguiente y me comentas.

Private Sub CommandButton1_Click()
    Label1.Caption = ""
    valor = TextBox1.Value
    If valor = "" Then
        MsgBox "Captura un folio"
        TextBox1.SetFocus
        Exit Sub
    End If
    If IsNumeric(valor) Then valor = Val(valor)
    Set h = Sheets("Hoja1")
    Set b = h.Cells.Find(valor, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        For j = b.Row To 1 Step -1
            If Left(LCase(h.Cells(j, b.Column).Value), 9) = LCase("casillero") Then
                Label1.Caption = h.Cells(j, b.Column)
                Exit For
            End If
        Next
    Else
        MsgBox "El folio no existe"
    End If
End Sub

¡Gracias!

Funciona a la perfección, al casillero "Patio Picking" le pondré la palabra casillero delante y listo.!

Excelente aporte Dante. Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas