Formula Buscarv

24/01/2004 - 19:37 por Daniel S.L. | Informe spam
Hola Buenas a tod@s

Mi consulta es la siguiente tengo un Libro con varias hojas las cuales llevan por
nombre -Agustín-Alberto-Fausto-Figueroa-Roberto-Lidia-BDATOS ..Ok :)

y bueno en cada hoja tiene la siguiente formula de la cual se encuentra repetida
desde =>E12<= hasta =>E3000<= lo cual se me hace mucho repetir dicha formula y la
formula es la siguiente :

=SI($A12<>"",BUSCARV($C12,BDATOS!$A$2:F3006,3,0),"")

de igual manera esta formula se repite desde =>G12<= hasta =>G3000<= y la fórmula es
la siguiente:

=SI($A12<>"",BUSCARV($C12,BDATOS!$A$2:F3006,5,0),"")

y lo que hice fue una macro con la grabadora y la macro es esta:

Sub dANIEL_bUSCARV()
'
' dANIEL_bUSCARV Macro
' Macro grabada el 23/01/2004 por Rigoberto G. Cruz Ziga
'
' Acceso directo: CTRL+Ñ
'
ActiveCell.FormulaR1C1 = _
"=IF(R[-2]C[-4]<>"""",VLOOKUP(R[-2]C3,BDATOS!R2C1:R[29986]C[1],3,0),"""")"
Range("E16").Select
End Sub


pero no hace nada :(( y no le entiendo además, como se haría una buena macro que
funcionara en todo el libro, o pulir esta y que se ejecute cuando el valor a buscar
se encuentre en el rango de =>C12<= hasta =>C3000<
Porfis una manita

Un saludo,
Daniel.
 

Leer las respuestas

#1 Héctor Miguel
24/01/2004 - 22:11 | Informe spam
hola, Daniel !

... Libro con varias hojas ... -Agustín-Alberto-Fausto-Figueroa-Roberto-Lidia-BDATOS ...
... en cada hoja ... la siguiente formula ... se encuentra repetida
... =>E12<= hasta =>E3000<= =SI($A12<>"",BUSCARV($C12,BDATOS!$A$2:F3006,3,0),"")
... =>G12<= hasta =>G3000<= =SI($A12<>"",BUSCARV($C12,BDATOS!$A$2:F3006,5,0),"")
... hice ... una macro con la grabadora [...]
Sub dANIEL_bUSCARV()
ActiveCell.FormulaR1C1 = _
"=IF(R[-2]C[-4]<>"""",VLOOKUP(R[-2]C3,BDATOS!R2C1:R[29986]C[1],3,0),"""")"
Range("E16").Select
End Sub
... pero no hace nada :(( y no le entiendo ademas
... como se haria una ... macro que funcionara en todo el libro
... que se ejecute cuando el valor a buscar se encuentre en el rango de =>C12<= hasta =>C3000<


1.- para que una macro se ejecute [automaticamente] en cualquier hoja del libro...
usa [en el modulo de codigo del libro] los eventos 'de hoja' [p.e. 'Workbook_SheetChange']
2.- la formula que usas ['tal-cual'] esta buscando en la 'base de datos' =>BDATOS!$A$2:F3006< desde un 'inicio fijo' [o 'absoluto'] que SIEMPRE 'empieza' en la celda 'A2'
hasta un 'final variable' [o 'ajustable'] en la 'BD' que 'termina segun' la fila hasta donde se copia la formula :((
si la 'intencion' es que el rango a 'buscar_donde' sea fijo, cambiala a =>BDATOS!$A$2:$F$3000<3.- [aparentemente] la macro la grabaste 'desde' la celda 'E14' [de alguna hoja] usando el 'estilo de referencia L1C1'
y lo que 'dice' la formula [en la macro] es:
a) si NO esta 'vacia' [<>""""]
b) la celda que 'se encuentra'... 2 filas 'arriba' y 4 columnas 'a la izquierda' =>R[-2]C[-4]<=...
[que seria la celda 'A12'... partiendo de 'E14' como la celda 'activa']
c) 'entonces... pon' [en la celda 'activa' e14] la formula 'BuscarV' [etc. etc. etc.]

'regresando' al punto 1 [la sugerencia de los eventos 'de hojas' en el modulo del libro]
y 'considerando' que [efectivamente] serian muchas celdas [+/- 3000×2] con formulas 'preparadas por si se ocupan' :))
podrias [p.e.] 'condicionar' la ejecucion del evento a que la hoja [donde 'ocurran' los cambios]...
- NO sea la hoja CON la 'base de datos'
- el rango que 'cambia' sea 'dentro' de 'A12:A3000'
en el modulo de codigo del libro [ThisWorkbook] ==Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If StrConv(Sh.Name, vbLowerCase) = "bdatos" Then Exit Sub
If Intersect(Target, Sh.Range("a12:a3000")) Is Nothing Then Exit Sub
With Target
If .Value <> "" Then
.Offset(, 4).Formula = "=VLookUp(" & .Offset(, 2).Address(0, 0) & ",BDatos!a2:f3000,3)"
.Offset(, 6).Formula = "=VLookUp(" & .Offset(, 2).Address(0, 0) & ",BDatos!a2:f3000,5)"
Else
.Offset(, 4).ClearContents
.Offset(, 6).ClearContents
End If
End With
End Sub

saludos,
hector.

Preguntas similares