• 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.
Excel 2013 heb ik nog niet, kan dus nog niet uitproberen.

Mooie oplossing wampier. Wou dat ik wat meer thuis was in VBA... :(
 
Ik zou deze vraag beschrijven als tellen in een 32-tallig stelsel.
De symbolen ('cijfers') van dit stelsel zet ik in variabele c00

Net zoals in het 10-tallig stelsel lezen we van rechts naar links:

laatste positie: het aantal keren dat 10^0 voorkomt in het restant van 10^1
op 1 na laatste positie het aantal keren dat 10^1 voorkomt in het restant van 10^2
op 2 na laatste positie het aantal keren dat 10^2 voorkomt in het restant van 10^3
op 3 na laatste positie het aantal keren dat 10^3 voorkomt in het restant van 10^4
op 4 na laatste positie het aantal keren dat 10^4 voorkomt in het restant van 10^5

In een 32-tallig stelsel vervangen we dan 10 door 32.
NB. voor het gemak heb ik (j mod 32^1)\32^0 geschreven als j Mod 32

Code:
Sub M_snb()
   c00 = "0123456789ABCDEFGHJKLMNPQRTUVWXY"
   ReDim sp(139999, 0)
   
   For j = 0 To UBound(sp)
      sp(j, 0) = "EU" & Right("0000000000" & Mid(c00, (j Mod 32 ^ 4) \ 32 ^ 3 + 1, 1) & Mid(c00, (j Mod 32 ^ 3) \ 32 ^ 2 + 1, 1) & Mid(c00, (j Mod 32 ^ 2) \ 32 + 1, 1) & Mid(c00, j Mod 32 + 1, 1), 8)
   Next
   
   Cells(1).Resize(UBound(sp) + 1) = sp
End Sub

of

Code:
Sub M_snb()
   sn = Split(StrConv("0123456789ABCDEFGHJKLMNPQRTUVWXY", 64), Chr(0))
   ReDim sp(139999, 0)
   
   For j = 0 To UBound(sp)
      sp(j, 0) = "EU" & Right("0000000000" & sn((j Mod 32 ^ 4) \ 32 ^ 3) & sn((j Mod 32 ^ 3) \ 32 ^ 2) & sn((j Mod 32 ^ 2) \ 32) & sn(j Mod 32), 8)
   Next
   
   Cells(1).Resize(UBound(sp) + 1) = sp
End Sub

Omdat de reeks moet volgen op 14C30 gaan we eerst uitrekenen welk getal dat 32-tallige in het decimale stelsel is: y.
Dat tellen we dan op in de lus:

Code:
Sub M_snb()
   sn = Split(StrConv("0123456789ABCDEFGHJKLMNPQRTUVWXY", 64), Chr(0))
   ReDim sp(139999, 0)
   
'   14C30
   y = [COLOR="#FF0000"][B]1[/B][/COLOR] * 32 ^ 4 + [COLOR="#FF0000"][B]4 [/B][/COLOR]* 32 ^ 3 + [B][COLOR="#FF0000"]12[/COLOR][/B] * 32 ^ 2 + [COLOR="#FF0000"][B]3 [/B][/COLOR]* 32^1 + [COLOR="#FF0000"][B]0[/B][/COLOR] * 32^0 +1 
   For j = y To y + UBound(sp)
      sp(j - y, 0) = "EU" & Right("0000000000" & sn((j Mod 32 ^ 5) \ 32 ^ 4) & sn((j Mod 32 ^ 4) \ 32 ^ 3) & sn((j Mod 32 ^ 3) \ 32 ^ 2) & sn((j Mod 32 ^ 2) \ 32) & sn(j Mod 32), 8)
   Next
   
   Cells(1).Resize(UBound(sp) + 1) = sp
End Sub
 
Laatst bewerkt:
Als collega van de originele poster heb ik deze thread met zeer veel genoegen gelezen en veel geleerd.

De oplossing met de VB-functie (post #18 en #19) is in elk geval de oplossing van het probleem zodat
wij verder kunnen. Heel erg bedankt voor de inzet en creativiteit!
Nu ga ik proberen de oplossing ook te doorgronden zodat het niet alleen maar kopieer- en plakwerk wordt.

Alle andere posts geven me weer een stuk meer inzicht in Excel en ik heb altijd weer de hoop dat ik een
dergelijke vraag zelfstandig kan oplossen.... Ik heb nog veel te leren /diepe buiging!

MvrGr,
Victor
 
Hierbij nog een formule-variant:

IN H1:
Code:
0123456789ABCDEFGHJKLMNPQRTUVWXY

In A2 en verder:

Code:
="EU"&
IF(FLOOR((ROW()+1192031)/32^9;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^9;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^8;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^8;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^7;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^7;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^6;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^6;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^5;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^5;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^4;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^4;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^3;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^3;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^2;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^2;1);32)+1;1))&
IF(FLOOR((ROW()+1192031)/32^1;1)=0;0;MID($H$1;MOD(FLOOR((ROW()+1192031)/32^1;1);32)+1;1))&
MID($H$1;MOD(FLOOR((ROW()+1192031)/32^0;1);32)+1;1)

geen matrix, gewoon doortrekken
 
Laatst bewerkt:
Hoewel het met Excelformules kan vind ik dat in dit geval niet voor de hand liggend, omdat het om een eenmalige aktie gaat.
Met een Excelformule worden bij iedere wijziging op het werkblad alle formules weer opnieuw uitgerekend, doch met steeds hetzelfde resultaat.
Met een UDF is het nog erger: iedere wijzigign in een van de openstaande werkboeken leidt tot een heruitvoering van alle berekeningen, met ook hier steeds hetzelfde resultaat. Daar wordt geen gebruiker vrolijk van.

Voor eenmalige akties geef ik de voorkeur aan een pure VBA-oplossing die slechts 1 keer wordt uitgevoerd en waarvan het resultaat slechts 1 keer naar een werkblad wordt geschreven.
 
een procedure is inderdaad (veel) meer voor de hand liggend,
(leuke vondst die Base @marcelbeug)
 
@SNB, je kunt natuurlijk ook gewoon knippen en "tekst-plakken" om het permanent te maken. In principe net zo eenmalig.

Overigens veranderd er niets aan de aanpak, beide functies doen in principe hetzelfde, op dezelfde manier. Je kun via 2 lijnen meer in een aparte sub mijn functie aanroepen over een bereik en is het ook permanent.
 
@wampier

Is allemaal bekend. Ik zei iets over de aanpak zonder de toevoegingen uit je laatste post. Als je een extra macro nodig hebt kun je net zo goed meteen alles in een macro doen, ergo: zonder excelformules.
 
Een collega van me heeft met alle info van jullie een Excel file kunnen maken die doet wat ik nodig heb. Ontzettend bedankt allemaal! Het enige dat ik nu nog hoef te doen voor een nieuwe nummerreeks, is 1 getal aanpassen in de Excelfile en dan verandert alles mee. Mooi dat je zoiets simpels kunt bouwen met zoiets (voor mij) ingewikkelds onder de motorkap. Mocht ik nog eens een vraagstuk hebben, dan weet ik jullie te vinden. Ik zal dan m'n vraag in één keer zo duidelijk mogelijk stellen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan