Avatar billede mrkr Juniormester
24. juli 2010 - 01:32 Der er 7 kommentarer og
1 løsning

Lave liste med tal i et ark, hvis de findes i et andet ark via vba

Jeg har et ark med flere tusind linjer hvor tallene 1-1999 forekommer fra 0 - 200 gange.

Kan man via vba finde alle de tal der er repræsenteret i arket "ÅBNE" i kolonne A samt og indsætte disse i arket "LISTE"

Den skal dog kun indsætte tallet hvis der i kollone F står "NEJ"

Hvert enkelt tal skal kun overføres en gang.

Grunden til at jeg ikke bare laver formler og filter er at der er nogle ret voldsomme beregninger som skal laves efterfølgende og jeg ønsker derfor ikke at lave flere beregninger end højst nødvendigt.

I arket "liste" skal den starte med at indsætte tallene i feltet A5 og nedefter.
Avatar billede supertekst Ekspert
24. juli 2010 - 11:54 #1
skal de overførte tal stå i bestemt rækkefølge?
Avatar billede mrkr Juniormester
24. juli 2010 - 11:58 #2
Det nemmeste for mig til senere brug er at de står i stigende orden.
Avatar billede supertekst Ekspert
24. juli 2010 - 12:04 #3
ok..
Avatar billede supertekst Ekspert
24. juli 2010 - 12:35 #4
Indsættes i module

Dim arkÅ As Worksheet, rækÅ As Long, antalRækÅ As Long

Dim arkL As Worksheet, rækL As Long
Const startRækL = 5

Dim listeTabel(2000) As Integer, tal As Integer, ix As Integer
Public Sub overførNejTilListe()
    Set arkÅ = ActiveWorkbook.Sheets("Åbne")
    Set arkL = ActiveWorkbook.Sheets("Liste")
   
    arkÅ.Select
    antalRækÅ = findAntalRæk(arkÅ)
    rækL = startRækL
       
    Application.ScreenUpdating = False
   
    For rækÅ = 1 To antalRækÅ
        If LCase(Range("F" & CStr(rækÅ))) = "nej" Then
            tal = Range("A" & CStr(rækÅ))
Rem Er tallet mellem 1 - 1999
            If tal >= 1 And tal <= 1999 Then
                listeTabel(tal) = tal      'opdater i tabellen
            End If
        End If
    Next rækÅ

    arkL.Select
Rem gennemgå tabel
    For ix = 1 To 2000
        If listeTabel(ix) > 0 Then
            Range("A" & CStr(rækL)) = listeTabel(ix)
            rækL = rækL + 1
        End If
    Next ix
   
    Application.ScreenUpdating = True
    arkL.Select
End Sub
Private Function findAntalRæk(arkNavn)
    arkNavn.Select
    findAntalRæk = ActiveCell.SpecialCells(xlLastCell).Row
End Function
Avatar billede mrkr Juniormester
24. juli 2010 - 15:47 #5
Den laver desværre en fejl

run time error ´6´
Overflow

Og så viser den at der fejl i denne linje:
tal = Range("A" & CStr(rækÅ))

Jeg kan ikke hitte ud af hvad der går galt.
Avatar billede supertekst Ekspert
24. juli 2010 - 16:22 #6
Prøv at ændre erklæring af "tal"----> long i stedet for Integer

Dim listeTabel(2000) As Integer, tal As Long, ix As Integer
Avatar billede mrkr Juniormester
24. juli 2010 - 23:26 #7
Jep, så var den der.
Jeg takker mange gange
Avatar billede supertekst Ekspert
25. juli 2010 - 10:52 #8
fint & selv tak..
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