• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Oplopende nummering met letters EN cijfers

Status
Niet open voor verdere reacties.

Uithoorn

Gebruiker
Lid geworden
17 aug 2015
Berichten
14
Goede middag,
Ik wil een oplopende nummering maken met daarin niet alleen cijfers, maar ook letters (alleen HOOFDLETTERS). En om het ingewikkeld te maken, mogen de letters I, O, S en Z er niet in voor komen. De nummering wordt dan dus:
00
01
02
.
.
.
09
0A
0B
0C
.
.
.
0Y
10
11
12
.
.
.
1A
1B
etc

Wie kan dit in een Excel file uitwerken zodat ik dit makkelijk zelf kan aanpassen. De nummering komt namelijk ieder jaar terug en moet dan weer verder lopen. Ik ben heel benieuwd naar jullie oplossing.

Met vriendelijke groeten,
Arjen
 
Eenmalig? of zelf naar beneden door kunnen trekken? vaste locatie in het bestand of willekeurig toe te passen? is het altijd maximaal 2 tekens?

Een en ander is nogal belangrijk voor de uitwerking
 
Misschien dat je hier wat mee kunt:
=DEC.N.HEX(RIJ())
 
Hoi Wampier,
Als eerste bedankt voor je snelle reactie. Het eerste nummer uit de reeks is: EU0000014C30. Het zijn dus altijd 12 tekens waarbij de eerste twee altijd EU zijn. De rest is variabel. In totaal moeten het 240.000 unieke codes worden. Volgend jaar heb ik het zelfde principe nodig, maar dan dus 240.000 codes verder. Het zou dus mooi zijn als ik dat een volgende keer zelf kan doen. Bijvoorbeeld door het eerste getal aan te passen zodat de rest van de lijst automatisch wordt aangepast.
 
Als je deze in A2 plaatst krijg je volgens mij de gevraagde volgorde bij doortrekken naar beneden:
Code:
=INTEGER((RIJ()-RIJ($A$2))/32)&KIEZEN(1+(RIJ()-RIJ($A$2))-32*INTEGER((RIJ()-RIJ($A$2))/32);0;1;2;3;4;5;6;7;8;9;"A";"B";"C";"D";"E";"F";"G";"H";"J";"K";"L";"M";"N";"P";"Q";"R";"T";"U";"V";"W";"X";"Y")
 
Hoi AlexCEL,
Dat begint er al aardig op te lijken. Ik verbaas me over de snelheid en kennis op dit forum. Mijn complimenten, ik kom hier voor het eerst (en zeker niet voor het laatst).
Zou je de formule nog iets kunnen aanpassen zodat hij voldoet aan het format EU0000014C30 (dit is het eerste getal in de reeks). Alvast bedankt!
 
En hoe zit die nummering dan in elkaar? Moet die C en 14 ook ophogen? Wanneer? Mogen daar ook bepaalde combinaties niet in voorkomen? Hoe past de gevraagde nummering uit #1 hierin?

Kortom: graag wat meer info.
 
Laatst bewerkt:
Hoi AlexCEL,
Vergeet m'n nummering met twee cijfers uit m'n eerste posting maar, dat is een beetje verwarrend. Ik dacht dat stuk ervoor zelf wel te kunnen, maar dat blijkt toch wat ingewikkelder te zijn dan gedacht.
EU0000014C30 is het eerste cijfer van de reeks. Alle tekens behalve EU zijn daarin variabel. Je had hem al zover dat je vanaf 0 met 2 karakters de nummering goed had. Dat moet dus uitgebreid worden naar 10 karakters volgens het zelfde principe met cijfers en letters. En in plaats van dat je bij EU0000000000 begint, begin je bij EU0000014C30 (als het goed is, is dat 240.000 records verder). Alvast bedankt.
 
"Vergeet het maar?" Zo'n opmerking wordt ik niet zo blij van... Tip voor de toekomst: denk s.v.p. vooraf even goed na over een correcte (en complete) vraagstelling en plaats een voorbeeldbestand.

Laat ik zelf maar een reeks opstellen, mag jij zeggen of dit correct is.

14C30
14C31
...
14C4M
...
14C9Y
14D00
...
14Y9Y
15C30??? (of 15A00??)

Mijn vragen uit #7 blijven gedeeltelijk nog even staan.
 
Laatst bewerkt:
Sorry, ik dacht er te simpel over. Ik dacht de vraag in stukjes op te breken (eerst het principe uitleggen, dar uitbreiden naar langere code en dan een ander begingetal), maar dat was blijkbaar niet handig.
De reeks ziet er goed uit, maar de nullen ervoor zijn ook variabel volgens het zelfde principe (0 t/m 9 en A t/m Z zonder IOSZ) Na een Y volgt dan weer de 0. Na een EU00000YYYYY volgt dus EU0000100000. Het laatste getal uit jouw reeks is dus inderdaad 15A00 en niet 15C30. Welke vraag staat er nu nog open?
 
Of je van 9 na 10 gaat of naar 9A Dus bijvoorbeeld van En als ik je voorbeeld goed begrijp houdt hij na Y op met door tellen, dus dan zou EU00000YYYY9 niet bestaan?
 
Ok. We komen er wel. Vind het wel een aardige uitdaging dus zet nog even door..

Wat is het correct einde van een reeks?
...
14YYY
15A00 (of 15000?)
 
Laatst bewerkt:
Ok. We komen er wel. Vind het wel een aardige uitdaging dus zet nog even door..

Wat is het correct einde van een reeks?
...
14YYY
15A00 (of 15000?)

Na een Y volgt altijd een 0, dus na 14YYY volgt 15000. Ja, het is inderdaad een behoorlijke uitdaging. Normaal zijn de reeksen veel simpeler en kan ik er zelf wel wat van maken, maar dit gaat mijn pet teboven.
 
Ik snap alleen het voorbeeld nog niet. Als ik 240000 factoreer voor 32 items (combinaties 22 letters, 10 cijfers) kom ik op:

7 - 10 - 12 - 0 == 7AC0

dus ik weet niet goed waar je voorbeeld vandaan komt. ook komt er na: 14Y9Y natuurlijk 14YA0 en niet 15A00 anders volg ik het systeem niet meer
 
Ik snap alleen het voorbeeld nog niet. Als ik 240000 factoreer voor 32 items (combinaties 22 letters, 10 cijfers) kom ik op:

7 - 10 - 12 - 0 == 7AC0

dus ik weet niet goed waar je voorbeeld vandaan komt. ook komt er na: 14Y9Y natuurlijk 14YA0 en niet 15A00 anders volg ik het systeem niet meer

Sorry, nu raak ik de draad ook een beetje kwijt. Je berekening begrijp ik niet, maar dat zal aan mij liggen.
Mijn voorbeeld (mijn begingetal, EU0000014C30) komt voort vanuit een eerdere reeks die 1 nummer eerder ophield. Daar moet ik nu dus mee verder gaan. En volgend jaar ga ik verder met 1 cijfer hoger dan waar de reeks van 240.000 nummers nu mee eindigt.
Na 14Y9Y komt inderdaad 14YA0. Na 14YYY komt 15000.
Ik probeer het nog een keer uit te leggen want ik begrijp dat het lastig is:
In een normale nummerreeks tel je van 0 naar 9 en ga je daarna verder met 10, 11 ... 19, 20 (en dat dan met een aantal voorloopnullen en twee letters daarvoor). Nu loopt de reeks echter nog door van 0 naar 9 en daarna van A t/m Y, zonder IOS. Daarna gan je verder met 10, 11 ... 1A, 1B ... 1Y, 20, 21 ... 2A, 2B etc En dat dan dus weer met een aantal voorloopnullen en twee letters.
 
7 (*32 *32 *32) + 10 (*32*32) + 12 (*32) + 0 = 229376 + 10240 + 384 + 0 = 240000

Bij een doorlopende reeks getallen vertaald 240000 dus naar 7AC0.. 14C30 vertaald naar nagenoeg 1.2 mln (1.192.032 exact)

maar als het gewoon een doorlopende reeks is kun je normale formules voor dit soort toepassingen gebruiken.. ik zal eens kijken
 
Ik zou ook de VBA specialisten eens willen oproepen zich hier over te buigen!
 
zoiets kan: voor algemeen gebruik moet die nog wat aangepast worden, maar dit is in principe een functie die elk willekeurig getal om kan zetten:

Code:
Function NR_reeks(voorloop As String, reekslengte As Long, waarde As Long) As String
    Dim reeks As Variant
    reeks = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "T", "U", "V", "W", "X", "Y")
    rtext = ""
    While waarde > 0
        rtext = reeks(waarde Mod 32) & rtext
        waarde = waarde - (waarde Mod 32)
        waarde = waarde / 32
    Wend
    
    nullen = reekslengte - Len(voorloop) - Len(rtext)
    
    NR_reeks = voorloop & WorksheetFunction.Rept("0", nullen) & rtext
    

End Function

Gebruik is: =NR_reeks("AB";12;10000)
 
Laatst bewerkt:
Dan zou je op de eerste rij kunnen beginnen met:
Code:
=NR_reeks("EU";12;RIJ()+1192031)

Mooie function @wampier. :thumb:
 
De volgende oplossing werkt in Excel 2013, niet in eerdere versies.
In A2 staat hard coded EU0000014C30
Formule in B2 en gekopieerd naar beneden.
Code:
=DECIMAAL(RECHTS(A2;10);35)
En nu komt het: in A3 en gekopieerd naar beneden, de volgende matrixformule (bevestigen met CTRL-SHIFT-ENTER, niet gewoon ENTER):
Code:
="EU"&BASIS(B2+1+ALS(0=SOM(--NIET(ISFOUT(VIND.SPEC({"I";"O";"S"};BASIS(B2+1;35;10)))));0;35^(10-SOM(ALS.FOUT(VIND.SPEC({"I";"O";"S"};BASIS(B2+1;35;10));0))));35;10)

Korte toelichting:
Met de nieuwe functie BASIS kun je getallen omzetten in een ander stelsel (tot maximaal 36), dus in dit geval 35 (Y).
In principe wordt de waarde op een regel de BASIS van het vorige decimale getal + 1, maar niet als in het resultaat een I, O of S zou voorkomen.
In dat geval moet er nog extra bij worden opgeteld 35 tot de macht (10 - de positie waar de I, O of S is gevonden), dus 35^0 = 1 als de I, O of S op de laatste positie is gevonden, 35^1 als de IOS op de negende positie is gevonden, enzovoorts.

Ongelofelijk wat je allemaal met die nieuwe BASIS functie kunt doen! :cool:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan