Gå till innehåll

MH_

Medlem
  • Innehållsantal

    185
  • Gick med

  • Dagar vunna

    20

Inlägg postade av MH_

  1. 'senaste mappen du jobbade i/sparade i, eller default (tror jag)
    Sub tst()
        strFolder  = CurDir()
        MsgBox strFolder 
    End Sub
    
    'Om aktuellt dolument är sparat, filens mapp
    Sub tst2()
        strFolder  = ActiveDocument.Path
        MsgBox strFolder 
    End Sub
    
    'eller visa "öppna med" -dialogen
    Sub tst3()
        With Application.FileDialog(msoFileDialogFolderPicker)
            .AllowMultiSelect = False
            .Show
            strFolder  = .SelectedItems(1)
        End With
        
        MsgBox strFolder 
    End Sub

     

    • Thanks 1
  2. har du kollat makrot drygt halvvägs ner på den här sidan (How to batch convert doc to docx😞

    https://www.pdnob.com/document/doc-to-docx.html

    Jag har inte testat. Men det ser rätt ut.

    Tyvärr en bild istället för kod så du får bygga lite manuellt.

    Kan vara värt att testa i alla fall 

    (Och jag antar att Fileformat skall bytast ut mot SaveFormat?)

     

    ***********ed*********

    och här har finns koden i textformat. 

    https://www.datanumen.com/blogs/3-quick-ways-to-batch-convert-word-doc-to-docx-files-and-vice-versa/

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

    • Thanks 1
  3. Du måste använda 2 celler (vet inte om jag missförstod frågan).

    I cell A1 skriver du in din summering

    =7+10+20

    I någon annan cell skriver du

    =A1/ANTALV(DELATEXT(FORMELTEXT(A1);"+"))

    FORMELTEXT() kom med excel 2019 och DELATEXT() kräver excel 365.

    Det går inte att göra det du vill utan FORMELTEXT(). Men du kan räkna antal "+" tecken (+1) med äldre metoder:

    =A1/(LÄNGD(FORMELTEXT(A1))-LÄNGD(BYT.UT(FORMELTEXT(A1);"+";""))+1)

     

    • Like 1
  4. I word får du tydligen tag i dokumentets filformat genom "SaveFormat" (när man tänker efter är "wdsaveformat" en ganska tydlig ledtråd...)
    iX = ActiveDocument.SaveFormat

    Egentligen ganska logiskt att hämta ut egenskapen på det sättet, även om jag tycker att Excels variant är snällare mot hjärnan. Alla dokumentegenskaper man inte viste att man behövde:

    https://learn.microsoft.com/sv-se/office/vba/api/word.document#properties

  5. Har inte testat själv. men du kan väl kolla det här?

    https://learn.microsoft.com/sv-se/office/vba/api/excel.workbook.fileformat

    Konstanter:

    https://learn.microsoft.com/en-us/office/vba/api/excel.xlfileformat

    Vill du ha ett "vanligt" modernt excelformat så är du är alltså ute efter: xlOpenXMLWorkbook    51

    Så i microsoftexemplet bör "save as" raden ändras till 

    ActiveWorkbook.SaveAs fileFormat:=xlOpenXMLWorkbook

    Och om du kollar konstant-sidan så är det en massa format som har ändelsen .XLS (16,27,29,33,39,39,56,43,-4143). Så för "IF-raden" måste du kolla hela gänget 

    Sub PutinSugerOtvättadBjörnK()
    Dim iX As Integer
    
    iX = ActiveWorkbook.FileFormat
    
    If (iX = 16) Or (iX = 27) Or (iX = 29) Or (iX = 33) Or (iX = 39) Or (iX = 39) Or (iX = 56) Or (iX = 43) Or (iX = -4143) Then
        ActiveWorkbook.SaveAs FileFormat:=xlOpenXMLWorkbook
    End If
    End Sub
    

     

    Man borde kunna kolla filändelsen med "ActiveWorkbook.Name". Men Om du har dolt filändelser i utforskaren så skall VBA tydligen respektera det (av någon fullständigt obegriplig anledning).

    • Thanks 1
  6. Först måste du plocka ut själva formeltexten (annars förutsätter Excel att du vill jobba med värdet av beräkningen i A1)

    =FORMELTEXT(A1)

    Om vi tar bort "=" tecknet så får vi något trevligt att jobba med. Det kan du exempelvis åstadkomma genom att byta ut "=" mot ingenting "".

    =BYT.UT(FORMELTEXT(A1);"=";"")

    Sen delat du din text med "+" som skiljetecken (de hamnar i olika celler)

    =DELATEXT(BYT.UT(FORMELTEXT(A1);"=";"");"+")

    se till att texten tolkas som siffror genom att muliplicera med 1:

    =DELATEXT(BYT.UT(FORMELTEXT(A1);"=";"");"+")*1

    Sen beräknar du medelvärdet på de utplockade siffrorna (hamnar i en cell)

    =MEDEL(DELATEXT(BYT.UT(FORMELTEXT(A1);"=";"");"+")*1)

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

    Eller räkna hur många delar det blir när man delar vid "+" tecknet:

    =ANTALV(DELATEXT(FORMELTEXT(A1);"+"))

    och räkna ut medlet genom att dividera summan med den siffran

    =A1/ANTALV(DELATEXT(FORMELTEXT(A1);"+"))

    Lite kortare, men jag tycker personligen bättre om föregående metod. Välj det du tror att du förstår enklast om 6 månader när du försöker lista ut vad tusan du gjorde (och använd Granska->anteckningar: ofta och mycket.).

    • Like 1
  7. I dina exempel så har du uttag/månad och ränta per månad. Så dina perioder är=månader

    Då är det bara att dela månaderna med 12 så får du ut det värde du vill.

    4 år och 8 månader = 4*12+8=56 månader

    56/12=4,66666666...

    Så det här borde göra det du vill:

    =C16/12

    eller om du vill snobba till det:

    =OMFEL(C16/12;"Oändlig utbetalning")

     

    Det är alltid svårt att nollställa hjärnan och ta den enklaste lösningen när man har hållit på att krånglat till det innan 🙂

     

    • Thanks 1
  8. " aldrig kommer betala tillbaka den helt och hållet"

    Ja, eller: du kommer aldrig att minska skulden över huvud taget. 100% av dina inbetalningar går till räntan och inget till amortering. Så skulden öka eller blir densamma, den minskar aldrig.

    Men om inbetalningarna bara är liiiiiiite större än den första räntebetalningen så kommer skulden att amorteras av, även om det går extremt långsamt i början. 

     

    • Like 1
  9. Du har nog hittat gränsen för när dina inbetalningar är för små jämfört med räntan. Dvs skulden minskar aldrig, eller växer, och du kommer aldrig att ha betalt tillbaks (perioder blir oändliga).

    Du kan kolla vad den första räntan blir:

    (18 000 000)*(7%/12)=105 000

    Om du ändrar dina inbetalningar i cellen F13 till 
    105 001
    så minskar du Skulden med en krona den första månaden och det tar "bara" 166 år att betala av skulden. Men om du betalar  105 000:-/ månad så kommer skulden aldrig att minska och du får betala i all oändlighet. Och betalar du mindre än 105 000 så växer dessutom skulden utan att någonsin betalas av.

    Testa att ändra F13 till 105 000 så ser du att det inte går att räkna ut en återbetalningstid igen

     

    Du kan skapa ett felmeddelande av lämpligt slag

    =OMFEL(HELTAL(F16/12)&" år och "&AVRUNDA(REST(F16;12);0)&" månader ";"All your base are belong to us")

    • Like 2
  10. Dina datum är Vänsterställda. Det brukar betyda att datumen står som text i din databas (öka bredden på kolumn och kolla om det bir vänster- eller högerställda).

    För att konvertera dina rådata:

    Markera din "deadline" kolumn och gå till

    Data->dataverktyg->Text till kolumner

    [Nästa>]->[Nästa>]

    Ändra till datum: ÅMD och tryck Slutför

    image.png.70279260b1c08165a0948eb5de64cbec.png

    Ändra visningsformat om det behövs.

     

    uppdatera din pivottabell

    Om du fortfarande inte får några "skapade hjälpalternativ" så kan du högerklicka på  ett av datumen i deadline (i pivottabellen) och välja "gruppera" för att skapa grupepringsvariabler.

     

  11. Om  din källfil alltid heter samma sak kan du göra en pivot med källdata i en annan fil:

    Öppna både källdata- och målfil.

    Ställ dig i målfilen och gå till 

    Infoga->pivottabell 

    I tabell/område markerar du hela kolumnerna i din källdatafil, och "plats" (för pivottabellen) skall ditt målblad anges. Typ:

    image.png.716516ae89ffccc66ae2df26aba96244.png

    Fixa i ordning din pivot så att datum osv blir rätt.

    När du stänger filerna kommer sökvägarna att peka till din externa källdatafil och du kan uppdatera med högerklick.

     

    ÅR/Månad

    Om du t.ex har en variabel som heter datum och släpar den till "rader" så kommer excel att skapa en massa virtuella hjälpvariabler (år, kvartal osv)

    image.png.d66ea2c914748771a0aa355f307bec16.png

    Tag bort Kvartal och datum från "rader" så borde det bli år och månad precis som du vill.

     

    Du har även möljighet att expandera och ha sig i pivoten (med + och -)

     

     

     

     

  12. Jag har ingen aning/åsikt om appen. Men lite allmänt svammel:

    Excel har minst 3 skriftspråk så du måste nog börja med att fundera på vad du vill.

    VBA är det kraftfullaste. Men det är omgivet av så många säkerhetsspärrar att det är svårt att sprida till andra. Och det "känns" som om Microsoft har nått vägs ände.

    M. (Eller heter det .M?) är språket du använder till powerquery. Väldigt kraftfullt för att knåda data. Men specialiserat och kanske lite udda (används eventuellt till BI också).

    Sen har du det "nya" generella språket till "office automate". Det är nog det du har mest nytta av att kunna framöver. Även om händelsehanteringen inom Excel verkar vara kraftigt begränsad så kan du skapa en massa triggers på officenivå. I alla fall om du ligger på one-drive.

    Den stora fördelen är att det är en java-scripts variant så du kan ha lite nytta av tänket utanför office.

    Sen tror jag att det är på gång ett slags pyton-tillägg också. Men det verkar vara  till för att skapa formler på kalkylbladet. Om det någonsin kommer i skarp version.

    Så, klura på vad det är du vill lära sig.

  13. Hej

    Normalt sett dubbelklickar du bara på axeln så får du upp alla alternativ. Längst ner på "alternativ för axel" har du t.ex talformatet

    image.thumb.png.e99b19e494b802aac3c2e9ea7e9cf2e9.png

     

    Vinklingen verkar däremot inte skötas via det här fönstret längre. Det dat du istället via den vanliga menyn. markerar din axel och gå till:

    Start->Justering->

    image.png.9e22857633945c25d0885f3fee31cbb7.png

     

    Annars. Microsofts instruktioner

    https://support.microsoft.com/sv-se/topic/ändra-hur-axlarna-visas-i-ett-diagram-422c97af-1483-4bad-a3db-3a9ef630b5a9

  14. Såg nu att du redan använder VBA. 

    Högerklicka på din kryssruta och peta in en kod i stil med:

    Private Sub CheckBox1_Change()
    If CheckBox1.Value = True Then
        ActiveSheet.ListObjects("Tabell3").Range.AutoFilter Field:=4, Criteria1:="1"
    ElseIf CheckBox1.Value = False Then
        ActiveSheet.ListObjects("Tabell3").Range.AutoFilter Field:=4
    End If
    End Sub

    Fast med rätt namn på Checkbox och tabell. Samt rätt field-nummer.

    Den här koden kommer att ligga under det aktuella Bladet, inte under en modul (när du är i VBA-editorn: Visa-> projektutforskaren  Ctrl+R).

    Det är en händelsehanterare vilket kan ge stora problem. Men det borde inte vara några problem när det är "CheckBox_Change" du bevakar.

  15. Om jag förstår din fråga rätt så behöver du inte VBA. Testa utsnitt istället.

    Ställ dig i din tabell, tryck sedan på (Om du inte ser "tabelldesign" så får du trycka Ctrl+T för att omvandla det till en "riktig" exceltabell)

    Tabelldesign->Verktyg->infoga utsnitt.

    Välj de kolumner du vill ha filter för. 

    När du trycker [OK] så får du fram ett "utsnitt" för varje kolumn och kan filtrera som du vill. Det borde vara precis vad du behöver

     

    Eftersom du bara har Ja/Nej så ser du inte att de är ihopkopplade. Men om du hade haft fler alternativ i någon av kolumnerna så skulle du se att alla alternativ som redan filtrerats bort blir grå. Rätt snyggt.

  16. En tom textsträng. 

    =OM(A1>0;"";"inte större än noll")

    Om formeln står i cell B1 så kan du använda 

    =OM(B1="";"är tom";"är inte Tom"

    Eller felvärdet SAKNAS(). Funkar bättre för vissa typer av diagram

    =OM(A1>0;SAKNAS();"inte större än noll")

    Ingen av formlerna ger "Sant" om du testar med

    =ÄRTOM(B1)

    Och den här ger inte heller t (även om det blir olika svar beroende på om du använder "" eller SAKNAS()) 

    =CELL("typ";B1)

    Och du lär aldrig få cellen att se helt tom ut eftersom det står en formel i cellen.

    Du kan testa B1 Med saker i stil med:

    =(B1="")

    =ÄRSAKNAD(B1)
     

  17. Kolla harkrank inlägg i den här tråden

    https://www.excelforum.com/excel-general/588185-formula-for-getting-data-from-week-number-reverse-weeknum.html

    Om året står i A1 och veckoNR står i B1 så ger det här måndagen 

    =DATUM(A1;1;B1*7)-VECKODAG(DATUM(A1;1;3))-2

    Och söndagen:

    =DATUM(A1;1;B1*7)-VECKODAG(DATUM(A1;1;3))-2+6

    =DATUM(A1;1;B1*7)-VECKODAG(DATUM(A1;1;3))+4

     

    Den skiter sig om du kör vecka 53 när det inte finns (blir året efter)

    Du kan naturligtvis krångla till det om du har lust...

    =OM(B1=ISOVECKONR(DATUM(A1;1;B1*7-2)-VECKODAG(DATUM(A1;1;3)));DATUM(A1;1;B1*7-2)-VECKODAG(DATUM(A1;1;3));"veckan finns inte det valda året ")

    • Like 1
  18. =VÄLJKOL(FILTER(Grund!A:C;(Grund!B:B="kritisk")*(Grund!D:D="kritisk"));1;3)

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

    Där villkoret är:

    (Grund!B:B="kritisk")*(Grund!D:D="kritisk")

    Om man skriver ett villkor i en parantes så blir det SANT/FALSKT, som excel även tolkar som 0/1. Så om du multiplicerar parenteserna så måste båda vara sanna för att summan skall bli 1 (sant)

    Petar du in villkoret i en "FILTER" så får du de rader (kolumn A:C) som uppfyller villkoret

    =FILTER(Grund!A:C;(Grund!B:B="kritisk")*(Grund!D:D="kritisk"))

    Sen använder du VÄLJKOL() för att plocka ut kolumn 1 och 3 (A och C)

    =VÄLJKOL(FILTER(Grund!A:C;(Grund!B:B="kritisk")*(Grund!D:D="kritisk"));1;3)

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

    MEN!! det här betyder inte att data är kopierat. Data visas bara så länge "kritiskt" står kvar i fliken Grund

     

    https://support.microsoft.com/sv-se/office/funktionen-filter-f4f7cb66-82eb-4767-8f7c-4877ad80c759

    https://support.microsoft.com/sv-se/office/funktionen-väljkol-bf117976-2722-4466-9b9a-1c01ed9aebff

×
×
  • Skapa nytt...