Gå till innehåll

MH_

Medlem
  • Innehållsantal

    185
  • Gick med

  • Dagar vunna

    20

Inlägg postade av MH_

  1. Missade att du hade årskolumnen som x-axel också. Då behandlas hela x-axeln som text, oavsett var krysset sitter och då får man inget min/max.

    Eftersom du har centrerat B-kolumnen går det inte att se om det är datum eller text. Men om du har riktiga datum i B-kolumnen men väljer att bara visa Månad och dag  så borde det bli som du vill om du bara använder B-kolumnen för x-axeln.

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

    Jag skulle gör om diagrammet och bara använda B-kolumnen. Dvs strunta i årsangivelsen i A-kolumnen.

    Den stora fördelen är att X-axeln blir en riktig datumaxel. Dvs det blir kortare avstånd mellan två mätningar som sker med en veckas mellanrum jämfört med två mätningar som sker med 2 månaders mellanrum.

    Så här blir mina (nästan) slumpdata med textaxel:

    image.png.4f7a0933ebc0e7f4f50861bdb97c249c.png

    Samma data med datumaxel

    image.png.3994556023d9ebfa4c49661465c98ba8.png

    jag tvingade in kvartalsmätningar i början bara för att det skulle vara extra tydligt att avstånden blir fel med textaxel. 

     

     

  2. Det är snarare en effekt av att aftonbladet är en Stockholmstidning än att det är en morgontidning.

    Eftersom vi i det egentliga Sverige (dvs norr om skåne) har den ologiska vanan att kalla måltiden man äter strax efter middag för lunch medan kvällsmålet kallas middag så är det ju konsekvent att kalla kvällen för middagstid.

    • Like 2
    • Haha 1
  3. Du kan ju hålla isär filnamn och sökväg tills du är färdig med kontrollen. Typ:
    ...början på makrot...
    sFilnamn = ActiveWorkbook.Name
    sFilnamn = Left(sFilnamn, InStrRev(sFilnamn, "."))
    sFilnamn = sFilnamn & "pdf"
    
    If Not Dir(sSökväg & sFilnamn) = "" Then
        svar = MsgBox("Filen finns redan. Vill du ändra namn?", vbYesNo)
            If svar = vbYes Then
                sFilnamn = InputBox("Ange nytt namn", , sFilnamn)
            End If
    End If
    
    ' Sen slår du ihop den oförändrade sökvägen med det (eventuellt) ändrade filnamnet så att du bara får en sträng i ditt fortsatta makro:
    sSökväg = sSökväg & sFilnamn

    ....Resten av ditt makro....

    • Thanks 1
  4. Du kan använda DIR (funkar som gamla doskommandot). Om du tar med filnamnet i din "Dir" så kan du se om du får ett svar eller inte

    If Not Dir(sSökväg & sFilnamn) = "" Then
         MsgBox "Filen finns redan "
    End If

    Eller, med en val-box där du kan välj att avbryta

    InputBox function (Visual Basic for Applications) | Microsoft Learn
    VBA - Dialog Box - Automate Excel

    T.ex så här (avbryter om du säger nej. Annars fortsätter makrot)

    Dim svar As Integer
    If Not Dir(sSökväg & sFilnamn) = "" Then
        svar = MsgBox("Filen finns redan. Vill du skriva över?", vbYesNo)
            If svar = vbNo Then
                Exit Sub
            End If
    End If

     

    Eller så här om du vill ge chansen att byta filnamn istället

    If Not Dir(sSökväg & sFilnamn) = "" Then
        svar = MsgBox("Filen finns redan. Vill du ändra namn?", vbYesNo)
            If svar = vbYes Then
                sFilnamn = InputBox("Ange nytt namn", , sFilnamn)
            End If
    End If

    Ja. Du måste naturligtvis fixa det som skall göras före/efter. Men du fattar principen.

     

    • Thanks 1
  5. Jag brukar högerklicka på filen och göra den betrodd så slipper man tjatet (viss reservation: Vet inte om man får göra det på nätverksenhet.). Men nu när jag tänkte testa så får jag inte fram den möjligheten. Hmmm. 

    Om ni jämfört inställningar i säkerhetscentret förutsätter jag att du kollat att nätverksplatser är ikyssat under :

    Säkerhetscenter > Inställningar för Säkerhetscenter > Betrodda dokument: "tillåt att dokument i ett nätverk anses vara betrodda"
    Kolla även motsvarande kryss under: 
    Säkerhetscenter > Inställningar för Säkerhetscenter > Betrodda platser.

    https://support.microsoft.com/sv-se/office/lägga-till-ta-bort-eller-ändra-en-betrodd-plats-i-microsoft-office-7ee1cdc2-483e-4cbb-bcb3-4e7c67147fb4

     

    Annars vet jag inte. Det kan lika gärna vara en Windowsinställning. 

    Här har du förslag på olika orsaker

    https://support.microsoft.com/sv-se/office/betrodda-dokument-cf872bd8-47ec-4c02-baa5-1fdba1a11b53

    Hos oss har IT spärrat möjligheten att spara inställningen "inaktivera VBA-makron med avisering.". Den lägsta nivån av säkerhet man får välja är "inaktivera VBA-makron utom digitalt signerade....". Så man får skapa ett personligt Certifikat med:

    C:\Program Files (x86)\Microsoft Office\root\Office16\SELFCERT.EXE

    Sen får man öppna sin makrobok och signera: 
    Öppna  VBA-editorn (ctrl+[F11]), Verktyg-> digital signatur
    https://support.microsoft.com/sv-se/office/signera-ditt-makroprojekt-digitalt-956e9cc8-bbf6-4365-8bfa-98505ecd1c01

     

    ******utvikning**********

    Det börjar överlag bli knepigt att använda VBA. Det verkar som om "Automate" och Power Automate med det javaskript-liknande språket (?typescript?) och powerQuery/powerpivot/BI med "M"/DAX är framtidens skriptverktyg i Excel. VBA skapades ju innan säkerheten hade fokus så det finns en uppenbar risk att det hamnar i arkivet tillsammans med gamla "excel4-makron". Dessutom börjar matris-formlerna i excel bli så pass kraftfulla att de klarar av sånt man behövde VBA för tidigare. 

    Jag antar att de gamla hundarna får lära sig "sitt" igen.

     

    • Like 1
  6. ****************************************************************************************************

    I Eforum hade vi en Tråd med nya funktioner i Excel (som jag råkade döda när jag tog bort mina inlägg). Jag tänkte att vi skulle kunna starta något liknande här.

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

    Textfunktioner:

    Textmanipulation har aldrig varit Excels starka sida. Men nu finns det tre nya funktioner som hjälper till att splitta textvärden på olika sätt.
    DELATEXT (text,col_delimiter,[row_delimiter],[ignore_empty], [Skiftägeskänsligt], [pad_with])

    Delar upp texten till flera celler utifrån något tecken. Exempelvis genom att splita på kommatecken. Dvs något slag motsats till TextJoin

    Exempeltext i cell A1: 
    Ett, två, tre, fyra.  tio, elva, tolv

    =DELATEXT(A1;",";;SANT;0)  Ger:

    image.png.1bf81229ae1568f1b8fad17a3362b2d6.png

     

    Man kan även lägga till flera "delare" i en matris. T.ex både komma och punkt {",";"."}
    =DELATEXT(A1;{",";"."};;SANT;0)  Vilket ger
    image.png.13213c76a806b5856456ec675b6fe8e1.png

    Det finns även färdiga formler för att plocka ut delar till en cell. Textföre() hämtar allt till vänster om skiljetecknet

    =TEXTFÖRE(text,avgränsare,[instance_num], [match_mode], [match_end], [if_not_found])

    Där instance_num kan vara både positivt och negativt. Ett negativt nummer betyder att man räknar från slutet

    =TEXTFÖRE(A1;",";1)  ger svaret  image.png.9aab8e9b90eb589a8fa82390a3e8e63a.png , dvs allt innan det första kommatecknet medan:

    =TEXTFÖRE(A1;",";-1)  ger svaret image.png.e73e5b6f2eae7e28bc008a8612d62ba6.png, dvs man visar allt innan det sista kommatecknet (första från slutet) 

     

    Det finns även en likadan formel som räknar från slutet.

    =TEXTEFTER(A1;",";2) ger image.png.2ddd76b47f783032177d49d574e774f8.png, dvs allt efter det 2:a kommatecknet medan:

    =TEXTEFTER(A1;",";-2) ger image.png.f74334daf98a6b332dc3ed07073aec0f.pngdvs allt efter det 2:a kommatecknet från slutet:

     

    MATRISTILLTEXT gör att du kan slå ihop flera celler till en text på ett strukturerat sätt (tänk Mikael skapar skript). Antag att vi har en matris i A1:D2

    image.png.9c4c8bb972da0d50ed1affce6a2e11bc.png

    =MATRISTILLTEXT(A1:D2)  ger då resultatet (i en cell) image.png.c71d54cfa1ecad67c748d8877e5963bf.png. Men om man skrver in argumentet "Strikt format"

    =MATRISTILLTEXT(A1:D2;1) Blir reultatet istället: image.png.6740a5771bbbb16ba6f572a100e4d81a.png. Vilket kan vara väldigt användbart om man vill bygger skript/former eller liknande.

    =VÄRDETILLTEXT(A1;1)  gör samma sak för en cell i taget. Dvs 1 blir 1 medan Ett blir "Ett"

    Hmmmm. Varför googla innan? Här är en sammanställning av textfunktioner:

    https://support.microsoft.com/sv-se/office/textfunktioner-referens-cccd86ad-547d-4ea9-a065-7bb697c2a56e

    exempelvis
    =VALUTA(A1) som omvandlar talet i A1 till en textsträng med valutaformat, typ:  29.00 kr 
    =FASTTAL(A1;5) som omvandlar talet i A1 till en textsträng med 5 decimaler
    Men det kan man ju lika gärna göra med TEXT() och avrunda
    INITIAL() gör så att alla ord börjar med stor bokstav. Ett bra komplement till VERSALER() och GEMENER()

     

    Matrismanipulationer

    Antag att du t.ex har matat in data på flera blad. Det har alltid varit extremt svårt att slå ihop data till en datatabell som man faktiskt kan räkna med (Och Monshi har på ett tålmodligt sätt förklarat varför det var ett dumt upplägg)

    Men Nu kan du stapla ihop data till en enda lång vertikal kolumn(er) med hjälp av VSTACK 

    Exempel om du har data i cell A4:B30 i blad 2 till Blad7

    =VSTACK(Blad2:Blad7!A4:B30)

    Nu får du all data efter varandra i 2 kolumner som du kan räkna på (tyvärr kan man inte använda VSTACK direkt i t.ex ANTAL.OM som inte stödjer 3:D formler)

    Data du vill slå ihop kan naturligtvis finnas på samma blad också.  Typ:
    =VSTACK(A1:A6;C1:C6;E4:E6)

    Det finns en motsvarighet för horisontella data som heter Hstack()

    Om man har data i en matris kanske man vill ha indata i en enda kolumn då kan man köra:

    =TILLKOL(A1:E6)  som lägger hela matrisen som en kolumn (för att få en rad kör du istället TILLRAD)

    Du kan även bestämma om vissa typer av värden skall hoppas över 0=Behåll alla värden (standard), 1=Ignorera tomma värden, 2=Ignorera fel,3=Ignorera tomma värden och fel

    =TILLKOL(A1:E6;1) tar t.ex inte med  tomma celler (annars blir de 0)

    Det här är användbart om man behöver räkna på alla siffror i en tabell  och behöver ha data liggande i samma kolumn

    Man kan även köra motsatsen till TILLKOL

     

    BRYTKOLUMN(matris; bryt efter)

    gör om en kolumn med data till en matris. Exempel där den bryter efter 3 siffror och börjar på nästa kolumn

    image.png.34106cc3e4b50e1cd612e30c72790ef1.png

     

     

    Det finns även nya formler för att hämt ut bestämda kolumner/rader ur en matris:

    TA()  väljer de första/sista rader/kolumner man vill se (+-)

    =TA(A1:E6;2)  ger de två första raderna
    =TA(A1:E6;-2)  ger de två sista raderna
    =TA(A1:E6;;-3   ger de tre sista Kolumnerna)

    Och motsatsen är UTESLUT

    Eller välj ut precis vilka kolumner du behöver, och i vilken ordning, med Väljkol. Det här ger t.ex kolumn 3, 1, 5

    =VÄLJKOL(A1:E6;3;1;5)

     

     

     

     

    • Like 3
  7. 46 minuter sedan, Mikael63 sade:

    (en förklaring varför det krävs så många sådana snuffar önskas)

    Eftersom " är en textavgränsare (som inte skall synas) så blir det väldigt knepigt att få in ett synligt " i en textsträng.

    I en del program skiljer på " och '.  Fast inte...   i t.ex SPSS skulle:

    MinText & """)"
    Blir 
    'MinText' & '")'
    Med reservation för att jag inte minns om man använder & i SPSS-skript. 

    I excel skriver man in två "" inom citattecknen för att få ut ett synligt ". 
    Typ " "" "
    men sammanskrivet """""

    Och om det står i ena änden av strängen blir det 3 st ", typ:  """ xxx"

    =SAMMANFOGA("Här skall det synas ett: ";"""-tecken")

    Ett ensamt "-tecken blir det  4 """" på rad (läs som " "" ")

    =SAMMANFOGA("Här skall det synas ett: ";"""";"-tecken")
    eller om det är en enda textsträng

    =SAMMANFOGA("Här skall det synas ett: ""-tecken")

    Typ samma sak i VBA. 

    Det där är lite extra förvirrande eftersom "" normalt sett betyder tom sträng/tomt värde. Men mellan två Citattecken betyder det uppenbarligen ett citattecken ...

    • Thanks 1
  8. I cell K2 kan du peta in den här formeln

    =SUMMA.OM(B$2:B$11;$J2;$A$2:$A$11)

    Kopiera hela vägen till o4 (eller fyll med "handtaget")

    Den summerar helt enkelt rumsnumret (A-kolumnen)för de rum pelle använder på en måndag. När du byter rad så letar den efter Jessicas namn istället och när du byter kolumn tittar den i en annan dag. Om pelle förekommer mer än en gång i måndagskolumnen så blir det naturligtvis fel

    Om du vill ha hjälp att skapa namnlistan kan du peta in den här i J2

    =UNIK(TILLKOL(B2:F4))

    Obs! kräver en ganska ny excel.

     

    Om du inte gillar SUMMA.OM så kan du testa den här istället. Då får du ett felmeddelande om Pelle förekommer 2 ggr på samma dag.

    I cell K2:

    =PASSA($J2;B$2:B$11;0)

     

  9. "Vanliga" bandbackupper lever ju kvar i special-lösningar (om man kör på rätt sätt är de t.ex immuna mott gisslan-program). Banden har väl dödförklarats ett antal gånger redan under det förra årtusendet. 

    Å andra sidan har väl optiska media, disketter och zip-drives i princip förpassats till Historiens skräphög.

    Men jag skulle tro att den mekaniska HD:n kommer att leva vidare på samma sätt som Banden. Jag kan lätt se att storkonsumenter i stil med "elektronikfreak" har ett antal olika lagringstekniker för att hantera data med olika pris, åtkomstkrav och känslighet även i framtiden.

  10. Din bild är försvunnen. Men om jag minns det lilla jag så igår så du testa någonting i den här stilen. 

    Jag antar att tabell2 ligger i A-kolumnen på blad2 och Tabell 1 ligger på blad1

    Formelförslag till blad1, cell C2

    1). kolla om namnet i cell A2 finns i kolumn A, blad2

    =ANTAL.OM(Blad2!A:A;Blad1!A2)
    eller 
    =PASSA(A2;Blad2!A:A;0)

    2.  gör om till ett villkor. Tex så här

    =(ANTAL.OM(Blad2!A:A;Blad1!A2)=0)
    =ärfel(PASSA(A2;Blad2!A:A;0))

    3. Peta in i en OM-sats.

    OM(namnet saknas;hämta siffran i B2; annars skriv ingenting"")

    =OM(ÄRFEL(PASSA(A2;Blad2!A:A;0));B2;"")
    eller
    =OM(ANTAL.OM(Blad2!A:A;A2)=0;B2;"")

  11. Det enklaste är väl bara att ta bort 5 tecken på slutet. Om du är osäker (om det t.ex finns filer i gamla . xls format) så kan du istället hitta den sista punkten (med InStrRev)och ta bort allt till höger om den.

    Sub qwwerty()
    Dim sSökväg As String
    Dim sFilnamn As String

    sSökväg = ActiveWorkbook.Path
    sSökväg = sSökväg & "\"

    sFilnamn = ActiveWorkbook.Name
    sFilnamn = Left(sFilnamn, InStrRev(sFilnamn, ".") - 1)

    sSökväg = sSökväg & sFilnamn & ".pdf"
    End Sub
     

    Där jag antar att den sista .PDF kan tas bort

    • Thanks 1
  12. ActiveWorkbook, thisWorkbook och Me betyder lite olika saker

    MsgBox "boken du jobbar med finns i mappen: " & ActiveWorkbook.Path
    MsgBox "makrot ligger i mappen: " & ThisWorkbook.Path

    Vill du ha sökvägen till excelfilen som du kopierar området ifrån? Om den är sparad borde det här funka:

    Sub test()
    Dim sSökväg As String
    sSökväg = ActiveWorkbook.Path
    'lägga på filnamnet
    sSökväg = sSökväg & "\" &ActiveWorkbook.Name
    End Sub
    

    Om du startar makrot från ett formulär tror jag att du kan använda 

    ME.xxxx

    också.  Men "ME." är ganska flummigt. Jag är nästan säker på att Monshi låste en tråd om det där på Eforum
     

    • Thanks 1
  13. Med den här metoden går det inte. Eftersom..

    "!$D$5:$D$40"

    ..är en textsträng så finns det ingen som helst koppling till det som händer på databladen

    Om du inte har mer info på bladet (nedanför D40)så är det enklaste att helt enkelt låta formeln peka på ett större område, typ "!$D$5:$D$4000" och hoppas att du aldrig får mer än 3995 rader...

    eller ta hela Kolumnerna (eftersom det måste stå "ABC" i villkorskolumnen så är ju risken för att du tar med rader som inte skall vare med väldigt lite)

    Dvs motsvarigheten till

    =SUMMA.OMF(jan!$D:$D;jan!$C:$C;"ABC")

    Det blir något i stil med:

    =SUMMA.OMF(INDIREKT(C$1&"!$D:$D");INDIREKT(C$1&"!$C:$C");"ABC")

    Normalt sett brukar man undvika att ha för stora områden i formler. Men excel har blivit väldigt bra på att begränsa området själv så det borde inte bli "segt".

    Om du inte kan använda ett stort område så måste du köra mycket krångligare varianter (om det överhuvudtaget går) för att få det dynamiskt. Testa om Helkolumn, eller för många rader, funkar för dig innan vi krånglar till det i onödan.

    • Thanks 1
  14. Den här delen skulle ha fortsatt att peka på A1. 
    TEXT(EDATUM(1;KOLUMN(A1)-1)
    Det var bara ett sätt att skapa texten jan, feb osv. När du började från C1 så borde du ha fått resultaten för mars.

    Men, eftersom du redan har månaderna (fliknamnen) i C1:N1 så är det enklare att använda det istället. 

    =SUMMA.OMF(INDIREKT(C1&"!$D$5:$D$40");INDIREKT(C1&"!$C$5:$C$40");"ABC")

    Om din formel:

    =SUMMA.OMF(Jan!$D$5:$D$40;Jan!$C$5:$C$40;"ABC")

    Funkar så bör även den jag skrev fungera.

    Testa de olika delarna. Ger det här en text som ser ut som adressen till flik "Jan", dvs: Jan!$D$5:$D$40  ?

    =C1&"!$D$5:$D$40"

     

    Och, om du har en modern excel, ger det här 35 rader med data från januarifliken?

    =INDIREKT(C1&"!$D$5:$D$40")

    Om du har en gammal excel måste du eventuellt mata in det som matrisformel (CTRL+SKIFT+RETUR när du står i cellen med formeln).

    Ähh, testa och återkom om det inte funkar.

     

  15. Och vi som har något slags ekonom-utbildning (och får skämta om sånt) brukar säga att det finns tre sorters Ekonomer. De som kan räkna och de som inte kan räkna. 

    • Like 2
    • Haha 1
  16. Som du redan upptäckt så verkar inte Ctrl + Shift + V stödjas av  (modern?) excel. 

    Men du kan testa:

    [Ctrl]+[Alt]+V, V  [enter]

    [Ctrl]+[Alt] ger Klistra in special fönstret och +V väljer "värde"

    Men det är inte riktigt konsekvent när du kopierar saker utanför excel

     

    Annars kan du testa det kortare

    [Menyknappen] +V (Menyknappen = "högerklicksknappen" mellan Alt Gr och det högra Ctrl på ett "stort" tangenbord). Men det är ju samma sak som att högerklicka och det funkade ju inte alltid för dig. 

     

     

  17. Jag använder det som sagt var inte själv och jag har bara ett konto i Outlook så jag har inga fler förslag. Eller, kolla punkt 4 i "lösningssvaret" i den här tråden

    https://answers.microsoft.com/en-us/outlook_com/forum/all/how-to-change-the-senders-email-address-in-mail/86110d33-3330-45b3-a7d4-dc9a5cf2e528

    "4. Then go to File/Options and under the Mail Category/Send Options make sure that the "Always Use the Default Email to Send Messages" is checked off."

    • Thanks 1
×
×
  • Skapa nytt...