Avatar billede igoogle Forsker
29. februar 2012 - 13:23 Der er 1 kommentar og
1 løsning

Kode optimering,

Jeg har et stykke slave kode der flytter lidt rundt på lidt data og skriver dem op på en måde som jeg kan bruge længere nede i systemet.. men den er blevet lidt tung at danse med. da der er ca 38000 linjer der alle skal deles i to

Sub datahandler3()
Dim r As Long
Dim lngRowsProject As Long
Dim t As Long
Dim s As Long
Dim v As Long

Worksheets.Add(After:=Worksheets(2)).Name = "Dataholder"

Sheets("DATA").Select

lngRowsProject = Application.CountA(Range("A:A"))

t = 1

For r = 1 To lngRowsProject Step 1
If Range("B" & r).Value > 0 Then
    'location
    Range("A" & r).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("A" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    'planning
    '---
    'Plan
    '---
    'Period
    '---
    'ruleset
    '---
    'Rooms type
    Range("D1").Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("F" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    'date
    Range("D" & r).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("G" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    'Value
    Range("C" & r).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("H" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    t = t + 1

End If
Next r
For s = 1 To lngRowsProject Step 1
If Range("C" & s).Value > 0 Then
    'location
    Range("A" & s).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("A" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    'planning
    '---
    'Plan
    '---
    'Period
    '---
    'ruleset
    '---
    'Rooms type
    Range("E1").Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("F" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    'date
    Range("E" & s).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("G" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    'Value
    Range("C" & s).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("H" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select
    t = t + 1

End If
Next s


Sheets("Dataholder").Select
Range("A1", "H" & t).Select

Selection.Copy
ActiveWorkbook.Close False
ThisWorkbook.Activate
Sheets("12 month").Select
Range("a1000000").Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste

End Sub
Avatar billede Thorp Praktikant
01. marts 2012 - 16:55 #1
Du kunne evt. flytte denne kode sekvens til sin egen procedurer:

    Range("A" & s).Select
    Selection.Copy
    Sheets("Dataholder").Select
    Range("A" & t).Select
    ActiveSheet.Paste
    Sheets(2).Select

NY_PROCEDURER (Column_1 as string, Column_2 as string, Row_1 as integer, Row_2 as integer, SheetName as string)

    Range(Column_1 & Row_1).Select
    Selection.Copy
    Sheets(SheetName).Select
    Range(Column_2 & Row_2).Select
    ActiveSheet.Paste
    Sheets(2).Select

EXIT SUB

Du kalder så NY_PROCEDURER i din kode:

NY_PROCEDURER "A",s,"A",t,"Dataholder"
Avatar billede igoogle Forsker
03. marts 2012 - 20:37 #2
Det lyder rigtigt nok dit svar.. men fandt på et nyt sæt logik der passede bedre end i systemet, og krævede mindre af computeren..
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