Se puede hacer un uso especial de VlookUp?

Necesito una función parecida a VlookUp que en vez de traerme un resultado me traiga una referencia de celda (Sheet1, R5C10).

1 Respuesta

Respuesta
1

¿Si se puede... pero qué necesitas? ¿Una función o fórmula o un código vba?

Aclara un poco más lo que necesitas para continuar el tema.

Hola Elsa, una macro o código VBA.

                   saludos

Como no indicas qué necesitas buscar aquí va un ejemplo de lo que haríamos con Vlookup.

Por ej, buscar el valor de G1 en col C de una tabla cualquiera.

Sub BUSCANDO()
'x Elsamatilde
'dato a buscar
dato = [G1]
'hoja a buscar
Set h2 = Sheets("Hoja2")
'el dato se busca en col C
Set busco = h2.[C:C].Find(dato, LookIn:=xlValues, lookat:=xlWhole)
'si se encuentra el dato devuelve sus referencias
If Not busco Is Nothing Then
    'valor en col A del dato encontrado
    MsgBox "El valor de la col A es " & busco.Offset(0, -2)
    'fila del dato encontrado
    MsgBox "La fila del dato encontrado es: " & busco.Row
    'dirección completa del dato encontrado
    MsgBox "La referencia absoluta del dato encontrado es: " & busco.Address
    MsgBox "La referencia relativa del dato encontrado es: " & busco.Address(False, False)
End If
End Sub

Los cuadros de mensaje te van a ir mostrando información del dato encontrado.

Espero te sirva de ejemplo para completar lo que intentas buscar, sino dejame un ejemplo concreto.

Hola Elsa, muy amable de tu parte haberme contestado. Lo que pasa es que no tengo datos en la hoja que debo escribir, solo tablas vacías, y debo encontrar la celda que escribir de acuerdo a cuatro variables. Te paso lo que escribí. Es demasiado largo.

Lo único que te pediría es ver si se pueden evitar tantos If Anidados.

Desde ya muchas gracias.

Sub Grabar_Yd_Estimadas()
' Grabar_Yd_Estimadas Macro
' Acceso directo: Ctrl+Mayús+Q
Dim AltAbC, AltAbF, AltArC, AltArF As String
Dim Club, BS, YdEst, CoefCaida As Double
Dim Cte, Col As Integer
Dim Cambio As Variant
Ruta = "H:\SOFTWARE\Dropbox\WGT\Courses\Alturas.xlsx"
Hoja = Range("J6")
Club = Range("G3")
BS = Range("H3")
YdEst = Range("N3")
CoefCaida = Range("N6")
Col = 0
Cte = 0
Application.ScreenUpdating = False
Range("N3").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open (Ruta)
Sheets(Hoja).Select
If ActiveSheet.Name = "AltAbC" Then
Cte = 63
Else
If ActiveSheet.Name = "AltAbF" Then
Cte = 5
Else
If ActiveSheet.Name = "AltArF" Then
Cte = 55
Else
Cte = 74
End If
End If
End If
If Club = 60 And BS = -22 Then
Col = 3
Else
If Club = 60 And BS = -11 Then
Col = 4
Else
If Club = 60 And BS = 0 Then
Col = 5
Else
If Club = 60 And BS = 11 Then
Col = 6
Else
If Club = 60 And BS = 22 Then
Col = 7
End If
If Club = 80 And BS = -22 Then
Col = 10
Else
If Club = 80 And BS = -11 Then
Col = 11
Else
If Club = 80 And BS = 0 Then
Col = 12
Else
If Club = 80 And BS = 11 Then
Col = 13
Else
If Club = 80 And BS = 22 Then
Col = 14
Else
If Club = 100 And BS = -22 Then
Col = 17
Else
If Club = 100 And BS = -11 Then
Col = 18
Else
If Club = 100 And BS = 0 Then
Col = 19
Else
If Club = 100 And BS = 11 Then
Col = 20
Else
If Club = 100 And BS = 22 Then
Col = 21
Else
If Club = 120 And BS = -22 Then
Col = 24
Else
If Club = 120 And BS = -11 Then
Col = 25
Else
If Club = 120 And BS = 0 Then
Col = 26
Else
If Club = 120 And BS = 11 Then
Col = 27
Else
If Club = 120 And BS = 22 Then
Col = 28
Else
If Club = 135 And BS = -22 Then
Col = 31
Else
If Club = 135 And BS = -11 Then
Col = 32
Else
If Club = 135 And BS = 0 Then
Col = 33
Else
If Club = 135 And BS = 11 Then
Col = 34
Else
If Club = 135 And BS = 22 Then
Col = 35
Else
If Club = 150 And BS = -22 Then
Col = 38
Else
If Club = 150 And BS = -11 Then
Col = 39
Else
If Club = 150 And BS = 0 Then
Col = 40
Else
If Club = 150 And BS = 11 Then
Col = 41
Else
If Club = 150 And BS = 22 Then
Col = 42
Else
If Club = 165 And BS = -22 Then
Col = 45
Else
If Club = 165 And BS = -11 Then
Col = 46
Else
If Club = 165 And BS = 0 Then
Col = 47
Else
If Club = 165 And BS = 11 Then
Col = 48
Else
If Club = 165 And BS = 22 Then
Col = 49
Else
If Club = 180 And BS = -22 Then
Col = 52
Else
If Club = 180 And BS = -11 Then
Col = 53
Else
If Club = 180 And BS = 0 Then
Col = 54
Else
If Club = 180 And BS = 11 Then
Col = 55
Else
If Club = 180 And BS = 22 Then
Col = 56
Else
If Club = 195 And BS = -22 Then
Col = 59
Else
If Club = 195 And BS = -11 Then
Col = 60
Else
If Club = 195 And BS = 0 Then
Col = 61
Else
If Club = 195 And BS = 11 Then
Col = 62
Else
If Club = 195 And BS = 22 Then
Col = 63
Else
If Club = 210 And BS = -22 Then
Col = 66
Else
If Club = 210 And BS = -11 Then
Col = 67
Else
If Club = 210 And BS = 0 Then
Col = 68
Else
If Club = 210 And BS = 11 Then
Col = 69
Else
If Club = 210 And BS = 22 Then
Col = 70
Else
If Club = 225 And BS = -22 Then
Col = 73
Else
If Club = 225 And BS = -11 Then
Col = 74
Else
If Club = 225 And BS = 0 Then
Col = 75
Else
If Club = 225 And BS = 11 Then
Col = 76
Else
If Club = 225 And BS = 22 Then
Col = 77
Else
If Club = 245 And BS = -22 Then
Col = 80
Else
If Club = 245 And BS = -11 Then
Col = 81
Else
If Club = 245 And BS = 0 Then
Col = 82
Else
If Club = 245 And BS = 11 Then
Col = 83
Else
If Club = 245 And BS = 22 Then
Col = 84
Else
If Club = 282 And BS = -22 Then
Col = 87
Else
If Club = 282 And BS = -11 Then
Col = 88
Else
If Club = 282 And BS = 0 Then
Col = 89
Else
If Club = 282 And BS = 11 Then
Col = 90
Else
If Club = 282 And BS = 22 Then
Col = 91
If Col <> 0 Then End
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If


End If
End If
End If
End If
End If

End If
End If
End If
End If
End If
ActiveSheet.Cells(Cte + CoefCaida, Col).Select
If ActiveSheet.Cells(Cte + CoefCaida, Col).Value = 0 Then
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
With Selection
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
End With
Else
Cambio = MsgBox("La Celda esta ocupada con el Nro " & ActiveSheet.Cells(Cte + CoefCaida, Col).Value & " ¿Quiere Sobreescribirla? ", vbOKCancel, "CAMBIAR VALOR DE CELDA")
If Cambio = vbOK Then
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
With Selection
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
End With
Else
End If
End If
ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Ufff... no ve que esto tenga mucho que ver con la consulta inicial... pero aquí va. La idea es asignar la 1er col según el valor de Club ... y luego se compara BS donde según el valor que tenga será la col a partir de la que asignamos de inicio.

Revisa qué hacer si no se cumplen estas condiciones. Por ahora no se ejecuta el final, es decir que no se guarda ni se cierra el libro ... quizás esto debas ajustarlo.

Sub Grabar_Yd_Estimadas()
'ajustada x Elsamatilde
' Grabar_Yd_Estimadas Macro
' Acceso directo: Ctrl+Mayús+Q
Dim AltAbC, AltAbF, AltArC, AltArF As String
Dim Club, BS, YdEst, CoefCaida As Double
Dim Cte, Col, Colx As Integer
Dim Cambio As Variant
Ruta = "H:\SOFTWARE\Dropbox\WGT\Courses\Alturas.xlsx"
Hoja = Range("J6")
Club = Range("G3")
BS = Range("H3")
YdEst = Range("N3")
CoefCaida = Range("N6")
Col = 0: Colx = 0
Cte = 0
Application.ScreenUpdating = False
Range("N3").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open (Ruta)
Sheets(Hoja).Select
If ActiveSheet.Name = "AltAbC" Then
    Cte = 63
ElseIf ActiveSheet.Name = "AltAbF" Then
    Cte = 5
ElseIf ActiveSheet.Name = "AltArF" Then
    Cte = 55
Else
    Cte = 74
End If
'según el valor de Club será la primer col para evaluar BS
Select Case Club
    Case Is = 60
        Col = 3
    Case Is = 60
        Col = 10
    Case Is = 100
        Col = 17
    Case Is = 120
        Col = 24
    Case Is = 135
        Col = 31
    Case Is = 150
        Col = 38
    Case Is = 165
        Col = 45
    Case Is = 180
        Col = 52
    Case Is = 195
        Col = 59
    Case Is = 210
        Col = 66
    Case Is = 225
        Col = 73
    Case Is = 245
        Col = 80
    Case Is = 282
        Col = 87
End Select
'si Col tiene un valor <> 0 se ejecuta la 2da condición
If Col <> 0 Then
    Select Case BS
        Case Is = -22
            Colx = Col
        Case Is = -11
            Colx = Col + 1
        Case Is = 0
            Colx = Col + 2
        Case Is = 11
            Colx = Col + 3
        Case Is = 22
            Colx = Col + 4
    End Select
End If
'si Colx = 0 no se ejecuta el resto-----REVISAR
If Colx = 0 Then Exit Sub
ActiveSheet.Cells(Cte + CoefCaida, Colx).Select
If ActiveSheet.Cells(Cte + CoefCaida, Colx).Value = 0 Then
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    With Selection
        .VerticalAlignment = xlCenter
        .HorizontalAlignment = xlCenter
    End With
Else
    Cambio = MsgBox("La Celda esta ocupada con el Nro " & ActiveSheet.Cells(Cte + CoefCaida, Colx).Value & " ¿Quiere Sobreescribirla? ", vbOKCancel, "CAMBIAR VALOR DE CELDA")
    If Cambio = vbOK Then
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        With Selection
            .VerticalAlignment = xlCenter
            .HorizontalAlignment = xlCenter
        End With
    'Else
    End If
End If
ActiveWorkbook. Save
ActiveWorkbook. Close
End Sub

Observa que en las primeras instrucciones dejé los IF para que veas cómo utilizar ElseIf.... aquí también podría haber sido posible el uso de Select aunque no hubiese sido mucha la diferencia.

Hasta aquí ya merece ser valorada la respuesta... si te quedan otros asuntos a ajustar por favor dejame una nueva consulta en el tablón indicando en el cuerpo del mensaje que es 'Para Elsa' así continúo con el ejemplo.

Sdos.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas