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

Rekommendera Poster

Hej.

Jag är lite nördig så jag brukar spara ut mina kontohändelser från min bank i Excel för att hålla koll på ekonomin. Det funkar skitbra idag, men nu är Swedbank på väg att introducera "Nya internetbanken" och det ställer till det lite för mig och min ekonomikoll. Jag kan nämligen inte kopiera ut datan på samma sätt som tidigare, eftersom den numera är omformaterad.

Visserligen har Nya internetbanken infört samma typ av redovisning som jag har i mitt excelblad, men jag har data från 2008, medans de bara sparar i 18 månader.

 

Min plan är att kopiera hela deras sida, köra ett makro i Excel och på så vis få ut datan i rätt celler i mitt blad. Jag har kommit en bit, men jag har fastnat när jag nu vill styra upp datan baserat på innehållet.

Målet är att få ut detta i en array (x,3):

 

NAMN   DATUM   VÄRDE   TILLGÄNGLIGT

 

 

Om vi börjar med att titta vad jag får från websidan (anonymiserad data):

 


    Hem
    Konton och kort
    Betala och överföra
    Lån
    Utgiftskollen
    Spara och placera
    Ladda kontantkort
    Dokument och
    meddelanden
    Lämna synpunkter
    Logga ut

Sparbank

    Kundtjänst
    Påminnelser
    Arne Anka

Internetanslutningen har återställts.
Privatkonto
Totala utgifter 25 maj - 24 jun

1 000,00 kr

    5555-9

    11 111 111-1

Tillgängligt belopp
1 010,00
Senaste transaktioner
Maj 2016
Transaktionsdatum
Belopp
Saldo

    PUBEN
    2016-05-30
    -10,00
    -
    UNICEF
    2016-05-30
    -10,00
    -
    HYRA
    2016-05-30
    -10,00
    -
    TELEFON
    2016-05-30
    -10,00
    -
    SYSTEMBOLAGET
    2016-05-29
    -10,00
    1 000,00
    DÄCKFIRMAN
    2016-05-28
    -10,00
    990,00
    MATAFFÄREN 1
    2016-05-28
    -10,00
    980,00
    MATAFFÄREN 2
    2016-05-28
    -10,00
    970,00
    GYMMET
    2016-05-27
    -10,00
    960,00
    TELEFON
    2016-05-26
    -10,00
    950,00
    SPARANDE
    2016-05-26
    -10,00
    940,00

 

Så, här kan vi snabbt se att: skräpdata undantaget, så bör datan formateras ned i 4 kolumner. Varje rad med data i texten ovan börjar med fyra blanksteg och avslutas med [CR][LF]. Alltså inte mycket att hämta där. Jag behöver dock någon fast punkt i datan för att förklara för koden var jag är och efter lite funderande bestämde jag mig för att utgå från datumstämpeln. Det är det enda som är konstant. Jag kan även städa bort oönskad data med hjälp av positionen av datumstämpeln.

 

 

Tanken är alltså att köra ISDATE för att reda ut vilken bit som är datum och vilken som inte är det, när jag vet det tänkte jag placera ett tecken till där (dvs fältet med datum +2 så att den hamnar precis efter det värde som motsvarar tillgängligt) Jag har använt ¤ för detta i koden.

Jag börjar med att städa bort newline tecknen eftersom jag fått för mig att detta är lättare att göra på en string än i en array.

Sedan ersätter jag de fyra blankstegen med ett ! för att kunna använda som kolumnseperator.

 

När jag väl fått in ¤ tecknet tänkte jag köra en split på det tecknet för rader, och därefter en ny split på ! för att få ut kolumner och sen tror jag att saken är biff.

 

 

Tyvärr då är jag inte så bra på varken arrays eller string hantering, så så här långt kom jag. Jag har fastnat lite här eftersom den array jag skapar endast innehåller 1 fält. Jag funderar på att använda regex istället, kan man köra en split på regex månne? Problemet då blir att splitten hamnar fel.

 

Namnet är ju det jag vill ha först i varje rad, men jag måste ändå använda datumen för att städa bort skräpdatan..

Sub Konto()

   Dim strArray() As String
   Dim intCount As Integer
   Dim objData As New MSForms.DataObject
   Dim strText

       objData.GetFromClipboard
       strText = Replace(objData.GetText(), vbNewLine, "")
        strText = Replace(strText, "    ", "!")
       MsgBox strText
 
   strArray = Split(strText, ¤)
    
   
   For intCount = LBound(strArray) To UBound(strArray)
    If IsDate(strArray(intCount)) = True Then
    strArray(intCount) = strArray(intCount) & "¤"
    End If
       
   Next


End Sub

Detta är vad jag får ut i immediate med koden ovan:

 

!Hem!Konton och kort!Betala och överföra!Lån!Utgiftskollen!Spara och placera!Ladda kontantkort!Dokument och!meddelanden!Lämna synpunkter!Logga utSparbank!Kundtjänst!Påminnelser!Arne AnkaInternetanslutningen har återställts.PrivatkontoTotala utgifter 25 maj - 24 jun1 000,00 kr!5555-9!11 111 111-1Tillgängligt belopp1 010,00Senaste transaktionerMaj 2016TransaktionsdatumBeloppSaldo!PUBEN!2016-05-30!-10,00!-!UNICEF!2016-05-30!-10,00!-!HYRA!2016-05-30!-10,00!-!TELEFON!2016-05-30!-10,00!-!SYSTEMBOLAGET!2016-05-29!-10,00!1 000,00!DÄCKFIRMAN!2016-05-28!-10,00!990,00!MATAFFÄREN 1!2016-05-28!-10,00!980,00!MATAFFÄREN 2!2016-05-28!-10,00!970,00!GYMMET!2016-05-27!-10,00!960,00!TELEFON!2016-05-26!-10,00!950,00!SPARANDE!2016-05-26!-10,00!940,00

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Hittar du date så har du ju namnet på strArray(intcount -1)

Du borde ha en till array där du sparar findata. eller kanske en matris eller kanske en array med egendefinerad Type.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag använder själv inte Swedbank, men tänkte bara komma med en kort fråga;

Går det inte att exportera ett kontoutdrag direkt till Excel-format i internetbanken?

Jag uppfattar din trådstart såsom att du kopierar texten från webbsidan, men jag kanske har fel där?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

otestad kod

Dim rows() As String
rows = Split(objData.GetText(), vbNewLine)

Dim result As String
result = ""

For count = LBound(rows) To UBound(rows)
If IsDate(Trim(rows(count))) = True Then
  result = Trim(rows(count-1)) + vbTab + Trim(rows(count)) + vbTab + Trim(rows(count+1)) + vbTab + Trim(rows(count+2)) + vbNewLine
End If
Next

Redigerad av i3o6

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ove, du har helt rätt.

I deras gamla system gick det utmärkt att kopiera ut all datan och den bibehåll strukturen, i detta nya funkar det inte. Allt blir en lång rad.

Jag har mailat dem och bett dem lägga in en "rådata" knapp för oss alla nördar (jag gjorde det samma med mitt kraftbolag och detta finns nu). Dock kommer inte Swedbanks IT gäng svara på mitt mail så jag vet inte om jag kommer få detta.

Se bifogad bild för en vy över var jag måste hämta från.

 

 

i306

Tack för hjälpen.

Jag var tydligen närmare lösningen än jag trodde, men det vart du som hjälpte mig att se det.

 

Full kod nedan.

 

(Kopiera Kontodetaljerna från Swedbanks nya internetbank först eftersom koden hämtar datan från clipboard)

Sub Konto()

   Dim objData As New MSForms.DataObject
   Dim rows() As String
   Dim count As Integer
         
   objData.GetFromClipboard
   rows = Split(objData.GetText(), vbNewLine)


   result = ""

   For count = LBound(rows) To UBound(rows)
        If IsDate(Trim(rows(count))) = True Then
            result = Trim(rows(count - 1)) + vbTab + Trim(rows(count)) + vbTab + Trim(rows(count + 1)) + vbTab + Trim(rows(count + 2))
            Debug.Print result
        End If
   Next

End Sub

post-66198-0-78743200-1464771555_thumb.png

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...