Avatar billede Nuser2008 Mester
12. oktober 2018 - 11:47 Der er 5 kommentarer

Afgræns area ved udskiftning af punktum med komma

Hej

Jeg har et Excel-sheet omfattende 65.000 rækker og 15 kolonner. I alle celler skal jeg udskifte punktum med komma i talserier:

Før: 0.03 Nu: 0,03
Før: -1.09 Nu: -1,09

Det ser ud som om, at min kode kører længere i søgningen efter punktummer end række 60.000 - og det tager derfor meget lang tid at eksekvere programmet.

Kan jeg skrive koden på anden vis, så hastigheden i programmet øges markant?

På forhånd mange tak for jeres hjælp. /Arne

Koden ser således ud:

Sub AFKAST_test()

    Windows("2811_All").Activate
   
    ActiveSheet.Range("F1").Activate

    Selection.NumberFormat = "@"

    Dim OriginalText As String
    Dim CorrectedText As String

    Lastrow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    LastColumn = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column

    For j = 6 To LastColumn
    For I = 2 To Lastrow

    OriginalText = Worksheets("Rådata").Cells(I, j).Value

    CorrectedText = Replace(OriginalText, ",", ".")

    Worksheets("Rådata").Cells(I, j).Value = CorrectedText

    Next I
   
    Next j
 
End Sub
Avatar billede finb Ekspert
12. oktober 2018 - 12:09 #1
Stå i 1. celle,
marker vha. currentRegion
Navngiv markeringen
Utestet:

ActiveSheet.Range("F1").currentRegion.Name = "HerErRanget"

For each CellR in HerErRanget
  søg-erstat
Next
Avatar billede kim1a Ekspert
12. oktober 2018 - 13:13 #2
Den arbejder faktisk kun til sidste række i dine data:
Lastrow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Udfordringen kan så være hvis der er tastet noget i række 60.000 eller du har tidligere haft noget der. Jeg har også set eksempler på mærkelige tegn som egentlig ligner mellemrum og lignende.

prøv at slette alle rækker under den sidste række du mener der bør være (brugt ctrl + shift + pil ned) og kør den igen derefter.

Alternativt tænker jeg helt simpelt er det ikke blot en søg og erstat - eller er der mere du ikke har nævnt for os.
Avatar billede finb Ekspert
13. oktober 2018 - 10:21 #3
Stå i 1. celle med data,
marker vha. currentRegion
Navngiv markeringen (set)
Utestet:

Set "HeleRanget" = ActiveSheet.Range("F1").currentRegion

For each CellR in HeleRanget
  søg-erstat
Next
Avatar billede Nuser2008 Mester
15. oktober 2018 - 13:48 #4
@kim1a

Mange tak for dit svar.

Alt, hvad min kode skal gøre, er vist i mit oprindelige spørgsmål, hvor koden var sat ind. Det er en ganske simpel udskiftning af punktummer med kommaer. Koden er "skrevet" ud fra en optaget makro. Selvfølgelig sker der noget før og efter programstumpen, men det vedrører ikke det med at udskifte punktummer med kommaer

Jeg har prøvet dit forslag med at slette alle rækker efter sidste datarække, men det har ikke sat hastigheden på programeksekveringen op. Dernæst prøvede jeg at kopiere alle data ud i en ny Excel-fil. Hastigheden her var ca. 11 minutter, hvor 1.169.000 celler blev løbet igennem og rettet mht. punktum til komma. Måske kan jeg ikke forvente, at programmet kører hurtigere, med tanke på de mange celler?

Hilsen Arne
Avatar billede Nuser2008 Mester
15. oktober 2018 - 14:58 #5
Hej alle

Jeg har fundet ud af, at en lille, simpel kodestump kunne løse mit problem med den langsommelige eksekvering af programmet:

Lige efter Sub () skrev jeg: Application.Calculation = xlCalculationManual

Lige før End Sub skrev jeg: Application.Calculation = xlCalculationAutomatic

Nu er de 11 minutter i den oprindelige eksekvering reduceret til 1½ minut. Det er lige til at leve med! Løsningen er efterprøvet flere gange, og den holder.

Jeg troede, at det kunne løses med: Application.ScreenUpdating = False / True, men det gjorde ingen forskel.

Mange tak for jeres bidrag.

Hilsen Arne
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
Kurser inden for grundlæggende programmering

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