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

Numero da virgola a punto in VBA Excel

3,123 views
Skip to first unread message

Elefante

unread,
Aug 10, 2010, 10:53:51 AM8/10/10
to

In VBA per Excel ho le seguenti stringe di programma:

P1 = CDbl(Format(P(I), "####,###"))

la varibile P1 calcolata è 1234,456 mentre voglio 123.456 cosa faccio ?

Grazie


r

unread,
Aug 10, 2010, 12:27:13 PM8/10/10
to

chi ti capisce ... è bravo
saluti
r

Elefante

unread,
Aug 11, 2010, 1:48:50 AM8/11/10
to

Diciamo che non ci vuole molto, ripeto in VBA di excel voglio sostituire
la virgola al punto nella variabile
P1 = 1234,987 in 1234.987
Grazie

"r" <robb...@gmail.com> ha scritto nel messaggio
news:e0c1aaeb-f4b0-4902...@5g2000yqz.googlegroups.com...

Scossa

unread,
Aug 11, 2010, 2:51:45 AM8/11/10
to
On 11 Ago, 07:48, "Elefante" <elefa...@tiscalinet.it> wrote:

>     Diciamo che non ci vuole molto,

Diciamo che dire 1234 è diverso da dire 123:

>la varibile P1 calcolata è 1234,456 mentre voglio 123.456

ed è diverso da dire:

> voglio sostituire la virgola al punto

E ancora non è chiaro se vuoi ottenere un numero od un testo.

Bye!
Scossa

Elefante

unread,
Aug 11, 2010, 2:53:43 AM8/11/10
to

O.K. voglio sostituire la virgola con il punto e ottenere un numero ,
non un testo.
Grazie

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:bfb8534c-55fa-46b9...@q22g2000yqm.googlegroups.com...

Scossa

unread,
Aug 11, 2010, 3:29:02 AM8/11/10
to
On 11 Ago, 08:53, "Elefante" <elefa...@tiscalinet.it> wrote:
>     O.K. voglio sostituire la virgola con il punto e ottenere un numero ,
> non un testo.

Mah, che io sappia devi impostare (in Strumenti->opzioni-
>internazionali) il separatore decimale a ".".
La sostituzione della virgola con il punto la puoi fare in una stringa
(testo)

Public Sub m()
Dim sPi As String
Dim Pi As Double
Pi = Range("A1") 'Pi = A1 = 1234,789

sPi = Replace(Pi, ",", ".") 'sPi = 1234.789
MsgBox "Pi: " & Pi & vbCrLf & _
"SPi: " & sPi
End Sub


Bye!
Scossa

r

unread,
Aug 11, 2010, 4:37:49 AM8/11/10
to
On 11 Ago, 08:53, "Elefante" <elefa...@tiscalinet.it> wrote:
>     O.K. voglio sostituire la virgola con il punto e ottenere un numero ,
> non un testo.
>     Grazie

beh la tua richiesta non è ancora chiara ... almeno a me ...
per sostituire una virgola con un punto puoi utilizzare replace ... se
hai un numero a virgola mobile 123,456 e vuoi ottenere un numero
intero 123456 che poi vuoi formattare come 123.456 dovresti spiegare
dove vuoi che sia così visualizzato ... in una cella? ... dovresti poi
spiegare la tua variabile come è dimensionata ... e cosa ci vuoi
fare ... e ancora ... come mai hai un numero con virgola dove la
virgola è da considerare come separatore delle migliaia ... ottieni
quei dati da una estrazione? tieni conto che 123,450 potrebbe nella
conversione diventare 123,45 ... e cosa otterresti alla fine?

insomma perdonami ma *io* ho un sacco di dubbi ancora :-)

tu hai omesso le cose fondamentali ... da dove vuoi partire, dove
vuoi arrivare, il motivo del tuo viaggio ...

saluti
r

Mauro Gamberini

unread,
Aug 11, 2010, 7:31:55 AM8/11/10
to
> Diciamo che non ci vuole molto, ripeto in VBA di excel voglio
> sostituire la virgola al punto nella variabile
> P1 = 1234,987 in 1234.987
>

Non puoi.
Il vb ragiona in *americano*, quindi i numeri hanno
come separatori decimali il punto e come sepratore
delle migliaia la virgola.

Quindi quello che per noi è1.124,56, per il vb
è 1,234.56.
Questo se parliamo di variabili Double o Variant ad esempio.
Diverso è se hai una stringa, dove puoi sostituire la virgola
con il punto:

Public Sub m()
Dim s As String
s = "1234,567"
s = Replace(s, ",", ".")
MsgBox s
End Sub

Ma stiamo parlando di una variabile String, cioè di testo.

--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/

Elefante

unread,
Aug 12, 2010, 1:50:39 AM8/12/10
to

Bene quasi ci siamo , infatti tu midici ..... vuoi ottenere un
numero
intero 123456 che poi vuoi formattare come 123.456 ...

esattamente dopo avere ottentu il numero interno 123456 come faccio
a formattarlo in VBA per Excel
in un numero 123.456 ?

Grazie.

"r" <robb...@gmail.com> ha scritto nel messaggio
news:f52a1be8-377a-4901...@z10g2000yqb.googlegroups.com...


On 11 Ago, 08:53, "Elefante" <elefa...@tiscalinet.it> wrote:
> O.K. voglio sostituire la virgola con il punto e ottenere un numero ,
> non un testo.
> Grazie

beh la tua richiesta non č ancora chiara ... almeno a me ...


per sostituire una virgola con un punto puoi utilizzare replace ... se
hai un numero a virgola mobile 123,456 e vuoi ottenere un numero
intero 123456 che poi vuoi formattare come 123.456 dovresti spiegare

dove vuoi che sia cosě visualizzato ... in una cella? ... dovresti poi
spiegare la tua variabile come č dimensionata ... e cosa ci vuoi


fare ... e ancora ... come mai hai un numero con virgola dove la

virgola č da considerare come separatore delle migliaia ... ottieni

Scossa

unread,
Aug 12, 2010, 2:32:00 AM8/12/10
to
On 12 Ago, 07:50, "Elefante" <elefa...@tiscalinet.it> wrote:
>         esattamente dopo avere ottentu il numero interno 123456 come faccio
> a formattarlo in VBA per Excel
>         in un numero  123.456 ?
>

Torniamo al punto di partenza: se Pi (123,456) è *double* la sua
rappresentazione a video dipenderà dall'impostazione (in Strumenti-
>opzioni->internazionali) del separatore decimale:
se è impostata la "virgola" vedrai 123,456 se è impostato il "punto"
vedrai 123.456.
Quindi se il separatore decimale è la virgola non puoi avere un
*double* formattato col punto.
Mi pare che l'esempio sotto sia chiaro:

lorenzoeffe

unread,
Aug 12, 2010, 2:32:49 AM8/12/10
to
Il 12/08/2010 07:50, Elefante ha scritto:
> Bene quasi ci siamo , infatti tu midici ..... vuoi ottenere un
> numero
> intero 123456 che poi vuoi formattare come 123.456 ...
>
> esattamente dopo avere ottentu il numero interno 123456 come faccio
> a formattarlo in VBA per Excel
> in un numero 123.456 ?
>
> Grazie.
>
'se vuoi portare il valore in una cella:
ActiveCell.Value = Format(TextBox1.Value, "#,##0")
'se vuoi visualizzata la formattazione nello stesso text box, formatta
anche il textbox in inizializzazione:
UserForm1.TextBox1.Value = Format(0, "##,##0.00")
'e poi sull'evento modifica:
textbox1.value = Format(TextBox1.Value, "#,##0")
ciao, Lo

Mauro Gamberini

unread,
Aug 12, 2010, 6:31:46 AM8/12/10
to
> Torniamo al punto di partenza: se Pi (123,456) è *double* la sua
> rappresentazione a video dipenderà dall'impostazione (in Strumenti-
>>opzioni->internazionali) del separatore decimale:
> se è impostata la "virgola" vedrai 123,456 se è impostato il "punto"
> vedrai 123.456.
> Quindi se il separatore decimale è la virgola non puoi avere un
> *double* formattato col punto.
>

Se PI è un double, per vb è un double e basta.
E un double per vb ha , (virgola) per le migliaia e
. (punto) per i decimali.
Indipendentemente da come hai settato nelle
opzioni internazionali che non riguardano vb,
ma , in questo caso, Excel lato celle.
L'ho spiegato, credo chiaramente, nel post di ieri.

> Mi pare che l'esempio sotto sia chiaro:
>
> Public Sub m()
> Dim sPi As String
> Dim Pi As Double
> Pi = Range("A1") 'Pi = A1 = 1234,789
>
>
> sPi = Replace(Pi, ",", ".") 'sPi = 1234.789
> MsgBox "Pi: " & Pi & vbCrLf & _
> "SPi: " & sPi
> End Sub
>

Quella che ottieni è ovviamente una stringa
che non puoi utilizzare come numero
(o almeno non restituisce il numero originale).

Scossa

unread,
Aug 12, 2010, 6:36:00 AM8/12/10
to
On 12 Ago, 12:31, "Mauro Gamberini"

<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
>
> Se PI è un double, per vb è un double e basta.
> E un double per vb ha , (virgola) per le migliaia e
> . (punto) per i decimali.
> Indipendentemente da come hai settato nelle
> opzioni internazionali che non riguardano vb,
> ma , in questo caso, Excel lato celle.

Infatti, ho scritto:
*la sua rappresentazione a video .... ", quindi sul foglio excel.

>
> Quella che ottieni è ovviamente una stringa
> che non puoi utilizzare come numero

Infatti, mi sembra che stiamo dicendo la stessa cosa.

Bye!
Scossa

Scossa

unread,
Aug 12, 2010, 6:39:37 AM8/12/10
to
On 12 Ago, 12:31, "Mauro Gamberini"

> E un double per vb ha , (virgola) per le migliaia e


> . (punto) per i decimali.

A voler essere pignoli per vb un double NON ha un separatore per le
migliaia:

Public Sub m()
Dim Pi As Double

Pi = 12345.67

Debug.Print Replace(Pi, ",", ".")
Debug.Print Replace(Pi, ".", ",")

End Sub

Bye!
Scossa

eliano

unread,
Aug 12, 2010, 6:42:55 PM8/12/10
to

Domanda pignola, indiscreta, quasi da rissa:
in Vba come si utilizza il punto delle migliaia di un valore
numerico? :-))
(E per punto delle migliaia si intendono i caratteri di formattazione)
Saluti con cin cin
Eliano

Mauro Gamberini

unread,
Aug 13, 2010, 1:50:34 AM8/13/10
to
> Domanda pignola, indiscreta, quasi da rissa:
> in Vba come si utilizza il punto delle migliaia di un valore
> numerico? :-))
> (E per punto delle migliaia si intendono i caratteri di formattazione)
> Saluti con cin cin
>

Fratello, con te mai nessuna rissa.
Ma, io non so cosa ci sia di così difficile da capire:

Public Sub m()
Dim d As Double
Dim s As String
d = 1234.4567
MsgBox d
s = Format(d, "#,###.0000")
MsgBox s
End Sub

Invertite i separatori e rilanciate.

Scossa

unread,
Aug 13, 2010, 2:36:36 AM8/13/10
to
On 13 Ago, 00:42, eliano <falinieli...@virgilio.it> wrote:
> Domanda pignola, indiscreta, quasi da rissa:

Allora dillo: hai visto che siamo a metà agosto e ci sono pochi
messaggi su mpioe e hai deciso di scatenare la rissa (non la figlia di
Fiona) :-))


> in Vba come si utilizza il punto delle migliaia di un valore
> numerico? :-))
> (E per punto delle migliaia si intendono i caratteri di formattazione)

Il separatore delle migliaia, al contrario di quello decimale, esiste
solo nella conversione a "stringa", non nella valore memorizzato:

Public Sub m()
Dim Pi As Double

Pi = 12345.67

Range("A1").Value = Pi '
Range("A1").NumberFormat = "#,##0.00"
Debug.Print Pi
Debug.Print Range("A1").Value '12345,67
Debug.Print Range("A1").Text '12.345,67
End Sub

Ma, ribadisco, continuamo a dire la stessa cosa.

Bye!
Scossa

Scossa

unread,
Aug 13, 2010, 2:47:24 AM8/13/10
to
On 13 Ago, 07:50, "Mauro Gamberini"

> Ma, io non so cosa ci sia di così difficile da capire:
>
>

Per quello che mi riguarda, nulla, se si vuole usare il / operare sul
separatore delle migliaia si deve "agire" sulla converisone in stringa
del double (vedi risposta a Eliano).

Altrimenti .... probabilmente non ho capito di cosa stiamo
parlando :-)

Bye!
Scossa

Mauro Gamberini

unread,
Aug 13, 2010, 5:06:26 AM8/13/10
to
> Altrimenti .... probabilmente non ho capito di cosa stiamo
> parlando :-)
>

https://sites.google.com/site/e90e50/documento-plinius

--
--------> -------------------

eliano

unread,
Aug 13, 2010, 5:24:47 PM8/13/10
to
On 13 Ago, 07:50, "Mauro Gamberini"

Fratello, mi sa che stiamo diventando schizzinosi.
Quello che intendevo dire, e voleva essere una battuta, riguardava i
caratteri della formattazione che io considero da prendere in
considerazione in output (Msg, cella, userform et similia), ma che al
Vba, per valori numerici ovviamente, non interessano, anzi.:-))
Statemi bbbuoni,
Eliano

0 new messages