Búsqueda Vertical y Referencias Relativas

¡Hola!: Esta pregunta la formulé a otro experto el 16/01/03, sin respuesta hasta ahora. En ese momento no estabas disponible, ¡que bueno que regresaste!, mi problema es el siguiente: En un proyecto incluí la siguiente fórmula: ActiveCell.FormulaR1C1 = "=VLOOKUP(RC15,'Hoja1'!R[" & I & "]C[-9]:R[" & L & "]C[-2],4,0)"
Donde I= primera fila de la matriz donde realizo la búsqueda y L= última fila de la misma.
Realizo los cálculos de I y L antes de la fórmula porque la matriz de búsqueda cambia (puede variar en filas de más o de menos). La fórmula funciona correctamente pero solo en la primera celda porque cuando copio la fórmula a otras celdas de la misma columna, Excel toma las referencias relativas y va cambiando mi matriz para cada celda en donde introduzco la fórmula. En resumen, necesito que la matriz de búqueda sea la misma para todas las celdas donde introduzco la fórmula pero no puedo colocarle referencias absolutas porque no conozco de antemano el rango de mi matriz. Espero no haberte enredado con mi explicación, mil gracias por tu atención.
Respuesta
1
En realidad nunca me fui.
En general, si no estoy disponible, es porque hubo gente que me cosnultó y no finalizó su pregunta.
Por lo cual me hacen exceder el límite de preguntas y otra gente -como tu- no puede realizarme preguntas.
Es por eso que insisto tanto en que finalicen las preguntas. Sin querer, esa negligencia hace que otros se perjudiquen.
En fin vamos a tu consulta:
OK, lo admito, no es la solución más ortodoxa que haya dado pero funciona.
La idea es convertir tu estilo de referencias al que usualmente usa MS Excel y que permite asignar referencias absolutas. He intentado -varias veces- hacerlo por código y he fracasado exitosamente.
Por eso esta solución se vale de la misma celda donde terminará la fórmula, para hacer la conversión.
La macro que sugiero es, entonces, la siguiente:
Sub PoneForm()
'=== Irina, coloca aquí la referencia al rango donde debe efectuar la búsqueda:
ActiveCell.FormulaR1C1 = "='Hoja1'!R[" & I & "]C[-9]:R[" & L & "]C[-2]"
RangBusq = ActiveCell.FormulaLocal
RangBusq = Right(RangBusq, Len(RangBusq) - 1)
HojaBusq = Left(RangBusq, InStr(1, RangBusq, "!"))
RangBusq = Range(RangBusq).Address
ActiveCell.FormulaR1C1 = "=RC15" ' Esta es la celda a buscar, de acuerdo a tu ejemplo.
CellBusq = ActiveCell.Formula
CellBusq = Right(CellBusq, Len(CellBusq) - 1)
CellBusq = Range(CellBusq).Address(False, False)
ActiveCell.FormulaLocal = "=buscarv(" & CellBusq & "," & HojaBusq & RangBusq & ",4,0)" 'aquí es importante que controles cuál es tu separador de argumentos (, o ;)
End Sub
Con esta macro, obtendrás una fórmula igual a la que colocaba tu instrucción pero con el rango de búsqueda fijo.
Espero que resuelva efectivamente tu problema.
Si así fuera, por los otros usuarios, recuerda finalizar tus dos preguntas.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas