› Excel e gli applicativi Microsoft Office › cella con convalida di numeri e lettere
-
AutoreArticoli
-
Buongiorno e grazie in anticipo per ciò che potrete fare.
Ho la necessità che in una cella sia obbligatorio digitare un codice di tre numeri e tre lettere. Es. 123abc. In questo preciso ordine, per un totale di 6 lettere. Ho pensato di usare il comando Convalida con la seguente formula posta in "Personalizzato":
=E(VAL.NUMERO(VALORE(SINISTRA(A13;3)));VAL.TESTO(DESTRA(A13;3));LUNGHEZZA(A13)=6).
Viene controllata la lunghezza correttamente, viene impedito di scrivere lettere iniziali, ma si riesce comunque a scrivere 6 numeri.
L'alternativa è di mettere le lettere in una cella e i numeri nell'altra e poi usare la convalida per affiancarli ma volevo sapere se è possibile evitare questa soluzione.
Grazie mille.
I.
Secondo me la tua idea è buona, ma andrebbe modificata la condizione...
Per i numeri ---> ">= 000" & "<= 999"
Per i caratteri --> ">= aaa" & "<= zzz"
Ovviamente sempre con la tua convalida dati
Grazie del suggerimento,
intendevi:
=E(VAL.NUMERO(VALORE(SINISTRA(A13;3)))=">= 000" & "<=999";VAL.TESTO(DESTRA(A19;3))=">= aaa" & "<= zzz")?
così però non mi funziona.
grazie
Buonasera
aggiungi la parte in rosso alla tua formula
=E(VAL.NUMERO(VALORE(SINISTRA(A13;3)));VAL.TESTO(DESTRA(A13;3));LUNGHEZZA(A13)=6;NON(VAL.NUMERO(A13)))
ciao
e se usassimo una UDF per formattazione condizionale ??
da inserire in un modulo di classe
Option Explicit Function NNNTTT(Stringa As String) As Boolean Dim cs As Long Dim Sec As Boolean Dim A_sc As String cs = 1 If Len(Stringa) = 6 Then For i = 1 To 6 A_sc = Mid(Stringa, i, 1) If cs <= 3 Then If Asc(A_sc) >= 48 And Asc(A_sc) <= 57 Then Sec = True cs = cs + 1 Else Sec = False Exit For End If Else If Asc(A_sc) >= 65 And Asc(A_sc) <= 122 Then Sec = True Else Sec = False Exit For End If End If Next i Else Sec = False End If NNNTTT = Sec End Functionin FC basta inserire la seguente stringa =NNNTTT(A1)=FALSO e mettere un colore
allego il file di prova per verifica
Allegati:
You must be logged in to view attached files.grazie a tutti, ho provato quanto suggerito da D@anilo e mi va benissimo. Viste le mie limitate conoscenze mi puoi dare qualche indicazione sullo scopo di Non (Val.Numero..? i tre argomenti precedenti restituivano tutti VERO come risultato.
Per quanto riguarda la risposta di Mister X, non ho conoscenze di VBA ma il mio scopo è di obbligare a scrivere un codice corretto non dievidenziare ciò che già di sbagliato c'è, cosa che fa la formattazione condizionale, ovviamente posso aver frainteso completamente il tuo suggerimento.
Comunque grazie mille a tutti.
Ciao
La formula che avevi scritto controllava che i primi tre caratteri erano numeri che i secondi tre erano testi e che la lunghezza Max consentita era 6 Ora ti faceva inserire sei numeri con il quarto criterio gli dico:se i dati sono numeri restituisci FALSO...come? Se scrivi
VAL.NUMERO(A13) se in cella A13 metti 6 numeri ti restituisce VERO noi abbiamo bisogno del FALSO per impedirel''inserimento quindi metti tutto dentro la funzione NON che trasforma i veri in FALSO e viceversa
ciao
due spiegazioni in base alla domanda fatta da te di valutare una stringa formata dai primi tre caratteri numerici
0-9 i secondi tre alfabetici A-z ( 123abc )
quindi se passiamo in questo caso la valutazione alla formula di Danilo , che saluto , questa restituisce VERO ed anche la NNNTTT() restituisce VERO ma se diamo la verifica ad una stringa di testo del tipo
( 123a9c ) la prima restituisce sempre VERO in quanto 123 numerico a9c alfabetico , mentre NNNTTT() ti restituisce FALSO in quanto rileva un numero al suo interno ( a 9<numerico c ) e non tutti valori alfabetici
in questo caso sta a te valutare se la stringa si puo' definire VERA o FALSA
quindi se dobbiamo valutare 3 numeri e 3 alfabetici bisogna scrivere una formula un pochino differente
ti ripasso il file con le due formule di valutazione alla cella A13 per farti capire la differenza
ciao
PS oggi provo a implementare una formula con questa di valutazione
Allegati:
You must be logged in to view attached files.Ciao,
La formula che avevi scritto controllava che i primi tre caratteri erano numeri che i secondi tre erano testi e che la lunghezza Max consentita era 6 Ora ti faceva inserire sei numeri con il quarto criterio gli dico:se i dati sono numeri restituisci FALSO...come? Se scrivi
In realtà la tua formula consente di inserire anche stringhe come 123ab4 o 123ab# ...
Una possibile alternativa, che non convalida le stringhe del tipo citato sopra:
=E(LUNGHEZZA(A13)=6;VAL.NUMERO(--SINISTRA(A13;3));STRINGA.ESTRAI(A13;{4\5\6};1) >= "a")ammette però le lettere accentate. Se fosse un problema si può modificare utlizzando la funzione Codice e complicando un po' la formula.
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)grazie a tutti delle spiegazioni.
Ho provato ad inserire quanto suggerito da Scossa ma mi dice che "non è possibile usare operatori di riferimento o costanti di matrice per i criteri di convalida dati".
Non riesco quindi a portarlo a termine.
i.
Ciao
la puoi modificare cosi
=E(LUNGHEZZA(A13)=6;VAL.NUMERO(--SINISTRA(A13;3));STRINGA.ESTRAI(A13;RIF.RIGA(4:6);1)>="a")
Ho provato ad inserire quanto suggerito da Scossa ma mi dice che "non è possibile usare operatori di riferimento o costanti di matrice per i criteri di convalida dati".
scusate, ho stupidamente preso in considerazione solo la formula, senza considerare che doveva essere usata nell F.C..
Ottima la correzione proposta da Danilo.
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)ciao
scusate ma ho fatto delle prove e anche con l'ultima di Danilo , se metto nella cella A13 un testo cosi ( 123a3c ) mi ritorna sempre un VERO mentre se analizzo la sequenza dovrebbe ritornare FALSO in quanto e' inserito tra a e c un valore 3, quindi da come la vedo bisogna analizzare tutte le lettere separatamente,
questo pero se facciamo una verifica in una cella e confermiamo la formula come matriciale il ritorno e' esatto FALSO , ma in un FC non possiamo inserire una formula matriciale, e quindi viene preso in considerazione solo il 4° carattere ( 123a3c )
ciao da Mister_x
riciao
una possibile soluzione modificando la formula di danilo.
=E(LUNGHEZZA(A13)=6;VAL.NUMERO(--SINISTRA(A13;3));STRINGA.ESTRAI(A13;4;1)>="a";STRINGA.ESTRAI(A13;5;1)>="a";STRINGA.ESTRAI(A13;6;1)>="a")
quindi possiamo in questo caso in FC inserire questa
=E(LUNGHEZZA(A13)=6;VAL.NUMERO(--SINISTRA(A13;3));STRINGA.ESTRAI(A13;4;1)>="a";STRINGA.ESTRAI(A13;5;1)>="a";STRINGA.ESTRAI(A13;6;1)>="a")=FALSO e dare un riferimento alla cella
riciao
-
AutoreArticoli
