Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi miko » 13/02/19 14:53

Buongiorno,
nel modulo di un foglio ho inserito l'evento Worksheet_Change riferito alla sola cella B4
quest'ultima e' in formato testo, ed il valore inserito in cella viene trasferito alla variabile Num
dichiarata come stringa;
il mio intento e' quello di inserire in cella solo numeri positivi con 2 decimali, che possono essere
entrambi nulli o diversi da zero, ex 123,00 oppure 123,01 oppure 0,12 etc
devo escludere numeri negativi, lettere a,b,c ..., il vuoto, lo spazio dovuto ad una
accidentale pressione della barra spaziatrice, il valore "", forse e' la stessa cosa di vuoto ?,
lo zero , il numero 0,00 ed il numero inserito non deve superare un certo numero di cifre,
nell'esempio ho impostato a 25,
insomma devo inserire solo numeri positivi con 2 decimali ed escludere qualunque altro inserimento,
e nella cella deve esserci sempre un numero mai il vuoto;
ho fatto in questo modo:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Num As String

Num = Worksheets("Foglio8").Range("B4").Value

   If Not Intersect(Target, Range("B4")) Is Nothing Then

        If Not IsNumeric(Num) Or Num = "0,00" Or Num = "0" _
                         Or Len(Num) > 25  Or Left(Num, 1) = "-" Then

          MsgBox valori errati
........................


il codice funziona, ma mi chiedevo se e' corretto o se necessita di modifica, dal momento che devo ripetere
Num = "0,00" Or Num = "0" per escludere questi caratteri.
se inserisco
Num = 0 oppure Num = "" oppure Num = "0" il codice non funziona ed ottengo un messaggio:
"TIPO NON CORRISPONDENTE"
come devo procedere?
grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi Marius44 » 13/02/19 17:52

Ciao
Io cambierei la tua macro con questa
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)

'Dim Num As String

'Num = Worksheets("Foglio8").Range("B4").Value

   If Not Intersect(Target, Range("B4")) Is Nothing Then

        If Not IsNumeric(Target.Value) Then
          GoTo Xit
        ElseIf CDbl(Target) <= 0 Or Len(Target) > 25 Then
          GoTo Xit
        End If
    End If
    Exit Sub
Xit:
  MsgBox "Il dato inserito è errato."
  Application.EnableEvents = False
  Cells(Target.Row, Target.Column).ClearContents
  Application.EnableEvents = True
End Sub


Fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 449
Iscritto il: 07/09/15 22:00

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi miko » 13/02/19 19:17

salve,
ho provato la macro di Marius e funziona perfettamente, grazie.
mi pongo il problema:
la variabile Num è una variabile pubblica usata da altre macro nei moduli, non dei fogli,
e deve essere stringa;
nella tua macro non vi è riferimento a tale variabile;
ciò influisce sulle altre macro, oppure il codice Worksheet_Change ed il codice MIA_MACRO, che si trova modulo standard, sono indipendenti ?
vedo un Exit Sub, in quale punto del codice inserisco call MIA_MACRO ?
ciao e grazie ancora
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi miko » 13/02/19 22:04

buonasera,
testando il codice di Marius, ho modificato, per prova, le due linee if else in questo modo

Codice: Seleziona tutto
......
If Not IsNumeric(Target.Value)  Or CDbl(Target) <= 0
                           _Or Len(Target) > 25 Then
          GoTo Xit
......

ed ottengo il messaggio "TIPO NON CORRISPONDENTE" come prima
non capisco perchè, eppure sono le stesse condizioni.
ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi Marius44 » 13/02/19 23:22

Salve a tutti
Cerco di rispondere ad entrambi i quesiti (anche se mi piacerebbe l'intervento di Anthony47 :lol: )

a) Il frammento di codice che ti ho indicato è basato sull'evento WorkSheet_Change che, per default, fa riferimento a Target. E' indipendente e fa il suo lavoro solo per quello che gli è stato richiesto. A mio sapere non dovrebbe influenzare la variabile num.

b) se nella cella (formattata a testo) scrivi, per esempio, 12k la prima condizione testa che non è numerico, lo segnala e va al mshbox; se la prima condizione è superata (quindi siamo in presenza di un numero, allora entra in ballo la seconda condizione che testa, convertendo il dato in un numero con la funzione CDbl, se è negativo o pari a zero OPPURE se la lunghezza è superiore a 25.

Spero che il "boss" Anthony avalli quanto sopra.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 449
Iscritto il: 07/09/15 22:00

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi Anthony47 » 13/02/19 23:39

Ecco qua il bidello con i suoi commenti...

Innanzitutto: ma non basta formattare la cella come Numero, e poi porre una convalida con numero decimale, maggiore di 0.0001 e minore di xxxxxxx (il tuo max di cifre)?

Quanto all'istruzione che va in errore, bisogna tenere presente che nella formulazione di Miko ambedue le condizioni vengono sempre elaborate; quindi se il valore di Target non e' numerico, la conversione in numero (CDbl) fallira' generando l'errore.

La macro di Mario non popola la variabile Num, e si esaurisce con la Exit Sub nel caso che tutto sia regolare; quindi se la Tua_Macro e' da richiamare se tutto e' regolare allora la richiamerai in questo modo:
Codice: Seleziona tutto
    End If
    Num = Target.Cells(1, 1).Value
    Call MIA_MACRO
    Exit Sub
Xit:

Quanto al fatto che Num sia Public, tieni presente che se poi la dichiari anche nella Sub Worksheet_Change (come vedo fatto nella tua macro di partenza) allora la macro non fara' riferimento alla "Num" pubblica ma a un'altra variabile privata.

Ciao a tutti
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16454
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi miko » 15/02/19 22:42

Buonasera,
il quesito posto sorge per il fatto che ho scoperto, leggendo argomenti nel web, il limite di excel di accettare
al massimo 15 numeri, ogni cifra superiore a tale limite si trasforma automaticamente in zero.
per numeri con cifre superiori a 15 si deve formattare la cella in testo od usare un textbox.
mi sono posto allora il problema di come procedere in questi casi, più per studio che per necessità.
avevo già provato con la convalida dati, ma non si ottengono risultati soddisfacenti, excel in automatico,
accetta sempre 15 cifre, forse sono io che non imposto correttamente il convalida dati.
ho provato come suggerito da Anthony, ma il mio excel mi permette queste scelte
tra
minore di
maggiore di
etc
ma non
....maggiore di 0.0001 e minore di xxxxxxx (il tuo max di cifre), contemporaneamente.
mi è poco chiara la spiegazione:
...allora la macro non fara' riferimento alla "Num" pubblica ma a un'altra variabile privata

a quale macro ti riferisci la macro Sub Worksheet_Change oppure alla macro richiamata da Sub Worksheet_Change ?
grazie per le vostre spiegazioni
ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi Anthony47 » 16/02/19 00:41

Excel gestisce numeri fino a 10^300, con una precisione fino a 15 cifre significative (nelle ultime versioni sembrano diventate 17, ma non e' ufficiale; comunque per andare sulla luna fu sufficiente una precisione inferiore); se inserisci numeri con piu' cifre significative Excel le memorizzera' con la massima precisione di cui dispone (insomma non lo trasforma in "Zero")

...ma il mio excel mi permette queste scelte
tra
minore di
maggiore di
E' la scelta che devi usare; pero' il valore minimo e massimo lo devi scrivere tu...


Quanto alla variabile Num, volevo dirti che se dichiari in un Mudulo standard una variabile Public e poi all'interno di una Sub dichiari una variabile con lo stesso nome, allora questa Sub (quella che contiene la dichiarazione) usera una sua variabile che non e' la stessa associata alla dichiarazione Public.

E' quello che succede col codice inizialmente pubblicato da te:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Num As String               'QUESTA Num ha validita' all'interno solo di questa Sub
Num = Worksheets("Foglio8").Range("B4").Value
' etc etc


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16454
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi miko » 23/02/19 08:23

Buongiorno,
grazie per le spiegazioni
anche seguendo i suggerimenti di Anthony
Innanzitutto: ma non basta formattare la cella come Numero, e poi...

e
Excel gestisce numeri fino a 10^300, con una precisione fino a 15 cifre.........

ottengo sempre lo stesso risultato che scrivevo all'inizio.
se in una cella imposto: Formato cella--numero--2 decimali e separatore delle migliaia
oppure tramite vba uso Range("B4").NumberFormat = "#,##0.00" oppure Format(Range("B4").Value, "#,##0.00")
oppure con Convalida dati--Decimale--Tra--0.0001 e 999999999999999999 (17 cifre)
ed inserisco il numero di 17 cifre : 123456789012345,67
ottengo: 123.456.789.012.345,00
sono scomparsi i decimali.
per questo dovendo trattare numeri con cifre maggiori di 15 ho trovato che bisogna
usare la cella in formato testo oppure usare un textbox, come scrivevo all'inizio.
se dovessi usare il select-case, del quale non conosco la sintassi e la costruzione del codice,
ed ammesso che si possa usare, come si scriverebbe la mia macro iniziale o quella di Marius?
ciao, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Re: INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO

Postdi Anthony47 » 23/02/19 20:53

Vedi quanto ho scritto in quest'altra discussione: viewtopic.php?f=26&t=110376&p=648080#p648080
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16454
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "INSERIRE SOLO NUMERI POSITIVI IN CELLA FORMATO TESTO":


Chi c’è in linea

Visitano il forum: Nessuno e 24 ospiti