Hämta data från Internet direkt till ett Excelkalkylark

Nivå: Medelsvår

Med Excels QueryTables kan man bygga applikationer som hämtar data från en specifik plats på Internet, rakt ner till en arbetsbok i Excel. Antag t.ex. att du skulle vilja ha en arbetsbok i Excel där du samlar aktuella boräntor. Det första vi måste ta reda på är vilka tjänster på nätet som vi kan använda oss av. Eftersom jag är en “text-tv fantast” så har den statliga televisionen (självklart finns det kommersiella alternativ:) lagt ut text-tv utlagd på Internet.

Vad sägs om att ha ett makro som automatiskt går ut på Internet och hämtar ner aktuella boräntor, direkt till en Excelarbetsbok? Vi försöker skapa ett makro som gör detta! Nedan visar jag principen för hur ett sådant makro kan se ut:

Sidan vi skall hämta data ifrån

För att förstå stegen i makrot föreslår jag att vi först besöker SVT-text, med aktuella boräntor och den sida där t.ex Nordea’s boräntor presenteras. Klicka här för att se hur den sidan ser ut. Väl på sidan kan vi notera följande. Nordeas boräntor presenteras på sidan nummer 3 av totalt 5 sidor. (Tittar man högst upp till höger, kan man se att varje sida är numrerad. I detta fall skrivs den sida vi är intresserade av som 3(5)). Denna information, dvs. vilken tabell webbsidan med våra data har, skall vi notera. Den skall vi använda i vår kommande programmering.

Projektet

Koden vi lägger in vårt Excel-makro ser i sin helhet ut på följande sätt:

Sub aktiekurs()

Range(”A1:A9″).Select

 Selection.Cut

    Application.CutCopyMode = False

    Selection.EntireColumn.Insert

‘Hämta data från SVT-Text

Set shfirstqtr = Workbooks(1).Worksheets(1)

Set qtqtrresults = shfirstqtr.QueryTables _

    .Add(Connection:=”URL; http://svt.se/svttext/web/pages/232.html”, _

    Destination:=shfirstqtr.Cells(1, 1))

With qtqtrresults

    .WebFormatting = xlAlternateArraySeparator ‘ xlAllTables

    .WebSelectionType = xlSpecifiedTables

    ‘Hämta data från exempelvis Nordeas tabell – sidan 3 på Text-TV

    .WebTables = “3″

    .Refresh

End With

Range(”A4″).Select

    Selection.Delete Shift:=xlUp

Range(”A10:B22″).Select

    Selection.Delete Shift:=xlToLeft

‘Formatera Rubrik…Grön och Gul.

Range(”A4″).Select

    With Selection.Interior

        .ColorIndex = 50

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

    End With

Range(”A5″).Select

    With Selection.Interior

        .ColorIndex = 6

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

    End With

‘Formatera typsnitt…

Range(”A1:A23″).Select

    With Selection.Font

        .Name = “Courier New”

        .Size = 10

        .Strikethrough = False

        .Superscript = False

        .Subscript = False

        .OutlineFont = False

        .Shadow = False

        .Underline = xlUnderlineStyleNone

        .ColorIndex = xlAutomatic

    End With

 

End Sub

Några kommentarer till vba-koden i Excel ovan:

I den första delen sätter vi in en ny kolumn i vårt kalkylark. I den andra delen, som börjar under kommentaren, Hämta data från SVT-Text, kan vi notera att vi instansierar objekten vi skall använda. Principen för programmeringen är fölande:

 1. Först talar vi om vart, vi skall hämta våra data ifrån. Lägg märke till att vi instansierar QueryTables samt att vi talar om från vilken sida data skall hämtas. Data skall hämtas från den URL-adressen som står beskriven till Nordeas SVT-textsidor.

2. I den andra delen måste vi tala om var någonstans på SVT-textsidan vi skall hämta våra data. Vi definierar att våra data med boräntor finns i en tabell på SVT-textsidan, och att denna tabell med data har nummer 3. Detta är i princip den viktigaste koden för att hämta data till kalkylarket.

3. Resterande kod är egentligen valfritt. Koden handlar om olika typer av formateringar som vi vill att sidan skall ha när data väl finns på kalkylarket. Här kan du experimenterar mer med layouten än vad jag har gjort i detta exempel.

 Kommentar: Querytables är ett mycket kraftfullt sätt att hämta ner data från Internet till en arbetsbok i Excel.

Du kan ladde ner exemplet ovan och testa mer på egen hand!

 

Ladda ner:  webquery

Share