Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Controllare i decimali inseriti

Ultimo Aggiornamento: 01/12/2016 12:00
Post: 1
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
26/09/2016 11:45

Buongiorno a tutti/e, mi chiamo Tomas e mi sono appena iscritto al forum.
Vorrei un vostro aiuto se possibile.
In un foglio di lavoro Excel, nell'intervallo B1:B400 voglio che gli utilizzatori possano inserire solo numeri con 2 cifre decimali, in caso contrario vorrei far comparire un messaggio pop up che spieghi l'errore fatto.
E' possibile?
Grazie a chi mi vorrà aiutare.

PS: uso excel 2010
Post: 852
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Senior
365
OFFLINE
26/09/2016 12:10

Ciao
ma se formatti la colonna a due decimali
possono scrivere anche migliaia di decimali il risultato sarà sempre di due decimali
o vuoi con il vba limitarli
Post: 1
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
26/09/2016 12:49

Ciao,
formattando le celle ciò si limita alla visualizzazione mentre i decimali in più o in meno vengono comunque utilizzati per eventuali calcoli.
Per esempio:
se inserisco 21,134 visualizzo 21,13 ma se moltiplico tale valore per due ottengo 42,268 e non 42,26 (21,13*2) come voglio.
Post: 3.377
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
26/09/2016 12:58

è ammesso scrivere 1 o nessun decimale ?

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 2
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
26/09/2016 14:13

Ciao,
devono immettere DUE cifre decimali.
Se inseriscono 21, diventerà 21,00
Se inseriscono 21,1 diventerà 21,10
Se inseriscono 21,136, diventerà 21,14.
Grazie.
[Modificato da aletomas 26/09/2016 14:15]
Post: 261
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Junior
Excel2019
OFFLINE
26/09/2016 15:42

Ciao
Puoi farlo SOLO con VBA inserendo il codice sottostante nel Modulo del Foglio interessato.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
    ActiveCell = Round(Target.Value, 2)
End If
End Sub


Fai sapere. Ciao,
Mario

PS - Dimenticavo: la colonna va formattata come numero con due decimali
[Modificato da Marius44 26/09/2016 15:47]
Post: 3
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
26/09/2016 16:03

Ciao,
ho provato ma non funziona....
Ho semplicemente aperto VBA, inserisci - modulo e copiato quanto scritto e dopo aver formattato la colonna ho salvato.
Sbaglio qualcosa io?
Post: 748
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
26/09/2016 16:27

Ciao

se ti accontenti di una cella che segnala l'errore:
=SE(LUNGHEZZA(STRINGA.ESTRAI(A1;TROVA(",";A1)+1;LUNGHEZZA(A1)))=2=FALSO;"Inserire 2 decimali";"Ok")


Saluti
Domenico
Win 10 - Excel 2016
Post: 749
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
26/09/2016 16:37

...oppure da inserire nel VBA DEL FOGLIO INTERESSATO:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
    N = Target.Value
    If Len(Split(N, ",")(1)) <> 2 Then
        MsgBox "Inserire 2 decimali"
        Target.Select
    End If
End If
End Sub


Saluti

[Modificato da dodo47 26/09/2016 16:39]
Domenico
Win 10 - Excel 2016
Post: 262
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Junior
Excel2019
OFFLINE
26/09/2016 16:39

Ciao
Oltre all'ottimo consiglio di dodo47 (ciao Domenico) devi fare attenzione a quello che ti si dice:


nel Modulo del Foglio interessato



Io non ho detto apri VBA e inserisci Modulo!
Devi aprire VBA, fare doppioclick, nella parte sinistra della finestra, sul Foglio che ti interessa e nel riquadro di destra menu a tendina di sinistra cliccare su Worksheet. A questo punto cancella tutto quello che c'è scritto e copia/incolla la mia macro.

Ciao,
Mario

PS. scusa dodo, ci siamo accavallati.
[Modificato da Marius44 26/09/2016 16:40]
Post: 750
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
26/09/2016 16:40

Ciao Mario....io l'ho interpretato diversamente, cioè l'obbligo di inserire 2 decimali, no l'arrotondamento....vediamo

cari saluti
Domenico
Win 10 - Excel 2016
Post: 4
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
26/09/2016 17:38

Grazie a tutti per la velocità di risposta ma:
- la macro di Marius funziona ma crea il giusto numero con due cifre decimali sotto all'eventuale numero inserito in maniera scorretta
- la macro di Dodo non mi funziona come anche la sua formula

Cerco di spiegarmi in modo più chiaro possibile.
Voglio che i miei colleghi inseriscano nell'intervallo B6:B400 solo numeri con due cifre decimali ergo:
- se inseriscono 21 devo ottenere 21,00
- se inseriscono 21,1 devo ottenere 21,10
- se inseriscono 21,124 devo ottenere 21,12
- se inseriscono 21,126 devo ottenere 21,13 (quindi arrotondando in modo corretto)
Nel file in questione ho aggirato il problema con la funzione ARROTONDA nella colonna adiacente ma preferirei evitare tale soluzione.
Allego file.

Grazie a tutti e scusate se sono un po' "duro" [SM=g27819]
Post: 752
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
26/09/2016 18:15

Re:
aletomas, 26/09/2016 11.45:

In un foglio di lavoro Excel, nell'intervallo B1:B400 voglio che gli utilizzatori possano inserire solo numeri con 2 cifre decimali, in caso contrario vorrei far comparire un messaggio pop up che spieghi l'errore fatto.
E' possibile?
Grazie a chi mi vorrà aiutare.

PS: uso excel 2010



Ciao
io ho interpretato che l'utente deve inserire 2 decimali, e la mia formula e la macro funzionano in tal senso.

Poi se quanto chiedi è diverso, cioè vuoi l'arrotondamento a 2 cifre decimali, il discorso cambia.

saluti

Domenico
Win 10 - Excel 2016
Post: 263
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Junior
Excel2019
OFFLINE
26/09/2016 18:16

Ciao
probabilmente hai il PC che quando clicchi su Invio la cella attiva diventa quella sotto.
Ecco la macro corretta (non "dovrebbe" dare più quel problema)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then

    ApplicationEnableEvetnts = False    '<== riga aggiunta

    ActiveCell = Round(Target.Value, 2)

    ApplicationEnableEvetnts = True     '<== riga aggiunta

End If
End Sub

Fai sapere. Ciao,
Mario
Post: 753
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
26/09/2016 18:26

Ciao Mario
forse sarebbe il caso di scrivere: target=... al posto di activecell evitando di disabilitare gli eventi che non credo funzioni con l'evento change.

cari saluti
[Modificato da dodo47 26/09/2016 18:43]
Domenico
Win 10 - Excel 2016
Post: 853
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Senior
365
OFFLINE
26/09/2016 19:16

Ciao

non mi torna qualcosa


se inserisco 21,134 visualizzo 21,13 ma se moltiplico tale valore per due ottengo 42,268 e non 42,26 (21,13*2) come voglio.



ergo non vuoi un arrotonda ma un tronca


- se inseriscono 21,126 devo ottenere 21,13 (quindi arrotondando in modo corretto)



non corrisponde a quanto chiesto sopra e ti basterebbe la formattazione

o non capisco

in qualsiasi caso
la macro di Dodo mi sembra quella che fa il caso tuo

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
N = Target.Value
If Len(Split(N, ",")(1)) <> 2 Then
MsgBox "Inserire 2 decimali"
Target.Select
End If
End If
End Sub



obbliga l'operatore a scrivere solo due decimali


[Modificato da federico460 26/09/2016 19:19]
Post: 5
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
27/09/2016 09:36

@ Federico460: io voglio che il numero abbia due decimali ed in caso di inserimento di tre o quattro decimali , la cifra sia arrotondata al secondo decimale:
es. 21,126 diventa 21,13 e non 21,12.
21,2 diventa 21,20
21 diventa 21,00

@Marius44: il problema mi si ripresenta anche con la macro nuova

Se può essere di aiuto, nel messaggio precedente ho allegato il file in questione.

Thanks!
Post: 755
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
27/09/2016 10:19

Ti ho già detto che devi usare target=... e non activecell=....




[Modificato da dodo47 27/09/2016 10:19]
Domenico
Win 10 - Excel 2016
Post: 6
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
27/09/2016 11:24

Re:
dodo47, 27/09/2016 10.19:

Ti ho già detto che devi usare target=... e non activecell=....




Perfetto, grazie mille Marius!!!
Quando provo a cancellare i dati inseriti nella colonna B, per inserirne altri, mi appare il seguente pop up:

Errore di run time '13':
Tipo non corrispondente


Perchè?

Post: 756
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
27/09/2016 16:52

Ciao
sostituisci con:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Target = Round(Target.Value, 2)
End If
Application.EnableEvents = True
End Sub


saluti
Domenico
Win 10 - Excel 2016
Post: 7
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
27/09/2016 17:57

Grazie mille, siete eccezionali!!
Vorrei la ciliegina sulla torta.... all'apertura del file ho scritto un codice per visualizzare un messaggio pop up. Funziona tutto ma vorrei formattare il carattere del messaggio in modo da renderli più grandi e magari in grassetto.
Ho provato andando in Strumenti - opzioni - Formato editor dove ho impostato la voce "testo normale" con una dimensione maggiore ma poi non cambia nulla.
Dove sbaglio? [SM=g27818]
Grazie in anticipo.
Post: 378
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
27/09/2016 19:35

Non mi risulta che si può formattare il testo di un MsgBox, solo aggiungere il ritorno a capo.
Ti conviene creare ed utilizzare una UserForm.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 8
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
27/09/2016 20:31

Re:
rollis13, 27/09/2016 19.35:

Non mi risulta che si può formattare il testo di un MsgBox, solo aggiungere il ritorno a capo.
Ti conviene creare ed utilizzare una UserForm.



...e qui casca l'asino ovvero io [SM=g27833]

Post: 379
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
27/09/2016 21:45

Quando sei nel VBA clicca il menu "Inserisci" e scegli "Userform" e ne regoli le dimensioni. Si è creata la "UserForm1" e tramite i "Controlli" della "Casella degli Strumenti" (se non compare da sola la trovi nel menu "Visualizza") ci metti dentro una "Casella di Testo" (terza icona). Nella casella di testo ci scrivi il messaggio e poi nella proprietà (se non compare trovi nel menu "Visualizza / Finestra Proprietà") della casella (TextBox1) cambi i valori della formattazione del testo (Font), dello sfondo (BackColor), dei bordi (BorderColor), il titolo (Caption) ed altro ancora.
Per visualizzarla all'avvio del file ti basta aggiungere nel modulo "Questa_cartella_di_lavoro"(ThisWorkBook) il seguente codice:
Option Explicit
Private Sub Workbook_Open()
    UserForm1.Show
End Sub
[Modificato da rollis13 27/09/2016 21:51]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 9
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
28/09/2016 09:55

Ho mostrato il file ai colleghi/superiori ed è piaciuto molto, grazie mille!
Visto che i dati dovranno essere inseriti anche da persone che hanno poca/nulla dimestichezza con excel, ci sarebbero tre cose da aggiungere:
1- ad ogni salvataggio, bisogna specificare che il file è un modello con attivazione macro di excel e poi si deve specificare il percorso che nel nostro caso sarebbe
\\CONSAMB-SRV5\UFF-Laboratorio\Carte di controllo
Non si può fare tutto ciò in automatico?
2- salvando il file, in automatico viene aggiunto un "1" al nome del file, perchè?
3- il file funziona alla grande ma, se cancello più dati inseriti contemporaneamente non ho nessun problema mentre se ne elimino una alla volta, la cella non rimane vuota ma visualizza "0,00" e questo non va bene.
Ho visto che basterebbe cancellare una cella vicina vuota per aggirare il problema ma preferirei evitare.
Grazie mille!!
Post: 10
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
03/10/2016 16:26

Grazie mille Rollis!!!
Sono riuscito a creare la user form con un bottone di comando che però non riesco a gestire.... come faccio a fare in modo che ci debba cliccare sopra per poter inserire i dati?
Post: 384
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
03/10/2016 22:44

Quando sei nel vba con la visualizzazione dell'userform, con il Pulsante di Comando se ci clicchi sopra si apre il Pannello del Codice e ci troverai generato automaticamente la relativa macro del tipo:
Private Sub CommandButton1_Click()

End Sub
nella quale andrai a scrivere quello che vuoi far fare:
Private Sub CommandButton1_Click()

  UserForm1.Hide    'questo ti servirà per nascondere l'userform

  'e qui dovrai scrivere il codice per indicare
  'cosa intendi far fare una volta cliccato il
  'pulsante. Nel tuo caso andare nel foglio del-
  'l'inserimento dei dati. Esempio:
  Sheets("Foglio1").Select
  'o richiamare una macro o quant'altro.

End Sub
[Modificato da rollis13 03/10/2016 22:52]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 11
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
04/10/2016 10:03

Grazie mille, in questi giorni provo.
Sfrutto la tua gentilezza per chiederti un chiarimento.
Grazie all'aiuto di Marius e Dodo ho creato il foglio di lavoro che volevo ma, mi sono accorto che c'è un piccolo problema.
Nelle colonne non interessate dalla macro avevo inserito varie formule che persistono nel foglio, e fin qui tutto ok, tuttavia se ora provo a modificarle, nella cella visualizzo si il risultato aggiornato ma tale formula non rimane "agganciata" alla cella, sparisce...come se non l'avessi mai scritta.
Hai una spiegazione in merito?
Grazie mille
[Modificato da aletomas 04/10/2016 10:22]
Post: 385
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
04/10/2016 16:39

Ehm, non ho la palla di cristallo. Forse è il caso di allegare il tuo file attuale (senza eventuali dati sensibili) e magari con evidenziata la zona/le zone delle formule (monelle [SM=g27824] ).

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 12
Registrato il: 26/09/2016
Città: BERGAMO
Età: 45
Utente Junior
excel 2010
OFFLINE
01/12/2016 12:00

Scusate se non ho più risposto ma ho avuto alcuni problemi.
Comunque ho risolto, salvavo il file come "modello"....che p***a.
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 09:42. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com