PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelLång beräkningstidLång beräkningstid
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2012-12-11 08:18
 

Jag har ett kalkylblad i Excel 2010 som kommer att bli ganska avanserat med makron och VBA-programeringar.
Än så länge är jag i uppstartsfasen men har stött på problem. Beräkningarna på ett av bladen i boken tar väldigt lång
tid att beräkna, vilket gör att det blir helt oanvändbart. Är det någon som vet hur man hittar vilken beräkning det är som
tar lång tid för att rätta till felet?

Nytt inlägg
 2012-12-18 10:59
 

Hej!

Du kan i koden skriva:

Debug.Print "Metoden X började: " & time

Debug.Print "Metoden X slutade: " & time

På så vis kan du se vilka metoder som tar längst tid.

Men de vanligaste två skälen till att beräkningar tar tid är att man

a) arbetar för mycket mot kalkylbladen direkt

b) har en massa andra beräkningar som uppdateras parallellt när man uppdaterar något annat

Det enklaste att rätta till är b. Du skriver då i din kod när en metod börjar:

Application.Calculation = xlManual

När metoden är klar skriver du

Application.Calculation = xlAutomatic

Du bör även ha en skrivning

On Error Goto catch:

och skriva

catch:

Application.Calculation = xlAutomatic

 

så att du vid eventuellt fel inte råkar ut för att kalkyleringen är avstängd.

Med kalkyleringen avstängd kommer du inte att få en massa parallella uppdateringar som slöar ned det hela utan allt görs i ett svep på slutet.

 

Problem a) är om du skriver till cell efter cell... Det är jätteslött men det är så många gör... Det rätta är att skriva till ett helt område direkt. Man arbetar då med en matris och hämtar in data från ett område till matrisen, bearbetar matrisen och skriver sedan ut matrisen till kalkylbladetet i en enda skrivning.

Koden nedan visar hur jag hämtar data från ett område i Blad1 till en matris. Området är från början tomt och varje cell får ett värde som är radnummer + kolumnnummer.

Koden avslutas med att jag till cell D2 skriver ut matrisen. Jag använder mig av resize för att göra om rangen D2 till det område som är lika högt och brett som min matris.

Vid första körningen får cellerna värde enligt formeln radnummer + kolumnnummer.

Vid andra körninen kommer cellernas värde att räknas upp med 1 jämfört med första körningens resultat.

Public Sub Test()
    Dim varMatris As Variant
    Dim iRad As Integer
    Dim iKolumn As Integer
   
    varMatris = Blad1.Range("D2:F10").Value
   
    For iRad = 1 To UBound(varMatris, 1)
        For iKolumn = 1 To UBound(varMatris, 2)
            If varMatris(iRad, iKolumn) = "" Then
                varMatris(iRad, iKolumn) = iRad + iKolumn
            Else
                varMatris(iRad, iKolumn) = varMatris(iRad, iKolumn) + 1
            End If
        Next
    Next
   
    Blad1.Range("D2").Resize(UBound(varMatris, 1), UBound(varMatris, 2)).Value = varMatris
End Sub

mvh

/Kihlman

 


Kihlman

Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.

www.excelspecialisten.se

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelLång beräkningstidLång beräkningstid

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter