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
chi ti capisce ... è bravo
saluti
r
"r" <robb...@gmail.com> ha scritto nel messaggio
news:e0c1aaeb-f4b0-4902...@5g2000yqz.googlegroups.com...
> 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
"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:bfb8534c-55fa-46b9...@q22g2000yqm.googlegroups.com...
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
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
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/
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
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:
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).
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
> 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
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
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.
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
> 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
https://sites.google.com/site/e90e50/documento-plinius
--
--------> -------------------
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