Fórmula VBA para una búsqueda cruzada

Nuevamente quisiera su ayuda... Estoy pasando mi documento excel a Form y estoy topando con lo siguiente. Tengo una fórmula donde hago una búsqueda cruzada, esta es la fórmula:

=SI.ERROR(INDICE(Distancias!A2:KX310;COINCIDIR(FOLIO!P11;Distancias!A2:A310;0);COINCIDIR(FOLIO!Q11;Distancias!A2:KX2;0));"")

Quiero hacer lo mismo pero en mi formulario donde tengo mi combobox1 (Ciudad 1) y el combobox2 (Ciudad 2), y en el textbox1 (KM) me muestre el resultado.

Buscando en varios foros no eh dado con un documento de ejemplo o fórmula, si pudieran orientarme se los agradecería.

1 Respuesta

Respuesta
1

Si yo coloco tu fórmula en alguna celda, lo que obtengo en VBA sería algo así:

    ActiveCell.FormulaR1C1 = _
        "=IFERROR(INDEX(Distancias!R[1]C[-4]:R[309]C[305],MATCH(FOLIO!R[10]C[11],Distancias!R[1]C[-4]:R[309]C[-4],0),MATCH(FOLIO!R[10]C[12],Distancias!R[1]C[-4]:R[1]C[305],0)),"""")"
   

Como verás las referencias de fila/col tienen que ver con la ubicación de la celda donde colocarás la fórmula.

Para esto, a partir del minuto 9:30 del video 15 de mi canal se explica el modo de grabar una fórmula y luego agregarle las referencias variables como nombre de hojas.

Sdos. Si el tema queda resuelto no olvides valorar la respuesta (opciones: Excelente o buena)... sino comenta con todas las aclaraciones y referencias de tu caso.

Elsa

Gracias Elsa por tu atención y ayuda, pero creo que no me supe expresar bien... lo que quiero hacer es usar un formulario VBA de excel, en donde buscar con combobox1, la ciudad origen en las columnas "C1:KX1", , luego en el combobox2, la ciudad de destino en la columna "A2:A309" y el resultado de esa consulta cruzada, me lo muestre en mi texbox1. Toda esta información la busco en la Hoja2 de mi libro. 

Hecha la búsqueda guardar los valores a otra hoja nueva.

Adjunto link donde tengo el archivo, para que vea el formulario

https://1drv.ms/f/s!An72VgL_xDdIgp8Nfd9ZczraIXECkA 

Espero me pueda ayudar...

Muchas gracias...

En el video 11 de mi canal comento acerca de los códigos que ya no debieran utilizar (por antiguos o por erróneos)... y observo que los utilizaste a todos ;)

Bien, los retiré a los dos porque esos no tienen nada que ver con tu búsqueda en tu formulario.

Con respecto a tu instrucción para llenar el primer combo el resultado se ve así mostrando además las 2 primeras celdas que no corresponden.

Si los nombres de ciudades son las mismas entonces utilizaré la misma lista para los 2 desplegables, obteniéndolas desde la col A. Esto para el combobox2 y lo mismo será para el combo 1,

x = Hoja2.Range("A" & Rows.Count).End(xlUp).Row
ComboBox2.RowSource = "=Hoja2!A2:A" & x

 Luego evaluarás si no sería más cómodo mostrar los nombres ordenados alfabéticamente.

Dejame un correo (o toma alguno de los míos de la portada de mi sitio) así te envío el libro con los códigos necesarios.

Acabo de enviarte libro de muestra. Por ahora los 2 desplegables muestran la misma información (así se presume de tu muestra).

Private Sub UserForm_Initialize()
'los 2 desplegables muestran la misma lista -----NOTA: LA LISTA DEBIERA PRESENTARSE ORDENADA
x = Hoja2.Range("A" & Rows.Count).End(xlUp).Row
ComboBox1.RowSource = "=Hoja2!A2:A" & x
ComboBox2.RowSource = "=Hoja2!A2:A" & x
End Sub

Se agregó un botón para realizar la búsqueda luego de la selección desde los 2 desplegables.

Private Sub CommandButton2_Click()
'Buscar intersección
Set buscoOrig = Hoja2.Range("C1:KX1").Find(ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
'si lo encontró guarda su col
If Not buscoOrig Is Nothing Then colx = buscoOrig.Column
Set buscoDest = Hoja2.Range("A2:A" & Hoja2.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox2, LookIn:=xlValues, lookat:=xlWhole)
'si lo encontró guarda la fila
If Not buscoDest Is Nothing Then filx = buscoDest.Row
'muestra el contenido de la celda encontrada
TextBox1 = Hoja2.Cells(filx, colx)
End Sub

Y esta es la macro de pase:

Private Sub CommandButton1_Click()
'guarda en otra hoja los 3 datos. Se busca la fila libre
x = Hoja3.Range("A" & Rows.Count).End(xlUp).Row + 1
With Hoja3
    .Range("A" & x) = ComboBox1
    .Range("B" & x) = ComboBox2
    If Not TextBox1 = "" Then .Range("C" & x) = CDbl(TextBox1)
End With
'opcional: limpiar los controles para permitir otra búsqueda
ComboBox1.ListIndex = -1: ComboBox2.ListIndex = -1
TextBox1 = ""
ComboBox1.SetFocus
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas