Just nu i M3-nätverket
Gå till innehåll

Excel - hämta data från andra excelfiler


Edgecrusher

Rekommendera Poster

Edgecrusher

Hej, Ny på forumet här!

 

Jag har en fråga kring att hämta info ur olika excelfiler. Jag använder Excel 2003.

Jag har ca 200 olika excelfiler (fakturor). På samtliga fakturor finns 3 celler (samma celler i alla filer, C17 C18 C19) som innehåller kundens adress. Nu vill jag sammanställa en lista över samtliga kunders adresser i ett nytt exceldokument. Jag vill såklart slippa att öppna samtliga dokument och kopiera över informationen utan hade tänkt mig någon typ av formel som automatiskt hämtar informationen. Kan någon hjälpa mig med detta?
Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Ena metoden är att använda sig av konsolidering i Excel fast jag tror det blir lite för meckigt när det gäller det relativt stora antalet arbetsböcker som är aktuellt i ditt fall.

 

Den andra lösningen, som jag själv har använt mig av i liknande situationer, är att skriva lämplig kod i VBA, som öppnar arbetsböcker, hämtar data, stänger arbetsboken, lägger in det i ditt huvudkalkylblad och upprepas för varje arbetsbok.

Antingen har du en lista på vilka arbetsböcker som är aktuella eller så använder du VBA's filhanteringsfunktioner för att t.ex. loopa igenom alla arbetsböcker i en given mapp.

Länk till kommentar
Dela på andra webbplatser

Instämmer med Oves bedömning. Om alla fakturor har samma utseende/begränsad variation, är det enklaste att använda VBA för att extrahera data från dem.

 

För att använda funktioner för att hämta data från bok måste sökvägen vara absolut, det kan iofs gå att få till.

 

En sökväg till en bok kan se ut som

='D:\Users\User\Desktop\Excel\[bok1.xlsx]Blad1'!$A$1

eller

vara relativ

='[bok1.xlsx]Blad1'!A1

vilket iofs Excel vecklar ut till det ovan vid första bästa tillfälle.

Skapa en tabell, en kolumn bokens sökväg, en bokens namn, en bladets namn och en cellens adress

Alltså en cell med respektiva

'D:\Users\User\Desktop\Excel\

[bok1.xlsx]

Blad1

A1

I nästa kolumn, givet att detta finns i C2:F2

="=" &C2&"[" &D2 &"]" &E2&"'!" &F2

där hela adressen återskapas.

Skapa adresserna för alla böcker (eller ett urval)

Kopiera

Klistra in i tom kolumn, enbart värden och avsluta inmatningen med CTRL+Enter. Med detta evalueras allt du klistrat in och du får in alla dina värden.

Låsa dem? Kopiera igen och klistra in värden.

 

Kanske en möjlig väg om du inte vill ge din i VBA-världen. Bara att uppdatera bok/bladnamn mellan olika böcker, går att göra ganska smidigt tror jag.

Länk till kommentar
Dela på andra webbplatser

Kanske då smidigt om man kopierar alla böcker till en tom arbetsmapp och sedan massomdöper dessa (med ex. TotalCommander) så att filerna heter

1.xls

2.xls

3.xls

osv.

Länk till kommentar
Dela på andra webbplatser

Om du vill att göra det med VBA så prova detta: 

Koden finns även i denna bifogade fil:

FlyttaAdress.xls


Option Explicit

Sub FlyttaAdresser()

Dim Summa As Variant

Dim i As Integer
Dim Namn As String
Dim Gata As String
Dim PostnrOchOrt As String
Dim strBook As String, strDir As String, strSpec As String
Dim objBook As Object

Application.EnableEvents = False                    'Stänger av händelsehantering
Application.ScreenUpdating = False                  'Stänger av skärmuppdatering
Application.Calculation = xlCalculationManual       'Stänger automatisk kalkylering

With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = Application.DefaultFilePath & "\"
        .Title = "Välj mapp för excelfiler!"
        .Show
        If .SelectedItems.Count = 0 Then
            MsgBox "Canceled"
        Else
            strDir = .SelectedItems(1)
            strSpec = "*.xls"                           'Kan behöva ändras till filändelse *.xlsx
            strBook = Dir(.SelectedItems(1) & "\" & strSpec)
        End If
End With

i = 1

Do Until strBook = ""
   
    i = i + 1
    Set objBook = Workbooks.Open(strDir & "\" & strBook)
    Sheets("Blad1").Select
    Namn = Range("C17").Value
    Gata = Range("C18").Value
    PostnrOchOrt = Range("C19").Value
    
    Windows("FlyttaAdress.xls").Activate               'Kan behöva ändras till annan filändelse.
    
    Range(Cells(i, 1), Cells(i, 1)).Value = Namn
    Range(Cells(i, 2), Cells(i, 2)).Value = Gata
    Range(Cells(i, 3), Cells(i, 3)).Value = PostnrOchOrt
    
    objBook.Close savechanges:=True
    
    strBook = Dir()
Loop

Application.EnableEvents = True                     'Öppnar av händelsehantering
Application.ScreenUpdating = True                   'Öppnar av skärmuppdatering
Application.Calculation = xlCalculationAutomatic    'Öppnar automatisk kalkylering

End Sub



Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...