Avatar billede jensen363 Forsker
06. juni 2007 - 22:14 Der er 13 kommentarer og
1 løsning

Makro til at kopiere filtrerede data til andre arkfaner

Jeg har behov for en makro som udfører følgende :

I arkfane 1 findes mine rådata, som i kolonne A har oplysninger om et afdelingsnummer, hvis data i de øvrige kolonner gerne skulle kopieres over i underliggende arkaner, hver især repræsenterende sit eget afdelingsnummer.

Hver afdelings-arkfane er en standardskabelon, bestående af nogle kolonneoverskrifter i række 3, og en summering i række 7. Rådata skal så indsættes i række 4 og nedefter, resulterende i at række 7 rykkes nedad i forhold til antallet af rækker som hentes fra rådata. Eksempel :

KolA  KolB  KolC
072  100  A
072  200  B
085  100  C
072  200  D
085  100  E

Der er sat autofilter på kolonne A i rådata.

Makroen skal så finde eksempelvis afdeling 072 i KolA, kopiere de 3 rækker i KolB og KolC til en arkfane benævnt 072, indsætte disse i celle A4/B4 og nedefter, og samtidig rykke beregningerne i række 7 ned til række 9

Grunden til at jeg skal flytte beregningerne, og eksempelvis ikke benytte en makro til at genoprette beregningerne et vilkårligt sted i arket er, at der er kæder til andre arkfaner.

Nogen ideer til denne opgave ?
Avatar billede koppelgaard Praktikant
06. juni 2007 - 22:43 #1
Kunne du maile arket ?

m.koppelgaard.com

Michael
Avatar billede koppelgaard Praktikant
06. juni 2007 - 22:44 #2
Men det bliver først i morgen, hvis du kan vente.
Eller må en  natteravn hjælpe.

Michael
Avatar billede jensen363 Forsker
06. juni 2007 - 22:53 #3
Det er i orden med i morgen, men din mailadresse er vist forkert ;-)
Avatar billede koppelgaard Praktikant
07. juni 2007 - 08:34 #4
der kan du se, det var godt, jeg ikke gik i gang i går aftes - jeg kunne ikke engang skrive min mail rigtig.

m.koppelgaard@gmail.com
Avatar billede jensen363 Forsker
07. juni 2007 - 08:40 #5
Hej Michael

Jeg søgte lidt på eksperten efterfølgende og fandt den, så regnearket skulle meget gerne allerede ligge i din mailindbakke.
Avatar billede koppelgaard Praktikant
07. juni 2007 - 10:35 #6
Du har vel ikke brugt min gamle mailadresse ? Jeg kan ikke se din mail.


Michael
Avatar billede jensen363 Forsker
07. juni 2007 - 10:38 #7
Nej, jeg mener at jeg benyttede den du selv har skrevet ...

Jeg kan ikke se det før i aften når jeg kommer hjem fra arbejde
Avatar billede jensen363 Forsker
07. juni 2007 - 18:14 #8
Det er den korrekte mailadresse jeg har benyttet ... jeg prøver een gang til :-)
Avatar billede koppelgaard Praktikant
07. juni 2007 - 21:57 #9
Du har vel ikke sendt en pakket zip fil?
Den ryger i gmails filter. Den skal omdøbes.
Jeg har nemlig ikke fået noget endnu.

Prøv evt. også Michael.koppelgaard@agrsci.dk

Michael
Avatar billede jensen363 Forsker
08. juni 2007 - 06:35 #10
Hej Michael

Den er sendt som den er, dvs. som excel-fil, men den indeholder makroer i forvejen, måske er det derfor den ikke modtages !!!

Er sendt til den anden mailadresse
Avatar billede jensen363 Forsker
15. juni 2007 - 18:55 #11
venligst et svar så du kan få dine velfortjente point :-)
Avatar billede koppelgaard Praktikant
16. juni 2007 - 07:03 #12
Til andre brugere:
Makroen skulle også kunne overflytte data fra arket "sorteret" som er behæftede med fejl.

Data med fejl angives med "Fejl i data" i kolonne A.


Sub overførPosterOgFejl()

    overførPoster
    overførFejl
End Sub
Sub sletPosterOgFejl()

    SletPoster
    SletFejl
End Sub


Private Sub overførPoster()
    Dim a As Variant
   
    Call SletPoster
   
    a = Sheets("Sorteret").Cells(2, 2).CurrentRegion

    For Each sht In ActiveWorkbook.Sheets
        shtName = LCase(Left(sht.Name, 7))
        If shtName = "selskab" Then
            sht.Activate
            Call overførPost
        End If
   
    Next
   
    Sheets("Sorteret").Activate
   
End Sub

Private Sub overførPost()
        Dim rng As Range
        Dim Count As Integer
        Count = 0
        Application.ScreenUpdating = False
        i = 1
        a = Sheets("Sorteret").Cells(4, 1).CurrentRegion
        Nr = CInt(Right(ActiveSheet.Name, 4))
       
        While i <= UBound(a)
            If IsNumeric(Trim(a(i, 1))) Then
                If CInt(Trim(a(i, 1))) = Nr Then Count = Count + 1
            End If
            i = i + 1
        Wend
        If Count = 0 Then Exit Sub
       
        Rows("5:" & Count + 3).Insert Shift:=xlDown
               
        i = 1
        While i <= UBound(a)
            If IsNumeric(Trim(a(i, 1))) Then
                If CInt(Trim(a(i, 1))) = Nr Then
                Set rng = Range("A65000").End(xlUp).Offset(1)
                rng.Select
                    rng.Select
                    rng.Offset(, 0) = a(i, 2)
                    rng.Offset(, 1) = a(i, 3)
                    rng.Offset(, 2) = a(i, 4)
                    rng.Offset(, 3) = a(i, 5)
                    rng.Offset(, 4) = a(i, 6)
                    rng.Offset(, 5) = a(i, 7)
                    rng.Offset(, 6) = a(i, 8)
                    rng.Offset(, 7) = a(i, 9)
                End If
            End If
            i = i + 1
        Wend
        rLast = Range("A65000").End(xlUp).Row
        Range("H" & rLast + 1).Formula = "=SUM(H4:H" & rLast & ")"
End Sub

Private Sub SletPoster()
   

    For Each sht In ActiveWorkbook.Sheets
        shtName = LCase(Left(sht.Name, 7))
        If shtName = "selskab" Then
            sht.Activate
            rLast = Range("A65000").End(xlUp).Row
            If Range("A4") <> "" Then
                Range(Cells(4, 1), Cells(rLast, 1)).EntireRow.Value = ""
                Range(Cells(5, 1), Cells(rLast, 1)).EntireRow.Delete
            End If
               
        End If
   
    Next
    Sheets("Sorteret").Activate
End Sub

Private Sub overførFejl()
        Dim rng As Range
        Dim Count As Integer
       
        SletFejl
       
        Count = 0
        Application.ScreenUpdating = False
        i = 1
        a = Sheets("Sorteret").Cells(4, 1).CurrentRegion
               
        While i <= UBound(a)
            If LCase(a(i, 1)) = LCase("fejl i data") Then Count = Count + 1
            i = i + 1
        Wend
        If Count = 0 Then Exit Sub
        Sheets("Samlet").Activate
       
        Rows("22:" & Count + 20).Insert Shift:=xlDown
               
        i = 1
        While i <= UBound(a)
            If LCase(a(i, 1)) = LCase("fejl i data") Then
                Set rng = Range("A65000").End(xlUp).Offset(1)
                    rng.Select
                    rng.Offset(, 0) = a(i, 2)
                    rng.Offset(, 1) = a(i, 3)
                    rng.Offset(, 2) = a(i, 4)
                    rng.Offset(, 3) = a(i, 5)
                    rng.Offset(, 4) = a(i, 6)
                    rng.Offset(, 5) = a(i, 7)
                    rng.Offset(, 6) = a(i, 8)
                    rng.Offset(, 7) = a(i, 9)
            End If
            i = i + 1
        Wend
        rLast = Range("A65000").End(xlUp).Row
        Range("H" & rLast + 1).Formula = "=SUM(H21:H" & rLast & ")"
End Sub

Private Sub SletFejl()

    Sheets("Samlet").Activate
    rLast = Range("A65000").End(xlUp).Row
    If Range("A21") <> "" Then
        Range(Cells(21, 1), Cells(rLast, 1)).EntireRow.Value = ""
        Range(Cells(22, 1), Cells(rLast, 1)).EntireRow.Delete
    End If

    Sheets("Sorteret").Activate
End Sub
Avatar billede koppelgaard Praktikant
16. juni 2007 - 07:04 #13
Her er et svar
Avatar billede jensen363 Forsker
16. juni 2007 - 10:37 #14
Tidligt på færde :-)
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