Avatar billede ae03 Novice
24. september 2013 - 13:49 Der er 4 kommentarer og
1 løsning

Hurtigere makro

Jeg bruger nedenstående makro til at omdanne cpr-numre til fødselsdatoer, men når det skal gøres for nogle tusind numre, er det mildt sagt en langsommelig affære. Min pc klarer ca. en række i sekundet. Derfor er der point til en kode - eller bidrag til kode, der kan forbedre tempoet markant.
Avatar billede Dan Elgaard Ekspert
24. september 2013 - 13:56 #1
Hvilken nedenstående kode???

Anyway, måske du kan finde hjælp her:
http://www.EXCELGAARD.dk/Bib/CPR/

Hvis du har CPR-nummerne stående i f.eks. celle A1 til A2000, og ønsker fødselsdagene i cellerne B1 til B2000, vil koden kunne se således ud:

For Counter = 1 to 2000
  Range("B" & Counter).Value = CPR(Range("A" & Counter).Value, 4)
Next
Avatar billede ae03 Novice
24. september 2013 - 14:15 #2
Nå ja, jeg skal måske huske at indsætte koden ;-)

Beklager. Her er den:

Sub CprTilDato()
Dim bytCent As Byte
Dim bytSevdig As Byte
Dim bytCprYear As String
Dim CprTilDato As Date

For Each c In Selection.Cells
  If Len(cpr) = 11 Then
      bytSevdig = Mid(c.Value, 8, 1)
  Else
      bytSevdig = Mid(c.Value, 7, 1)
  End If
       
  bytCprYear = Mid(c.Value, 5, 2)
   
  Select Case bytSevdig
      Case 0 To 3
          bytCent = 19
      Case 4, 9
          If bytCprYear <= 36 Then
              bytCent = 20
          Else
              bytCent = 19
          End If
      Case 5 To 8
          If bytCprYear <= 36 Then
              bytCent = 20
          ElseIf bytCprYear >= 58 Then
              bytCent = 18
          End If
      End Select
    CprTilDato = Mid(c.Value, 3, 2) & "-" & Left(c.Value, 2) & "-" & bytCent & bytCprYear
    c.Offset(0, 1) = Format(CprTilDato, "dd-mm-yyyy")
Next c
End Sub
Avatar billede Dan Elgaard Ekspert
24. september 2013 - 15:04 #3
Hvis du indsætter følgende i starten af din kode:

ActiveSheet.DisplayPageBreaks = False
With Application
      .Cursor = xlWait
      .EnableEvents = False
      .ScreenUpdating = False
      .Calculation = xlCalculationManual
End With

...og dernæst følgende i slutningen af din kode

With Application
      .Calculation = xlCalculationAutomatic
      .ScreenUpdating = True
      .EnableEvents = True
      .Cursor = xlDefault
End With

...så tager det ca. 1 sekund, at køre koden på 65.536 rækker med CPR-numre på min PC med Excel 2003.

Læs mere om, at sætte hastigheden op på dine makroer her:
http://www.EXCELGAARD.dk/Lib/Macros/SpeedUp/
Avatar billede ae03 Novice
24. september 2013 - 15:12 #4
Det gjorde underværker. Tak for hjælpen!
Avatar billede Dan Elgaard Ekspert
24. september 2013 - 15:34 #5
Velbekomme :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester