Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

macro per scrivere formula in una cella

177 views
Skip to first unread message

mauro....@gmail.com

unread,
Oct 19, 2006, 9:29:26 AM10/19/06
to
dovrei valorizzare una cella con una formula ma non trovo la sintassi
corretta:

Range("A2").Select
ActiveCell.FormulaR1C1 = "=SE(STRINGA.ESTRAI(G2; LUNGHEZZA(G2)-1;
2)="NS"; "2812"; STRINGA.ESTRAI(D2;1;4))"

mi da errore e anche:
ActiveCell.FormulaR1C1 = "=SE(MID(RC[+6]; LEN(RC[+6])-1; 2)='NS';
'2812'; MID(RC[+3];1;4))"

qualcuno mi puo aiutare ?

grazie

Ignazio

unread,
Oct 19, 2006, 9:45:58 AM10/19/06
to
<mauro....@gmail.com> ha scritto nel messaggio
news:1161264566.7...@i42g2000cwa.googlegroups.com...

> dovrei valorizzare una cella con una formula ma non trovo la sintassi
> corretta:
>
> Range("A2").Select
> ActiveCell.FormulaR1C1 = "=SE(STRINGA.ESTRAI(G2; LUNGHEZZA(G2)-1;
> 2)="NS"; "2812"; STRINGA.ESTRAI(D2;1;4))"

Prova:
ActiveCell.FormulaLocal = "=SE(STRINGA.ESTRAI(G2; LUNGHEZZA(G2)-1;2)=""NS"";
""2812""; STRINGA.ESTRAI(D2;1;4))"

--
Ciao
Ignazio


mauro....@gmail.com

unread,
Oct 19, 2006, 10:07:28 AM10/19/06
to

Grazie Ignazio, funziona benissimo ma mi potresti spiegare un perchè ?
in quali casi si usa ActiveCell.FormulaR1C1 e in quali
ActiveCell.FormulaLocal ?

ciao

Ignazio

unread,
Oct 19, 2006, 12:05:28 PM10/19/06
to
<mauro....@gmail.com> ha scritto nel messaggio
news:1161266848.2...@k70g2000cwa.googlegroups.com...

in quali casi si usa ActiveCell.FormulaR1C1 e in quali
ActiveCell.FormulaLocal ?

-------------------------
RISPOSTA

Ciao Mauro,
stai mischiando tra loro due cose che riguardano le formule:
- la notazione (stile A1 e R1C1)
- la localizzazione
Per una spiegazione dettagliata, prova a leggere la guida.
Intanto spero ti possano essere utili questi esempi.

Seleziona la cella A3 e testa ognuna di queste 4 righe di codice.

(1) ActiveCell.Formula = "=SUM(A1:A2)"
(2) ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
(3) ActiveCell.FormulaLocal = "=SOMMA(A1:A2)"
(4) ActiveCell.FormulaR1C1Local = "=SOMMA(R[-2]C:R[-1]C)"

Come potrai notare il risultato finale sarà identico, ossia nella cella A3
troverai sempre immessa la formula:
=SOMMA(A1:A2)

Seleziona ora la cella B5 e prova a testare nuovamente ognuna delle 4 righe
di codice precedenti.
Mentre la (1) e la (3) (che usano la notazione A1) continueranno ad
immettere la formula:
=SOMMA(A1:A2)
la (2) e la (4) (che usano la notazione R1C1) immetteranno la formula:
=SOMMA(B3:B4)

La differenza che poi c'è tra:
- Formula e FormulaLocal
- FormulaR1C1 e FormulaR1C1Local
è che con "Local" devi usare il nome localizzato delle funzioni, (e quindi,
con versioni italiane di excel, il nome in italiano delle funzioni), facendo
anche attenzione che noi italiani usiamo:
- la "virgola" al posto del "punto" per i numeri decimali;
- il "punto e virgola" al posto della "virgola" nelle formule.
Così, se ad esempio nella cella attiva vuoi immetere la formula:
=SOMMA(A1:A2;1,2)
potresti indifferentemente usare:
ActiveCell.Formula = "=SUM(A1:A2,1.2)"
ActiveCell.FormulaLocal = "=SOMMA(A1:A2;1,2)"

Quale usare tra le quattro proprietà Formula... , dipende da quale sono le
tue esigenze.
Personalmente non usarei mai la (3) o la (4) ... ossia mi sforzerei di
scrivere codice che non risenta delle localizzazioni.

--
Ciao
Ignazio


cucchiaino

unread,
Oct 19, 2006, 2:40:05 PM10/19/06
to
Ignazio wrote:

ciao Ignazio.

> in quali casi si usa ActiveCell.FormulaR1C1 e in quali
> ActiveCell.FormulaLocal ?
>
> -------------------------
> RISPOSTA
>
> Ciao Mauro,
> stai mischiando tra loro due cose che riguardano le formule:
> - la notazione (stile A1 e R1C1)
> - la localizzazione
> Per una spiegazione dettagliata, prova a leggere la guida.
> Intanto spero ti possano essere utili questi esempi.
>
> Seleziona la cella A3 e testa ognuna di queste 4 righe di codice.
>
> (1) ActiveCell.Formula = "=SUM(A1:A2)"
> (2) ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
> (3) ActiveCell.FormulaLocal = "=SOMMA(A1:A2)"
> (4) ActiveCell.FormulaR1C1Local = "=SOMMA(R[-2]C:R[-1]C)"
>


[ spiegazione esemplare, davvero complimenti! ]


> Personalmente non usarei mai la (3) o la (4) ... ossia mi sforzerei di scrivere codice che non risenta delle
> localizzazioni.

quella che hai suggerito al tuo primo post era proprio la (3) ! :)

()---cucchiaino

Ignazio

unread,
Oct 19, 2006, 5:04:06 PM10/19/06
to
"cucchiaino" <so...@excel.it> ha scritto nel messaggio
news:9EPZg.9438$uv5....@twister1.libero.it...

> Ignazio wrote:
> > (1) ActiveCell.Formula = "=SUM(A1:A2)"
> > (2) ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
> > (3) ActiveCell.FormulaLocal = "=SOMMA(A1:A2)"
> > (4) ActiveCell.FormulaR1C1Local = "=SOMMA(R[-2]C:R[-1]C)"
> >

> > Personalmente non usarei mai la (3) o la (4) ... ossia mi sforzerei di
scrivere codice che non risenta delle
> > localizzazioni.

> quella che hai suggerito al tuo primo post era proprio la (3) ! :)

Hai ragione cucchiaino :)
Forse (inconsciamente) avrò scelto la soluzione che comportava meno
modifiche a quelle che proponeva Mauro ;)

Quindi ne approfitto per postare le soluzioni (1) e (2) relativamente alla
formula di Mauro:

Range("A2").Select
ActiveCell.Formula = _
"=IF(MID(G2, LEN(G2)-1,2)=""NS"", ""2812"", MID(D2,1,4))"

Range("A2").Select
ActiveCell.FormulaR1C1 = _
"=IF(MID(RC[6], LEN(RC[6])-1,2)=""NS"", ""2812"", MID(RC[3],1,4))"

--
Ciao
Ignazio


0 new messages