Avatar billede jih Nybegynder
06. juni 2008 - 10:56 Der er 6 kommentarer og
1 løsning

fletning af filer

Hej,

jeg har 2 excel filer som jeg skal sætte sammen som en, men er lidt på bar bund i det her emne og ved ikke helt hvordan jeg gør..

Fil 1 har værdier A og B
Fil 2 har værdier A og C

jeg skal sætte filerne sammen sådan at jeg får én excel fil med værdierne A, B og C, med kun de A værdier der er i fil 1.

grunden er at i fil 2 er der ~1000 A værdier, som alle ikke er interessante, men i fil 1 har jeg 315 A værdier som er alle jeg skal bruge..

hvordan får jeg lavet en makro metode sådan at jeg læser A-værdien i fil 1, sammenligner med A-værdierne i fil 2 og udtager kun de rækker jeg skal bruge, og gemmer dem i et nyt ark i fil 1?

hvis jeg taler sort, må I endelig sige til og jeg kan uddybe lidt - så vidt jeg kan :-)
Avatar billede supertekst Ekspert
06. juni 2008 - 11:19 #1
Er det muligt at få en kopi af filerne - eller uddrag?
Kan evt. sendes til: pb@supertekst-it.dk
Avatar billede jih Nybegynder
06. juni 2008 - 11:29 #2
det kan desværre ikke lade sig gøre, siden det er konfidentielle informationer i dem..

jeg har skrevet dette indtil videre:

Sub MergeFiles()
    Dim strTemp(312) As String
    Dim intI, intJ, intK As Integer
    intJ = 0
    intK = 2
    For intI = 4 To 315
        strTemp(intJ) = Worksheets(1).Range("B" & intI)
        Worksheets(2).Range("A" & intK) = strTemp(intJ)
        intJ = intJ + 1
        intK = intK + 1
    Next intI
End Sub

alle værdierne består af tal, men tallene skal skrives ind som strenge, fordi de er for lange (får bare skrevet dem ind som 2,74E+14 osv..

jeg kan som sagt ikke sende dig filerne, men jeg kan give mere uddybet information, hvis du fortæller mig hvad du ikke forstår / mangler at få at vide.. :-)
Avatar billede staal84 Nybegynder
06. juni 2008 - 11:35 #3
Fil 1: Ark 1: Værdi A og B
Fil 2: Ark 1: Værdi A og C

Kan du ikke kopier værdierne fra fil 2 over på et ark 2 i fil 1, og så lave et lopslag?
Avatar billede supertekst Ekspert
06. juni 2008 - 11:40 #4
Ok - jeg forsøger uden filer...
Avatar billede jih Nybegynder
06. juni 2008 - 12:15 #5
stop endelig det du laver, jeg har fundet ud af det.. jeg formaterede bare cellerne, og istedet for flere filer fik jeg bare overført dem til ark istedet for, så det blev nemt nok..
Avatar billede supertekst Ekspert
06. juni 2008 - 13:07 #6
Ok - men nu kan du se hvad det blev til (har først set din kommentar efter færdiggørelsen).

Rem Koden anbringes i Fil1/Ark1
Rem Fil1 & 2 forventes at ligge i samme mappe
Rem =========================================
Dim fil2XLS, sti, ark2Ræk
Const fil2Navn = "fil2.xls"            '<------------- kan tilpasses
Sub fletningAfFiler()
    Application.ScreenUpdating = False
    sti = hentSti
    åbnFil2
    traverserFil1
    lukFil2
    Application.ScreenUpdating = True
   
    MsgBox ("Fletning er udført")
End Sub
Private Function hentSti()
    hentSti = ActiveWorkbook.Path
    If Right(hentSti, 1) <> "\" Then
        hentSti = hentSti + "\"
    End If
End Function
Private Sub åbnFil2()
    Set fil2XLS = CreateObject("Excel.Application")
    With fil2XLS
        .Workbooks.Open sti + fil2Navn
    End With
End Sub
Private Sub lukFil2()
    fil2XLS.Application.Quit
    Set fil2XLS = Nothing
End Sub
Private Sub traverserFil1()
Dim aVærdi, bVærdi, cVærdi
    ark2Ræk = 1
   
    For ræk = 1 To 65000
        ActiveWorkbook.Sheets(1).Activate
        aVærdi = Cells(ræk, 1)
        bVærdi = Cells(ræk, 2)
        If aVærdi = "" Then
            Exit Sub
        Else
            cVærdi = findesVærdi(aVærdi)
            If cVærdi <> "" Then
                opbygArk2 aVærdi, bVærdi, cVærdi
            End If
        End If
    Next ræk
End Sub
Private Function findesVærdi(aVærdi)                'Findes aVærdi i fil2
    With fil2XLS
        .Sheets(1).Activate
        For ræk = 1 To 65000
            If .Cells(ræk, 1) <> "" Then
                If aVærdi = .Cells(ræk, 1) Then
                    findesVærdi = .Cells(ræk, 3)        'returner C-værdi
                    Exit Function
                End If
            Else
                findesVærdi = ""
                Exit Function
            End If
        Next ræk
    End With
    findesVærdi = ""
End Function
Private Sub opbygArk2(aVærdi, bVærdi, cVærdi)
    ActiveWorkbook.Sheets(2).Activate
    With ActiveSheet
        .Cells(ark2Ræk, 1).Select
        Selection.NumberFormat = "@"
        .Cells(ark2Ræk, 2).Select
        Selection.NumberFormat = "@"
        .Cells(ark2Ræk, 3).Select
        Selection.NumberFormat = "@"

        .Cells(ark2Ræk, 1) = CStr(aVærdi)
        .Cells(ark2Ræk, 2) = CStr(bVærdi)
        .Cells(ark2Ræk, 3) = CStr(cVærdi)
       
        .Columns.AutoFit
    End With
   
    ark2Ræk = ark2Ræk + 1
End Sub
Avatar billede jih Nybegynder
06. juni 2008 - 13:49 #7
ja, undskyld for det sene svar fra mig af, men det blev hurtigt ændret til at alt skal kun udføres i en enkelt fil.. lukker
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