Just nu i M3-nätverket
Jump to content

vb kod


nisse24
 Share

Recommended Posts

jag undrar om de är någon här som är bra på vb kodning

skulle vilja ha lite hjälp det är så att jag har några fonder i kolumner a  b c d e f  och vidare idessa kolumner finns deras kurs skulle vilja hämta från ett vist datum kursen från dessa så att dom hamnar i 1 kolumn hoppas  ni förstår/mvh micke

Link to comment
Share on other sites

Din tråd har nu flyttats till Excel-forumet så får vi se om någon kan hjälpa dig med ditt problem.

 

Cecilia

Moderator

Link to comment
Share on other sites

Strunta i VBA och använd datatypen aktie istället.

https://support.microsoft.com/sv-se/office/hämta-en-aktiekurs-e5af3212-e024-4d4c-bea0-623cf07fbc54

 

Markera dina aktienamn och gå till 

DATA->datatyper->aktier

Om du har tur så känner excel igen alla dina aktier (det ser du på om de får en ikon med "grekiska kolumner")

 

Annars får du testa att skriva in aktienamnet på lite olika sätt tills Excel gissar rätt och skriver in någonting i stil med:

Saab AB (XSTO:SAAB B)

 

Sen kan du markera cellerna och få fram en massa data. Du kan t.ex visa "Price".

image.png.01a379dcfb3d1acc4aa5f34d63577e01.png

 

 

 

för att få fram Historiska data använder du Formeln "AKTIEHISTORIK()" Där du pekar på namnen i listan  + de datum du vill ha

https://support.microsoft.com/sv-se/office/funktionen-aktiehistorik-1ac8b5b3-5f62-4d94-8ab8-7504ec7239a8

 

Det här ger t.ex slutkursen för saab alla handelsdagar från "2022-01-01"-"2022-01-27"

=AKTIEHISTORIK(A5;"2022-01-01";"2022-01-27";0)

Tyvärr i kolumnformat.

Men, du kan välja bort att visa datumen och transformera så kan du ha data i radformat. T.ex SAAB

=TRANSPONERA(AKTIEHISTORIK(A5;"2022-01-01";"2022-01-27";0;0;1))

 

 

Skriv in start- och slutdatum i varsin cell så kan du ändra dina gränser på ett enkelt sätt 

image.png.ba60443d0798b4a1be97ea86860da48d.png

 

I teorin borde man kunna lägga datum i en egen formel men det funkar inte för mig. Istället kör vi en specialare i cell E4 för att visa datum i rad 4 och + SAAB i rad 5

=TRANSPONERA(AKTIEHISTORIK(A5;$B$1;$B$2;0;;))

I E6 lägger du en formel som bara visar slutkurserna för VOLVO. Den kopieras ner så långt det behövs

=TRANSPONERA(AKTIEHISTORIK(A6;$B$1;$B$2;0;;1))

 

Mycket smidigare än VBA.

Den enda nackdelen är att informationen är fördröjd.  Enligt den här sidan:

https://support.microsoft.com/sv-se/office/om-finansiella-datakällor-för-aktier-98a03e23-37f6-4776-beea-c5a6c8e787e6

är fördröjningen 15 minuter.

Men om jag kollar på "last trade time" (=A5.[Last trade time]) så verkar det handla om mer än en timme. Men det beror på att den visar GMT-tid. Lägg på en timme så blir det rätt 

=A5.[Last trade time]+1/24

 

Har du tillgång till en webbsida med realtidsdata så kan det vara värt att hämta där istället. 

Om du söker på eforum så finns det en massa gamla trådar (innan datatypen Aktie fanns) som kan vara till hjälp

https://eforum.idg.se/search/?q=aktiekurser&quick=1

 

Edited by MH_
obegripligt blev det
Link to comment
Share on other sites

Bahhh. det kunde man ge sig XXX på.

Laila har naturligtvis gjort en begriplig förklaring (och löst problemet med datumraden).

https://www.xelplus.com/excel-stockhistory-function/

 

Jag är nästan lite stolt för att mitt exempel liknar hennes. Då är det inte helt korkat i alla fall 🙂

 

Bifogar min exempelfil så slipper du skriva in allt.

Bok1.xlsx

Edited by MH_
Link to comment
Share on other sites

Nästan rätt.

Om du väljer att titta över en längre period så märker du att Volvo Cars har funnits kortare tid än övriga aktier. Så det funkar inte att hämta datum en enda gång.

Så AKTIEHISTORIK() funkar - men mitt upplägg kräver modifiering (och där tog min ork slut).

 

************************

och nu läser jag din fråga igen och inser att jag fullständigt har missförstått vad du vill.

Kan du skicka med ett avskalat dokument så kanske vi kan hjälpa dig.

 

 

Edited by MH_
Link to comment
Share on other sites

Om jag förstår dig rätt så har du fonder, namnen, som rubriker i kolumner och i första kolumnen har du datum  som gäller för alla kurser på den raden?

 

Om du har senaste version av Excel så:

=TRANSPONERA( FILTER(kurstabell[[AstraZeneca]:[Ericsson B]];kurstabell[Datum]=AQ13))

Givet att du har tabell som heter kurstabell, startkolumner heter Datum, ett värdepapper som heter AstraZeneca och ett som heter Ericsson B

Och att du har ditt datum du vill få ut i AQ13

FILTER är en ny smart funktion som kan returnera en mängd av värden i samma format/ordning som de data den filtrerar är i. För att få data i en kolumn transponerar vi med annan ny smart funktion.

 

As simple as that.

Äldre version av Excel säg till så fixar vi även det.

 

 

Link to comment
Share on other sites

Fick en printscreen via PM (inget hemligt, du kunde postat här och inser att frågan är mer komplex än vad denna tråd ger sken av.

 

Jag föreslår att @nisse24 tar sig tiden och skapar ett litet exempel med dummy-data med samma uppställning som i originalboken och med exempel på exakt vad som ska fås ut.

 

I PM även ord om VBA-kod, lite annan metod, och frågan är om du verkligen behöver VBA-kod. Jag brukar säga att man ska fundera både en och två gånger innan man lägger in kod i Excel, om det inte går att lösa på annat sätt.

Kanske kanske denna version av formeln fungerar baserat på bilden jag såg, eftersom du inte har formaterat som tabell är det vanliga cell-referenser:

=FILTER(FILTER(B6:F19;B4:F4<>"");A6:A19=J5) för att få dem horisontellt

=TRANSPONERA(FILTER(FILTER(B6:F19;B4:F4<>"");A6:A19=J5)) för att få dem lodrätt.

 

Om du ska ta in dessa i VBA är det inte helt fel att räkna ut det med formler på ett blad och sedan i VBA-stega igenom resultatet. Eller ta in resultatet direkt i VBA.. mmh... nej, får inte en version med Worksheetfunction.Filter att fungera men inte så svårt att skriva en egen funktion för just detta fall om man vill.

 

 

 

bild.png.c5181c900e9ba7a64eb46c1ffcb7b2d6.png

Link to comment
Share on other sites

ok tack den första formeln behöver jag väll inte med tanke att dom står redan i vågrätt fond 1 och fond 2 och fond 3  finns i på ett annat blad lodrätt men jag testar med den andra formen =transponera så får vi se men det blir ett nytt datum varje dag då måste koden ändras

Link to comment
Share on other sites

Se det som exempel på hur man kan göra.  Förstå formeln, anpassa den.

 

Datumfältet kan givetvis i sin tur vara dynamiskt, ta toppvärdet/maxvärdet från kolumnen med datum eller bara formeln =IDAG() som ger dagens datum.

Eller ta annan nyckel än dag om du så vill, eller annat område?

 

Du kan använda annan formel även om du alltid vill ha första raden i din tabell. FÖRSKJUTNING exempelvis.

 

 

Link to comment
Share on other sites

det finns mycket att lära sig jag beundrar ni som kan detta den formen filter vad gör den

Link to comment
Share on other sites

jag får ogiltig funktion när jag skriver TRANSPONERA(FILTER(FILTER(B6:F19;B4:F4<>"");A6:A19=J5))

Link to comment
Share on other sites

den där filter man skriver i koden är det mellarummet  mellan fonderna isåfall blir koden lång om man har många fonder

Link to comment
Share on other sites

Nu är jag inte  med dig, som sagt du får gärna ge ett komplett exempel på vad du har och vad du vill ha.

om du få resultatet #KALK i fältet du skriver den beror det på att villkoren i den inte uppfylls (är referenserna korrekta).

 

Om du får #SPILL är det för att det finns data i vägen för formeln som fyller så många celler som den behöver för att visa alla  värden.

 

Svårt att hjälpa dig mer med den information du gett oss.

 

Link to comment
Share on other sites

ok vi börjar från början först har vi denna  nu kom bilderna i fel ordning men vi börjar med bilden längst ner  därifrån vill jag få kursen till första bilden det är olika blad skulle man skriva dennaformel så tror jag att den blir väldigt lång TRANSPONERA(FILTER(FILTER pga många fonder det datum man skriver den kursen skall då komma till första bilden

 

bilden högre upp i tråden där är vi en bit på väg hoppas ni förstår vad jag menar

 

image.thumb.png.657a424f43979ce48c7c8dca56a197ae.png

image.thumb.png.bb0a80d434e132e20c3a14044ddfa9dd.png

Link to comment
Share on other sites

Office 2007, då får vi glömma filter och transponera. Då blir det svårare att få detta helt dynamiskt.

Då rekommenderar jag dig snarare att ta ut listan med fonder manuellt och sedan använda PASSA och INDEX i par för att hitta och hämta kursen.

 

En exempelbok bifogad där jag delat upp alla steg i skilda celler.

 

Exempel.xlsx

Link to comment
Share on other sites

Givetvis kan du skriva datum förhand, välja i en dropbox, eller ta dagens datum. Bara det är ett datum som står i cellen.

 

Som sagt om VBA-kod; att OM det går att lösa med formler är det alltid att föredra.

Link to comment
Share on other sites

jag prövar att gå vidare  med ditt ark det enda problem är datum den måste jag kunna ändra så att det blir en annan kurs har du någon lösning på det

Link to comment
Share on other sites

Du raderar/skriver över formeln som står i cellen, behövs inget mer.

 

Link to comment
Share on other sites

Power-query är excels verktyg för det du vill göra. Tyvärr flyttar det runt och byter namn mellan versionerna. Du kan till och med vara tvungen att aktivt ladda ner det om du har en gammal excel.

Hmmm, Den kanske kräver excel 2010

https://www.microsoft.com/sv-se/download/details.aspx?id=39379

 

Ok, bara för att locka dig till uppdatering...

Det första du behöver göra är att omvandla dina originaldata till en tabell genom att klicka Ctrl+T

 

ett förenklat exempel med slumpdata

image.png.4c10c2caaa9ecb0bee714f2a23429f65.png

 

Sen startar man powerquery - I nyaste excel genom:

DATA->från tabell intervall

 

När du är inne i powerquery så markerar du alla kolumner utom datum och går till

Transformera->Normalisera kolumner->normalisera enbart valda kolumner

Arkiv->Stäng och läs in

 

Då har du en sparad fråga som du kan uppdatera varje gång du har fyllt på nya data i din rådatatabell. och outputen blir så här (inte alla rader):

image.png.20729c4c7625eee4043c672e62cf9540.png

 

Om du går in i powerquery-editorn och väljer 

Start->Avancerad redigerare

så ser du att själva .m -koden är ganska kort och relativt begriplig (om man kommer ihåg att kommatecken används till allt...).

let
    Källa = Excel.CurrentWorkbook(){[Name="Tabell1"]}[Content],
    #"Ändrad typ" = Table.TransformColumnTypes(Källa,{{"Datum", type datetime}, {"Amf", type number}, {"Europa", type number}, {"Global", type number}}),
    #"Endast valda kolumner normaliserades" = Table.Unpivot(#"Ändrad typ", {"Amf", "Europa", "Global"}, "Attribut", "Värde")
in
    #"Endast valda kolumner normaliserades"

 

Och om du vill köra på din tabell med mellanliggande kolumner som skall ignoreras tillkommer bara en rad där de tas bort (ur körningen-inte ur rådata)

 

let
    Källa = Excel.CurrentWorkbook(){[Name="Tabell1"]}[Content],
    #"Omsorterade kolumner" = Table.ReorderColumns(Källa,{"Datum", "Amf", "Europa", "Global", "Kolumn1", "Kolumn2", "Kolumn3"}),
    #"Borttagna kolumner" = Table.RemoveColumns(#"Omsorterade kolumner",{"Kolumn1", "Kolumn2", "Kolumn3"}),
    #"Endast valda kolumner normaliserades" = Table.Unpivot(#"Borttagna kolumner", {"Amf", "Europa", "Global"}, "Attribut", "Värde")
in
    #"Endast valda kolumner normaliserades"

 

 

Så - Uppdatera excel....

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share



×
×
  • Create New...