|
Domanda.
nome=marialuisa
cognome=rossi
versione=2000
conosco2=medio
macro=SI
email=marialuisa.rossi@libero.it
chra=129
problema=Non sono riuscita a trovare nel vostro sito la risposta ad un mio
problema:
è possibile tramite VBA "tradurre" la formula INDIRETTO (o INDIRECT) di
Excel?
Esempio:
la cella Foglio1!A1 contiene la formula "=INDIRETTO("Foglio2!A1")"
la cella Foglio2!A2 contiene il valore 100.
In questo modo nella cella A1 di Foglio1 mi compare il valore 100.
Io vorrei trovare un modo per cui da Macro riesco a definire una variabile
che contenga NON il valore Foglio1!A1 (con le prove che ho fatto mi torna
sempre come valore "=INDIRETTO("Foglio2!A1")" ), ma il suo contenuto
"indiretto".
In pratica io ho provato con le formule ActiveSheet.Range("A1") o .Value, ma
visualizza sempre il riferimento ("Foglio2!A2") e non il suo valore
indiretto.
Grazie, Marialuisa Rossi
ps. come si vede conosco abbastanza bene Excel, ma non così bene
VBA! Spero mi possiate essere d'aiuto!
Risposta.
ciao MariaLuisa, non so se ho capito cosa esattamente vuoi, ma provo a
spiegare.
A parte che puoi ottenere sul foglio lo stesso risultato di
=INDIRETTO("Foglio2!A1")
con una uguaglianza: =Foglio2!A1
credo che tu cerchi di ottenere un riferimento parametrico, (che trovi sul
sito altervista, sezione "Le Vs domande") cioè vorresti che una macro legga
un riferimento scritto in una determinata cella, e ti riporti il valore che
sarà nella cella di cui il riferimento, giusto?
Supponiamo quindi il tuo esempio: il valore 100 posto nella cella A1 dl
foglio 2; tu vuoi che la macro leggendo "qualcosa" nella cella A1 del
foglio1 ti riporti il valore 100 del foglio2.
Il "qualcosa" nella A1 del foglio1 deve essere un riferimento, non una
formula, per cui dovresti scrivere in A1 semplicemente:
Foglio2!A1
per cui una macro diventerebbe:
Sub Luisa()
X = Sheets(1).[A1].Value
'X a questo punto è uguale a : Foglio2!A1, che
è il riferimento di cui vuoi il valore
Y = Range(X).Value 'con Y prendiamo il valore che è nel Range X
'Y ora è uguale a 100
MsgBox Y 'ti
avvisa il valore con un messaggio
End Sub
Se invece non puoi fare a meno di vedere il valore ANCHE nella cella A1 del
foglio1, si può usare la formula
in A1 : =Foglio2!A1
e poi usare questa macro, dove con l'uso di Mid
estraiamo solo il riferimento senza l'uguale:
Sub LuisaM()
X = Sheets(1).[A3].Formula 'con X prendiamo la
formula che sta in A1
Z = Mid(X, 2) 'con Z otteniamo con Mid solo il
riferimento che è in X meno l'uguale(=)
Y = Range(Z).Value 'con Y otteniamo il valore
contenuto nella cella di cui Z è il riferimento.
MsgBox Y
End Sub
Oppure vai sull'altro sito, sezione vba, e leggiti l'articolo "Funzioni
Foglio in Vba", con il quale puoi usare la funzione =Indiretto in vba.
ciao, fammi sapere, ennius
|