GercoTermaat
Gebruiker
- Lid geworden
- 30 mrt 2017
- Berichten
- 10
Beste helper,
Ik ben bezig met een calculatiesheet waarbij veel informatie uit een rapport gekopieerd moet worden naar het calculatiesheet.
Ik heb een macro gemaakt die werkt, alleen bij het invoegen van grote rapporten duurt deze macro erg lang of Excel loopt gewoon vast.
Nu heb ik zeker al een week ervaring met macro's, dus weet er eigenlijk nog veel te weinig van af.
De code waar het om gaat is als volgt:
Ik denk dat dit gedeelte erg lang duurt:
Wat hier gebeurt:
In de cellen AF1:AK1000 staan formules waarbij de benodigde gegevens opgehaald worden van het rapport. Hierin wil ik veel waardes niet zien dus deze vervang ik door een "@". Als in het rapport "totaal" staat onder aan de tabel, worden de cellen in AF:AK leeg. De cellen AF1:AK1000 worden gekopieerd naar de cellen in Z:AE. Hier begint het probleem. Ik wil alle cellen die "@" bevatten verwijderen en de rest omhoog schuiven, dit lukt prima, maar duurt erg lang. Is er een betere (snellere) manier op dit op te schrijven?
Mijn Excel bestand is 9611kb, dit lijkt me wel heel veel.
Alvast bedankt,
Gerco
Ik ben bezig met een calculatiesheet waarbij veel informatie uit een rapport gekopieerd moet worden naar het calculatiesheet.
Ik heb een macro gemaakt die werkt, alleen bij het invoegen van grote rapporten duurt deze macro erg lang of Excel loopt gewoon vast.
Nu heb ik zeker al een week ervaring met macro's, dus weet er eigenlijk nog veel te weinig van af.
De code waar het om gaat is als volgt:
Code:
Sub Gereedschappen()
Application.ScreenUpdating = False
Range("AF2:AK2").AutoFill Destination:=Range("AF2:AK1000"), Type:=xlFillDefault
Range("BG2:BH2").AutoFill Destination:=Range("BG2:BH1500"), Type:=xlFillDefault
Range("BP1:BQ1").AutoFill Destination:=Range("BP1:BQ1500"), Type:=xlFillDefault
Range("AF1:AK1000").Copy
Range("Z1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
For i = Cells(Rows.Count, 26).End(xlDown).Row To 1 Step -1
If Range("Z" & i).Value = "@" Then
Range("Z" & i, "AE" & i).Cells.Delete xlUp
End If
Next
Range("W1,W22").FormulaR1C1 = "1"
Range("BF1:BF1000").FormulaR1C1 = "=CONCATENATE(RC[-29],RC[-28])"
Sheets("Rapport").Select
Dim Findstring As String
Dim Description As Range
Findstring = "--Description--"
With Worksheets("Rapport").Range("A1:N1500")
Set Description = .Find(What:=Findstring, LookIn:=xlValues)
If Description Is Nothing Then
Sheets("Calculatiesheet").Select
MsgBox ("Geen boorbewerkingen gevonden")
Else
Rows(Description.Row).SpecialCells(xlCellTypeConstants).AutoFilter Field:=2, Criteria1:="Drill"
Union(Range(Description.Offset(1, -1), Description.Offset(1, -1).End(xlDown)), _
Range(Description.Offset(1, 4), Description.Offset(1, 4).End(xlDown)), _
Range(Description.Offset(1, 9), Description.Offset(1, 9).End(xlDown))).Copy
Range("S1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows(Description.Row).AutoFilter
Range("S1:U1500").Copy
Sheets("Calculatiesheet").Select
Range("BJ1").PasteSpecial
Range("BH1:BH1500").Copy
Range("BI1:BI1500").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End With
End Sub
Ik denk dat dit gedeelte erg lang duurt:
Code:
For i = Cells(Rows.Count, 26).End(xlDown).Row To 1 Step -1
If Range("Z" & i).Value = "@" Then
Range("Z" & i, "AE" & i).Cells.Delete xlUp
End If
Next
Wat hier gebeurt:
In de cellen AF1:AK1000 staan formules waarbij de benodigde gegevens opgehaald worden van het rapport. Hierin wil ik veel waardes niet zien dus deze vervang ik door een "@". Als in het rapport "totaal" staat onder aan de tabel, worden de cellen in AF:AK leeg. De cellen AF1:AK1000 worden gekopieerd naar de cellen in Z:AE. Hier begint het probleem. Ik wil alle cellen die "@" bevatten verwijderen en de rest omhoog schuiven, dit lukt prima, maar duurt erg lang. Is er een betere (snellere) manier op dit op te schrijven?
Mijn Excel bestand is 9611kb, dit lijkt me wel heel veel.
Alvast bedankt,
Gerco