Avatar billede sleeper Nybegynder
26. maj 2008 - 10:12 Der er 12 kommentarer og
1 løsning

VBA / Macro til afløsning af Lopslag

Hej

Jeg har et Lopslag, som virker som det skal, men det dræber mit excelark.

Jeg har et ark, med lige pt. 6305 linier hvor jeg skal tjekke om linien er i et andet ark.

Arket som det tjekker op imod, bliver fødet af data via en macro, og macroen slutter med at indsætte et lopslag i alle 6305 rækker.

Det fungere bare ikke mere, min computer kan ikke trække det, selvom det er en C2D 2,4 GHz Windows XP Pro med 3 gb 667 MHz DDr2 ram

Det som jeg skal bruge, er at hvis række E findes i mit samleark, række B skal det retunere "Noget tekst" og hvis den findes i række C skal den returnere "Nogen andet tekst" og hvis ikke "Noget trejde tekst"

Disse tekster er ikke noget der skal hentes, blot noget jeg selv definere.
Avatar billede kabbak Professor
26. maj 2008 - 16:36 #1
Må jeg se koden, der henter data og indsætter Lopslag.
Avatar billede sleeper Nybegynder
27. maj 2008 - 07:50 #2
Sub CollectData()
    Dim wks As Worksheet, NextRow As Integer
    Application.Calculation = xlManual
    Application.ScreenUpdating = False
    Sheets("Totalliste").Select
    rknr = Range("A65536").End(xlUp).Row
    Range("A2:E" & rknr).Select
    Selection.Delete Shift:=xlUp
    For Each wks In Worksheets
        If Not (wks.Name = ("Totalliste") Or wks.Name = ("Samtlige lokationer")) Then
            wks.Activate
            Range("A2:e2").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
            Worksheets("Totalliste").Activate
            NextRow = Range("A65536").End(xlUp).Row + 1
            Cells(NextRow, 1).Activate
            ActiveSheet.Paste
        End If
    Next wks
 
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
    Sheets("Samtlige lokationer").Select
    Range("F2").Select
    Selection.Copy
        Worksheets("Samtlige lokationer").Select
        rknr = Range("E65536").End(xlUp).Row
        Range("F3:F" & rknr).Select
        ActiveSheet.Paste
End Sub
Avatar billede kabbak Professor
27. maj 2008 - 08:19 #3
og så formlen i Sheets("Samtlige lokationer").Range("F2")

må jeg se den også
Avatar billede sleeper Nybegynder
27. maj 2008 - 08:44 #4
Selvfølgelig

=HVIS(ER.FEJL(LOPSLAG(E:E;Totalliste!B:B;1;FALSK));HVIS(ER.FEJL(LOPSLAG(E:E;Totalliste!C:C;1;FALSK));"NEJ";"MIX");"REN")
Avatar billede kabbak Professor
27. maj 2008 - 18:08 #5
den kan vist godt optimeres, kan man få en eksempel mappe, så jeg har noget at arbejde med.

kabbak snabela tiscali dot dk
Avatar billede kabbak Professor
27. maj 2008 - 23:39 #6
Sub CollectData()
Start = Now()
    Dim wks As Worksheet, NextRow As Integer
    Application.Calculation = xlManual
    Application.ScreenUpdating = False
    Sheets("Totalliste").Select
    rknr = Range("A65536").End(xlUp).Row
    Range("A2:E" & rknr).Delete Shift:=xlUp
    ' ***** lavet om så intet selectes, det øger hastigheden
    For Each wks In Worksheets
        If Not (wks.Name = ("Totalliste") Or wks.Name = ("Samtlige lokationer")) Then
            If wks.Range("A2") <> "" Then
                wks.Range(wks.Range("A2:e2"), wks.Range("A2:e2").End(xlDown)).Copy _
                        Worksheets("Totalliste").Range("A65536").End(xlUp).Offset(1, 0)
            End If
        End If
    Next wks
   
    svar = Array("NEJ", "JA", "JA") ' Svar muligheder
    Data1 = Range(Range("B2"), Range("E65536").End(xlUp)) ' kolonne B og E i en variabel
    Sheets("Samtlige lokationer").Select
    Data2 = Range(Range("E2"), Range("E65536").End(xlUp)) ' kolonne E i en variabel
    Data3 = Range(Range("f2"), Range("E65536").End(xlUp).Offset(0, 1)) ' kolonne F med tomme celler i en variabel

    For x = 1 To UBound(Data2)
        For i = 1 To UBound(Data1)
            If Data1(i, 1) = Data2(x, 1) Then ' tjekker kolonne B op mod kolonne E
                Data3(x, 1) = svar(2) ' hvis fundet i kolonne B, skrives svar(2) i Data3
                Exit For
            End If
        Next
        If IsEmpty(Data3(x, 1)) Then
            For i = 1 To UBound(Data1)
                If Data1(i, 2) = Data2(x, 1) Then ' tjekker kolonne C op mod kolonne E
                    Data3(x, 1) = svar(1) ' hvis fundet i kolonne C, skrives svar(1) i Data3
                    Exit For
                End If
            Next
        End If
        If IsEmpty(Data3(x, 1)) Then Data3(x, 1) = svar(0) ' hvis Ikke i kolonne B eller C, skrives svar(0) i Data3

    Next

    Range(Range("f2"), Range("E65536").End(xlUp).Offset(0, 1)) = Data3 ' skriver i F kolonnen
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
MsgBox " Udført på " & Format(Now() - Start, "nn:ss") & " minutter"
End Sub
Avatar billede sleeper Nybegynder
28. maj 2008 - 08:27 #7
Det ser rigtig godt ud, jeg tester af, og vender tilbage med svar, om det virker som det skal.
Avatar billede sleeper Nybegynder
28. maj 2008 - 08:43 #8
Noget er galt, den returnere kun svarene JA og NEJ selvom jeg har rettet
    svar = Array("NEJ", "JA", "JA") ' Svar muligheder
til
    svar = Array("NEJ", "MIX", "JA") ' Svar muligheder

meningen er, at Sheet("Samlige lokationer").Range("F") skal skrive JA hvis Sheet("Samlige lokationer").Range("E") findes i Sheet("Totalliste").Range("B") og den skal skrive MIX hvis den findes i Sheet("Totalliste").Range("C")
Avatar billede kabbak Professor
28. maj 2008 - 23:24 #9
Det kom jeg i tanke om, efter jeg havde lukket i går, jeg manglede en linje.

Data3(x, 1) = Empty

den er sat ind i koden nedenunder

Sub CollectData()
Start = Now()
    Dim wks As Worksheet, NextRow As Integer
    Application.Calculation = xlManual
    Application.ScreenUpdating = False
    Sheets("Totalliste").Select
    rknr = Range("A65536").End(xlUp).Row
    Range("A2:E" & rknr).Delete Shift:=xlUp
    ' ***** lavet om så intet selectes, det øger hastigheden
    For Each wks In Worksheets
        If Not (wks.Name = ("Totalliste") Or wks.Name = ("Samtlige lokationer")) Then
            If wks.Range("A2") <> "" Then
                wks.Range(wks.Range("A2:e2"), wks.Range("A2:e2").End(xlDown)).Copy _
                        Worksheets("Totalliste").Range("A65536").End(xlUp).Offset(1, 0)
            End If
        End If
    Next wks
   
    svar = Array("NEJ", "JA", "JA") ' Svar muligheder
    Data1 = Range(Range("B2"), Range("E65536").End(xlUp)) ' kolonne B og E i en variabel
    Sheets("Samtlige lokationer").Select
    Data2 = Range(Range("E2"), Range("E65536").End(xlUp)) ' kolonne E i en variabel
    Data3 = Range(Range("f2"), Range("E65536").End(xlUp).Offset(0, 1)) ' kolonne F med tomme celler i en variabel

    For x = 1 To UBound(Data2)
    Data3(x, 1) = Empty
        For i = 1 To UBound(Data1)
            If Data1(i, 1) = Data2(x, 1) Then ' tjekker kolonne B op mod kolonne E
                Data3(x, 1) = svar(2) ' hvis fundet i kolonne B, skrives svar(2) i Data3
                Exit For
            End If
        Next
        If IsEmpty(Data3(x, 1)) Then
            For i = 1 To UBound(Data1)
                If Data1(i, 2) = Data2(x, 1) Then ' tjekker kolonne C op mod kolonne E
                    Data3(x, 1) = svar(1) ' hvis fundet i kolonne C, skrives svar(1) i Data3
                    Exit For
                End If
            Next
        End If
        If IsEmpty(Data3(x, 1)) Then Data3(x, 1) = svar(0) ' hvis Ikke i kolonne B eller C, skrives svar(0) i Data3

    Next

    Range(Range("f2"), Range("E65536").End(xlUp).Offset(0, 1)) = Data3 ' skriver i F kolonnen
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
MsgBox " Udført på " & Format(Now() - Start, "nn:ss") & " minutter"
End Sub
Avatar billede sleeper Nybegynder
29. maj 2008 - 08:01 #10
Tak, det virker.
Avatar billede sleeper Nybegynder
19. juni 2008 - 10:34 #11
Hej

Den virker så ikke alligevel.

Har du lyst til at kigge på den igen, eller skal jeg starte et nyt spørgsmål?
Avatar billede kabbak Professor
19. juni 2008 - 11:52 #12
skriv løs her, så hvad er problemet ??
Avatar billede sleeper Nybegynder
19. juni 2008 - 12:07 #13
jeg sender den lige på mail

Det vi skal koncentrere os om, er arket "Samtlige lokationer"
Her har du lavet macrokoden, som skulle afsløse mit Lopslag

Din macrokode indsætter data i Kollone F og mit Lopslag er i Kollone G
Disse skulle gerne stemme overens, men der er en fejl et sted.
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