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
¿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.
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
- Compartir respuesta