Pagina precedente | 1 | Pagina successiva
Facebook  

CALCOLATORE ALFANUMERICO

Ultimo Aggiornamento: 10/11/2018 17.53
Autore
Stampa | Notifica email    
Post: 1
Registrato il: 07/11/2018
Città: CAPIAGO INTIMIANO
Età: 37
Utente Junior
excel per office 365 MSO (16.0.11001.20064)
OFFLINE
07/11/2018 15.29

Ciao a tutti,
dovrei creare una sequenza alfanumerica per numerare delle etichette:
AA0000AA
AA0001AA
AA0002AA
.......
AA9998AA
AA9999AA
AA0000AB
AA0001AB
...ecc fino a ZZ9999ZZ

e una specie di calcolatrice che man mano ci vengono richieste le etichette partendo dall'ultimo seriale prodotto e inserendo la quantità richiesta mi calcola il seriale finale.

Grazie infinite fin da ora per l'aiuto.
Giorgio
Babilonia La Grande, se fosse,,,,Testimoni di Geova Online...118 pt.18/11/2018 19.50 by Roberto 62,5
Macro per file fatture42 pt.18/11/2018 17.23 by alfrimpa
Domitilla SavignoniTELEGIORNALISTE FANS FORU...35 pt.18/11/2018 14.25 by giovannantonio.p@tiscali.
Jolanda De RienzoIpercaforum31 pt.18/11/2018 18.41 by skindeceiver
Post: 2.100
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 70
Utente Veteran
2007 / 13
OFFLINE
07/11/2018 23.55

ciao

cosi a spanne penso che si possa fare utilizzando VBA
due semplici domande
Come stiamo a VBA
dove bisogna registrare tale sequenza

prova a far sapere un qualche particolare in piu'

Ciao da locate
excel 2007 / 13
Post: 3.198
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
08/11/2018 00.22

Sei sicuro di quello che vuoi ottenere da Excel?

Ai fatto due conti di quanti Record (Etichette) dovresti gestire?

Solo per la sequenza AA0000AA:AA9999AZ stiamo parlando di 260.000 Record; o mi sbaglio?

Poi dovrai arrivare fino a ZZ9999ZZ.

Non so quale Release di Excel pensavi di utilizzare, ma, anche nella migliore delle ipotesi, avresti 1.048.576 di Record da poter inserire in ogni Colonna.

Personalmente, quando parto a progettare una Procedura, preliminarmente mi chiedo:
-   Quanti record dovrò gestire?
-   Per gestire questo volume di Record, quale strumento posso utilizzare?
-   Quante e quali Persone dovranno utilizzare la Procedura?
-   Chi dovrà gestire la manutenzione della Procedura una volta attivata?



Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 3.994
Registrato il: 21/06/2013
Città: NAPOLI
Età: 65
Utente Master
Excel 2013
ONLINE
08/11/2018 10.02

Ciao a tutti

Se pensiamo al sistema delle targhe alfanumeriche AA000AA il numero delle combinazioni possibili sono oltre 234 milioni.

Se poi i numeri son 4 e non 3 fate un po’ voi i conti.

Alfredo
Post: 2.101
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 70
Utente Veteran
2007 / 13
OFFLINE
08/11/2018 10.03

ciao Gress81

intanto saluto Giuseppe , visto adesso che alfredo a postato approfitto per salutare anche lui

comunque visto che non ai ancora dato indicazioni , questa mattina ti ho
preparato una sub() o Macro che fa questo lavoro
non avendo nessuna indicazione ho scritto in A1 la sequenza di partenza
e da A2 A20 la relativa continuazione

comunque ti posto il file con inserita questa per farti capire
PS io ho elaborato in base alle tue prime indicazioni


Sub SecAlfaNum()
Dim i As Long
Dim A1 As Long, A2 As Long, N4 As Long, A7 As Long, A8 As Long
A1 = Asc(Mid(UCase(Cells(1, 1)), 1, 1))
A2 = Asc(Mid(UCase(Cells(1, 1)), 2, 1))
N4 = Mid(UCase(Cells(1, 1)), 3, 4) + 0
A7 = Asc(Mid(UCase(Cells(1, 1)), 7, 1))
A8 = Asc(Mid(UCase(Cells(1, 1)), 8, 1))
For i = 2 To 20
Cells(i, 1) = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
N4 = N4 + 1
If N4 > 9999 Then
N4 = 0
A8 = A8 + 1
End If
If A8 > 90 Then
A8 = 65
A7 = A7 + 1
End If
If A7 > 90 Then
A7 = 65
A2 = A2 + 1
End If
If A2 > 90 Then
A2 = 65
A1 = A1 + 1
End If
Next i
End Sub




[Modificato da locatevaresino 08/11/2018 10.04]
Ciao da locate
excel 2007 / 13
Post: 3.995
Registrato il: 21/06/2013
Città: NAPOLI
Età: 65
Utente Master
Excel 2013
ONLINE
08/11/2018 10.40

Ciao Locate

A me la tua macro non funziona mi dà Chiamata di routine o argomento non validi ma il debug non mi evidenzia nessuna istruzione.

Alfredo
Post: 1
Registrato il: 07/11/2018
Città: CAPIAGO INTIMIANO
Età: 37
Utente Junior
excel per office 365 MSO (16.0.11001.20064)
OFFLINE
08/11/2018 10.46

Grazie a tutti per l'interessamento.
Dopo le vostre prime risposte ho cercato di informarmi seguendo i Vs. suggerimenti e sto mio malgrado scoprendo che sono davvero inesperto sull'utilizzo di Exel. Fino ad ora probabilmente lo sfruttavo a meno dell'1% delle sue potenzialità.

Gestire un Record così in effetti non è pensabile, ma vedendo la macro creata da Locate, (che funziona perfettamente) mi fa sperare che la seconda richiesta del calcolatore sia più fattibile.

Cerco di spiegare meglio:
Il mio problema principale non è per la produzione delle etichette, la stampante mi può gestire le serializzazioni, ma è sulla gestione dell'ordine.
Esempio: se siamo arrivati al seriale AC1257XG e mi vengono ordinate 15235 etichette dobbiamo calcolarci a mano il seriale finale.

L'ideale sarebbe una casella dove inserire seriale di partenza, una per il quantitativo richiesto ed una con il risultato del numero finale.

Grazie ancora spero di essere stato più chiaro.
Post: 672
Registrato il: 02/08/2015
Utente Senior
Excel 2013
OFFLINE
08/11/2018 10.59

Ciao a tutti,
modificando leggermente il codice di locate (ciao) si può ottenere tranquillamente quello che chiedi... ma ci penserà lui [SM=g27811]

Per esercizio, proverò a farlo con qualche cella d'appoggio e alcune formule... comunque, come ti è stato detto, è meglio allegare un file d'esempio che rispecchi esattamente il tuo file, specialmente se dopo non sei in grado di adattare il codice/formule alle tue reali esigenze.

Ciao
Tore
Post: 2.102
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 70
Utente Veteran
2007 / 13
OFFLINE
08/11/2018 11.35

ciao

utilizziamo in questo caso una UDF creata per questo lavoro
modifica parziale della sub() o macro di prima

da inserire in un modulo

Option Explicit
Public Function SecAlfNum(ByVal Alfnum As Range, ByVal Netic As Long) As String
Dim Sequenza As String
Dim i As Long
Dim A1 As Long, A2 As Long, N4 As Long, A7 As Long, A8 As Long
A1 = Asc(Mid(UCase(Alfnum), 1, 1))
A2 = Asc(Mid(UCase(Alfnum), 2, 1))
N4 = Mid(UCase(Alfnum), 3, 4) + 0
A7 = Asc(Mid(UCase(Alfnum), 7, 1))
A8 = Asc(Mid(UCase(Alfnum), 8, 1))
For i = 1 To Netic
''Sequenza = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
N4 = N4 + 1
If N4 > 9999 Then
N4 = 0
A8 = A8 + 1
End If
If A8 > 90 Then
A8 = 65
A7 = A7 + 1
End If
If A7 > 90 Then
A7 = 65
A2 = A2 + 1
End If
If A2 > 90 Then
A2 = 65
A1 = A1 + 1
End If
Sequenza = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
Next i
SecAlfNum = Sequenza
End Function




utilizzo esempio
in A1 la tua ultima etichetta AC1257XG
in B1 il quantitativo numerico 15235
in C1 =SecAlfnum(A1;B1) risultato AC6492XH

allego il solito file con inserita anche la funzione

Ciao da locate
excel 2007 / 13
Post: 3.199
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
08/11/2018 13.13

Buona giornata a Tutti;

@locatevaresino, perdonami ma io avrei un risultato piuttosto diverso; AC7616XH

Premesso che a mio avviso non è una soluzione da proporre in Excel, ne tantomeno in un Forum, per ottenere questo ho utilizzato:
-    in Cella "A1", solo come promemoria, "AC1257XG"
-    in Cella "B1", 15.235
-    in Cella "A2", 1257; Formato Cella Personalizzato  "AC"0000"XG"
-    in Cella "A3", Formato Cella Personalizzato  "AC"0000"XG" la Formula:
=SE(CONTA.NUMERI($A$2:A2)+1>=$B$1;"";A2+1)

da copiare fino alla Cella "A8744"
-    in Cella "B2", Formato Cella Personalizzato  "AC"0000"XH" la Formula:
=SE(CONTA.NUMERI($A$2:A2)+1>=$B$1;"";0)

-    in Cella "B3", Formato Cella Personalizzato  "AC"0000"XH" la Formula:
=SE(CONTA.NUMERI($A$2:B2)+1>=$B$1;"";B2+1)

da copiare fino alla Cella "B8744"

Da questa struttura, ripeto, improponibile, il Record 15.235 lo trovo in Cella "B7618" che propone   AC7616XH



A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 2
Registrato il: 07/11/2018
Città: CAPIAGO INTIMIANO
Età: 37
Utente Junior
excel per office 365 MSO (16.0.11001.20064)
OFFLINE
08/11/2018 13.48

Spettacolo Locatevaresino,
c'è solo un particolare che mi sembra inesatto.
Allego il tuo file elaborato da me per spiegarmi meglio:
Nel primo campo inserisco il mio N° di partenza, nel secondo il quantitativo da stampare ed in automatico compare il risultato nel terzo.
Ma il risultato andrebbe scalato di 1.
Da esempio si vede che partendo da AA0000AA e produco 10 seriali mi da come risultato AA0010AA (invece sarebbe AA0009AA perchè va conteggiato anche il primo seriale).

Giusto!?

Non è un problema potrei rinominare la prima colonna con "Ultimo N° stampato" ed il risultato sarebbe perfetto.

Grazie
Post: 2.103
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 70
Utente Veteran
2007 / 13
OFFLINE
08/11/2018 14.40

ciao

quindi in questo caso il valore che tu inserisci in A1 sarebbe gia' l'inizio della sequenza e non il finale di quella di prima ???? Giusto

la funzione e' gia predisposta a questo basta togliere le due virgolette ad inizio for
da cosi
For i = 1 To Netic
''Sequenza = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
N4 = N4 + 1
a cosi
For i = 1 To Netic
Sequenza = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
N4 = N4 + 1

e in fondo da cosi
End If
Sequenza = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
Next i
a cosi
End If
''Sequenza = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
Next i

il gioco e' fatto


ciao Giuseppe
se facciamo un rapido calcolo vediamo il risultato
partiamo dai due valori proposti ricordando l'ultimo aggiornamento al calcolo
AC1257XG e Netic.15235
facciamo un rapido calcolo 1257+15235=16492
a questi dobbiamo togliere il valore do 10001 perché questo 1 equivale all'azzeramento del cambio di AC1257XG
quindi avremo un valore di 6491 e quindi il nostro risultato e' pari a
AC6491XG e la G diventa H quindi il risultato sarebbe AC6491XH



Ciao da locate
excel 2007 / 13
Post: 3
Registrato il: 07/11/2018
Città: CAPIAGO INTIMIANO
Età: 37
Utente Junior
excel per office 365 MSO (16.0.11001.20064)
OFFLINE
08/11/2018 16.50

Grazie infinite Locate,
ho modificato la funzione come mi hai detto e funziona perfettamente! 😊
Post: 3.200
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
08/11/2018 17.32

Buona sera, locate;
grazie della tua attenzione.

Il tuo appunto mi ha portato a rivedere il mio File; ovviamente hai ragione tu.

Il mio errore sta nel riferimento delle Formule:
=SE(CONTA.NUMERI($A$2:B2)+1>=$B$1;"";B2+1)

che deve essere:
=SE(CONTA.NUMERI($A$2:$A$8744)+CONTA.NUMERI($B$2:B2)+1>=$B$1;"";$B2+1)


Chiedo scusa per il refuso.




Grazie del tempo che mi hai dedicato.

Buona serata.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 2.105
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 70
Utente Veteran
2007 / 13
OFFLINE
08/11/2018 19.04

ciao

ciao Giuseppe, siamo qui tutti per aiutarci a vicenda a risolvere problemi
intanto ne approfitto per caricare la funzione con alcune modifiche rendendola piu' veloce

Option Explicit
Public Function SecAlfNum(ByVal Alfnum As Range, ByVal Netic As Long) As String
Dim i As Long
Dim A1 As Long, A2 As Long, N4 As Long, A7 As Long, A8 As Long
A1 = Asc(Mid(UCase(Alfnum), 1, 1))
A2 = Asc(Mid(UCase(Alfnum), 2, 1))
N4 = Mid(UCase(Alfnum), 3, 4) + 0
A7 = Asc(Mid(UCase(Alfnum), 7, 1))
A8 = Asc(Mid(UCase(Alfnum), 8, 1))
For i = 1 To Netic - 1
N4 = N4 + 1
If N4 > 9999 Then
N4 = 0
A8 = A8 + 1
End If
If A8 > 90 Then
A8 = 65
A7 = A7 + 1
End If
If A7 > 90 Then
A7 = 65
A2 = A2 + 1
End If
If A2 > 90 Then
A2 = 65
A1 = A1 + 1
End If
Next i
SecAlfNum = Chr(A1) & Chr(A2) & Format(N4, "0000") & Chr(A7) & Chr(A8)
End Function



tolto una variabile stringa quindi ho impegnato meno la memoria
Ciao da locate
excel 2007 / 13
Post: 3.595
Registrato il: 04/07/2012
Città: BARCELLONA POZZO DI GOTTO
Età: 56
Utente Master
2010
OFFLINE
10/11/2018 17.53

ciao
la mia proposta con formule in c2:
=CODICE.CARATT(65+RESTO(INT((B2+VALORE(STRINGA.ESTRAI(A2;3;4))+(CODICE(SINISTRA(A2;1))-65)*260000*26*26+(CODICE(STRINGA.ESTRAI(A2;2;1))-65)*260000*26+(CODICE(STRINGA.ESTRAI(A2;7;1))-65)*260000+(CODICE(DESTRA(A2;1))-65)*10000)/(26*26*260000));26))&CODICE.CARATT(65+RESTO(INT((B2+VALORE(STRINGA.ESTRAI(A2;3;4))+(CODICE(SINISTRA(A2;1))-65)*260000*26*26+(CODICE(STRINGA.ESTRAI(A2;2;1))-65)*260000*26+(CODICE(STRINGA.ESTRAI(A2;7;1))-65)*260000+(CODICE(DESTRA(A2;1))-65)*10000)/(26*260000));26))&TESTO(RESTO(B2+VALORE(STRINGA.ESTRAI(A2;3;4));10000);"0000")&CODICE.CARATT(65+RESTO(INT((B2+VALORE(STRINGA.ESTRAI(A2;3;4))+(CODICE(SINISTRA(A2;1))-65)*260000*26*26+(CODICE(STRINGA.ESTRAI(A2;2;1))-65)*260000*26+(CODICE(STRINGA.ESTRAI(A2;7;1))-65)*260000+(CODICE(DESTRA(A2;1))-65)*10000)/260000);26))&CODICE.CARATT(65+RESTO(INT((B2+VALORE(STRINGA.ESTRAI(A2;3;4)))/10000)+CODICE(DESTRA(A2;1))-65;26))
[Modificato da ninai 10/11/2018 17.54]



--------------------------------------------------
"So che spiegare il proprio problema, in modo comprensibile, richiede un certo impegno ed è un lavoro "palloso", ma qualcuno lo deve pur fare ....., indovina chi?" (Cit. "Scossa")
--------------------------------------------------
excel 2010 ,
Win 8
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Home Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 20.14. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.5.0.0] - Copyright © 2000-2018 FFZ srl - www.freeforumzone.com