Ayuda con formula

01/02/2004 - 01:13 por Daniel S.L. | Informe spam
Hola a todos..

Hace unos dias el buen amigo Héctor me envió el siguiente código

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!c2:g3000,3)"
.Offset(, 6).Formula = "=VLookUp(" & .Offset(, 2).Address(0, 0) &
",BDatos!c2:g3000,5)"

Else
.Offset(, 4).ClearContents
.Offset(, 6).ClearContents
End If
End With
End Sub

y traducido en una formula de excel da lo siguiente:

=BUSCARV(C15,BDATOS!C2:G3000,3)
=BUSCARV(C15,BDATOS!C2:G3000,5)

pero a qui es donde esta el problemas eso creo...

la formula que realmente quiero que salga es la siguiente:
=SI($A15<>"",BUSCARV($C15,BDATOS!$C$2:H3000,3,0),"")
=SI($A15<>"",BUSCARV($C15,BDATOS!$C$2:H3000,5,0),"")

NO se porque con a primera no busca bien el articulo y con la ultima si lo saca
sin problemas. Espero y alguien me de otra manita
Gracias.

Un saludo,
Daniel.
 

Leer las respuestas

#1 Héctor Miguel
01/02/2004 - 04:38 | Informe spam
hola, Daniel !

y traducido en una formula de excel da lo siguiente:
=BUSCARV(C15,BDATOS!C2:G3000,3)
=BUSCARV(C15,BDATOS!C2:G3000,5)
la formula que realmente quiero que salga es la siguiente:
=SI($A15<>"",BUSCARV($C15,BDATOS!$C$2:H3000,3,0),"")
=SI($A15<>"",BUSCARV($C15,BDATOS!$C$2:H3000,5,0),"")
NO se porque con a primera no busca bien el articulo y con la ultima si lo saca sin problemas.



'dejando de lado' [un poquito y por ahora] lo referente a las referencias [semi-]absolutas/relativas
[o sea, cuando usar p.e. $A$1 ... o $A$1 ... o A$1 ... o A1]
y 'convirtiendo' la formula que SI funciona a 'totalmente relativa'
podras 'ver' la diferencia con la formula que 'deja' el codigo [p.e.]
'manual' => BUSCARV(C15,BDATOS!C2:H3000,3,0)
× codigo => BUSCARV(C15,BDATOS!C2:G3000,3)

1.- la 'principal' diferencia es el ultimo argumento de la funcion BuscarV =>en CERO -o 'falso'-< lo que significa que la base de datos NO esta 'ordenada' [y que yo 'omiti' -por error- :((
=>agrega una coma y un cero [en el codigo] 'entre' la columna a devolver y el parentesis 'de cierre'<2.- 'otra' diferencia [de momento NO 'crucial'] es que la formula 'manual' busca en el rango de columnas 'C:H'
y la que 'deja' la macro busca en el rango de columnas 'C:G'
es como si fueras a ocupar [en algun momento] 'devlover' HASTA 6 columnas a la derecha desde 'C'
[si no recuerdo mal, 'originalmente'... 'eran' las columnas 'A:F']

=> otro cambio 'importante' que veo en las 'adecuaciones' que hiciste al codigo 'propuesto' es...
la primer instruccion dentro del codigo del evento:
If StrConv(Sh.Name, vbLowerCase) = "BDATOS" Then Exit Sub


==> estas comparando 'minusculas' CONTRA 'mayusculas' <= o... cambias vbLowerCase a => vbUpperCase
o... cambias "BDATOS" a => "bdatos"
o... [de lo contrario] la macro 'se aplicara' INCLUSIVE a cambios en el rango "a12:a3000" de la hoja 'BDATOS' :((

[finalmente]
la condicionante en la formula 'manual' =>=SI($A15<>"" ... ,"")<la esta 'ejecutando' [por 'descalificacion'] la macro con la instruccion:
With Target
If .Value <> "" Then
Else
.Offset(, 4).ClearContents
.Offset(, 6).ClearContents
End If
End With



¿comentas?
saludos,
hector.

Preguntas similares