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
Prova:
ActiveCell.FormulaLocal = "=SE(STRINGA.ESTRAI(G2; LUNGHEZZA(G2)-1;2)=""NS"";
""2812""; STRINGA.ESTRAI(D2;1;4))"
--
Ciao
Ignazio
Grazie Ignazio, funziona benissimo ma mi potresti spiegare un perchè ?
in quali casi si usa ActiveCell.FormulaR1C1 e in quali
ActiveCell.FormulaLocal ?
ciao
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
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 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