Gå till innehåll

MH_

Medlem
  • Innehållsantal

    178
  • Gick med

  • Dagar vunna

    20

Community-svar

  1. MH_'s post in Irriterande "kryss" i Excel was marked as the answer   
    jag testade ditt dokument och det funkar att markera alla dokument om du gör det via Ctrl+G
    Ctrl+G+[special...]

    objekt->[Ok]

    Då blir alla dina dolda rutor markerade och du kan trycka [Del] eller [Backspace] eller högerklicka och välj "klipp ut"
    Har ingen aning om hur de skapades.  Är det en mall du fått av någon? Autoshapes känns gammalmodigt. Kan det vara något som har skapats när du försökt spara  ett dokument i kompabilitetsläge?
  2. MH_'s post in Automatjustera alla kolumner was marked as the answer   
    Men markera alla kolumner med tgb då?
    Ctrl+A? 
    i värsta fall 2 ggr om den bara markerar aktuellt område (nytt hyss i excel, men på det stora hela smart)
     
  3. MH_'s post in Excel - Medelvärde för värden i en och samma cell was marked as the answer   
    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)
     
  4. MH_'s post in Makro för att spara som .xlsx .docx was marked as the answer   
    Tag bort alla mellanslag i replace. Och lägg till punkt. Annars lär den missa de flesta.
    Replace(strFile, ".doc", ".docx")
  5. MH_'s post in Felmeddelande #OGILTIGT! vid uträkning av år och månader was marked as the answer   
    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")
  6. MH_'s post in Sortera data i tabell utifrån kryssrutor was marked as the answer   
    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.
  7. MH_'s post in Flytta information i Excel beroende på villkor was marked as the answer   
    Dela upp det i två delar och hämta kolumn A respektive kolumn D separat.
    I fördjupning, A2 skriver du något i stil med:
    =FILTER(Grund!A:A;(Grund!B:B="kritisk")*(Grund!D:D="kritisk"))
    Och i fördjupning, D2 skriver du något i stil med:
    =FILTER(Grund!C:C;(Grund!B:B="kritisk")*(Grund!D:D="kritisk"))
  8. MH_'s post in Tree - syntax? was marked as the answer   
    Om du kan kosta på dig två rader så kan du byta teckentabell för i kommandotolken (inkl. din "pipade" output). Då borde ÅÄÖ bli som du vill.
     
    CHCP 65001 dir *.pdf /s /b > "filelist.txt"  
    Changes code page
    https://learn.microsoft.com/sv-se/windows-server/administration/windows-commands/chcp
    Och här hittar du koden till UTF-8 (65001)
    https://learn.microsoft.com/sv-se/windows/win32/intl/code-page-identifiers
  9. MH_'s post in Formel för att hämta värde i databas was marked as the answer   
    Kolla in summa.om()
    https://support.microsoft.com/sv-se/office/funktionen-summa-om-169b8c99-c05c-4483-a712-1697a653039b
    Exempel, letar i kolumn A och summerar kolumn H när villkoret är uppfyllt
    =SUMMA.OM(A:A;"IV_96GG2";H:H)
    Eller så här om du vill skriva in villkoret i cell K1
    =SUMMA.OM(A:A;K1;H:H)
    då kan du lägga en rullgardin/val -lista i K1
    https://support.microsoft.com/sv-se/office/video-skapa-och-hantera-listrutor-28db87b6-725f-49d7-9b29-ab4bc56cefc2
     
    Om du har flera tabeller så kan du ha en formel för varje tabell och lägga ihop värdet:
    =SUMMA.OM(A2:A9;K1;H2:H9)+SUMMA.OM(A12:A30;K1;H12:H30)
     
     
  10. MH_'s post in Genväg till Sidfot Excel was marked as the answer   
    [Alt], p, q, s, [Alt], d/t
    Du får alltså börja om med ALT när du har fått fram sidhuvud/sidfot
  11. MH_'s post in Batch find and replace Excel was marked as the answer   
    i rimlighetens namn är det väl bara att lägga in något precis innan "end sub"? Då borde den ha loopat alla filer
    Next i  msgbox "Fääääääärdig" End Sub
  12. MH_'s post in Excel! Skapa en lista + diagram med timmar och min was marked as the answer   
    För att visa tid över 24 timmar så kan du ändra visningsformatet (Ctrl+1)

    Gå till Anpassat för att ta bort sekunder om du vill. Det är hakparanteserna runt [t] som gör att du kan visa mer än 24 timmar. Så här blir den enklaste koden för timmar och minuter:
    [t]:mm
    För att visa negativa tider måste du använda Macintosh datumsystem i dokumentet
    Arkiv>alternativ>avancerat>använd Macintosh datumsystem (långt ner)
    Men excels "Macintosh datumsystem" utgår ifrån 1904 istället för 1900 så datum blir 4 år och en dag fel om du kopierar mellan dokument med olika datumsystem.
     
  13. MH_'s post in Överföra data mellan två tabeller was marked as the answer   
    Det går:
    =LETAKOLUMN(A9;$E$3:$H$4;2;FALSKT)
    eller så här om du vill slippa se "#SAKNAS!" innan du fyllt i värde i A
    =OMFEL(LETAKOLUMN(A9;$E$3:$H$4;2;FALSKT);"")
    Och om du har en nyare Excel finns det en funktion med "allt i ett":
    =XLETAUPP(A9;$E$3:$H$3;$E$4:$H$4;"")
     
  14. MH_'s post in Formel eller metod för att beräkna fysisk textlängd Excel? was marked as the answer   
    Spontant, nej, inte med excelfunktioner - Om du inte använder ett skrivmaskinstypsnitt med fast teckenbredd.
    VBA/javaskript(automat) - kanske. Om du skickar texten till en textruta med inställningen "anpassa storlek efter text" så borde du kunna avläsa storlek. Eller någon annan metod där du helt enkelt skapar din formaterade text och mäter bredden.
     
  15. MH_'s post in Makro för att radera specifikt definierat namn, med villkor, i flera filer samtidigt. was marked as the answer   
    Om man snor din gamla kod som ni använde tidigare. Ttroligtvis baserad på det här: 
    https://exceloffthegrid.com/vba-code-loop-files-folder-sub-folders/

    Så borde något i den här stilen funka.
     
    Option Explicit Sub start() Dim startmapp As String Dim folder As String folder = GetFolder Call LoopAllSubFolders(folder) End Sub Function GetFolder() As String Dim fldr As FileDialog Dim sItem As String Set fldr = Application.FileDialog(msoFileDialogFolderPicker) With fldr .Title = "Select a Folder" .AllowMultiSelect = False .InitialFileName = Application.DefaultFilePath If .Show <> -1 Then GoTo NextCode sItem = .SelectedItems(1) End With NextCode: GetFolder = sItem Set fldr = Nothing End Function Sub LoopAllSubFolders(ByVal folderPath As String) Dim fileName As String Dim fullFilePath As String Dim numFolders As Long Dim folders() As String Dim i As Long If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\" fileName = Dir(folderPath & "*.*", vbDirectory) While Len(fileName) <> 0 If Left(fileName, 1) <> "." Then fullFilePath = folderPath & fileName If (GetAttr(fullFilePath) And vbDirectory) = vbDirectory Then ReDim Preserve folders(0 To numFolders) As String folders(numFolders) = fullFilePath numFolders = numFolders + 1 ElseIf (InStr(1, fileName, ".xl") > 0) Then Call tjoflöjt(folderPath & fileName, fileName) End If End If fileName = Dir() Wend For i = 0 To numFolders - 1 LoopAllSubFolders folders(i) Next i End Sub Sub tjoflöjt(sökväg, filnamn) Dim WS As Worksheet Dim namn As Name Dim adress As String 'Öppna filen Workbooks.Open sökväg For Each WS In ActiveWorkbook.Worksheets For Each namn In WS.Names If ((InStr(namn.Name, "Print_Area") > 0) Or (InStr(namn.Name, "Print_Titles") > 0)) Then adress = namn.RefersTo If (InStr(namn.Name, "Print_Area") > 0) Then namn.Delete WS.PageSetup.PrintArea = adress ElseIf (InStr(namn.Name, "Print_Titles") > 0) Then namn.Delete WS.PageSetup.PrintTitleRows = adress End If End If Next namn Next WS 'Spara och stäng (den vill inte ha sökvägen då) Workbooks(filnamn).Close SaveChanges:=True End Sub  
    OBS Jag har bara testat med testat med att låta "tjoflöjt" öppna/stänga filerna och visa filnamnen. 
    Sub tjoflöjt(sökväg, filnamn)     Workbooks.Open sökväg     MsgBox sökväg     Workbooks(filnamn).Close SaveChanges:=True End Sub Men det borde funka ändå
  16. MH_'s post in Power Query - Append 2 Tables was marked as the answer   
    Tidsåtgången är obegriplig. Kan inte hjälpa där. Läser du in tabell2 ordentligt innan du börjar joina?
     
    Om du kollar länken
    https://learn.microsoft.com/sv-se/powerquery-m/table-distinct
    så hänvisar de till buffring som en lösning på vissa problem:
    https://learn.microsoft.com/sv-se/powerquery-m/table-buffer
    Men reservationen är talande
    "om du använder den här funktionen kan det hända att dina frågor körs snabbare eller inte"
    Men det kanske är värt att leka med i alla fall?
     
    "Jag kan inte ta bort dubletter på kolumnen ordernummer heller"
    Men om du rensar dubbletterna på alla kolumner borde det blir rätt. Eller?
    dvs att du kör något i stil med
    Table.Distinct(#"Tillagd fråga")
    istället för 
    Table.Distinct(#"Tillagd fråga", {"Ordernummer"})
    Eller att du i alla fall lägger på både datum och produkt som filterkolumner
     
     
    Testa att köra med formler istället?
    Det här ger en rå sammanslagning av tabell1 och datadelen av tabell2
    =VSTACK(Tabell1[#Alla];Tabell2)
    Ta bort dubbletter (utan att ange någon kolumn= alla kolumner jämförs)
    =UNIK(VSTACK(Tabell1[#Alla];Tabell2))
    Eller så här om du bara vill ha ut data från tabell2 som är inlagt efter den sist inlagda i tabell1 (datum, ännu bättre om du har med tid. annars måste du vänta tills en dag är "färdig")
    =VSTACK(Tabell1[#Alla];FILTER(Tabell2;Tabell2[Datum]>MAX(Tabell1[Datum])))
    Problemet är naturligtvis att det sammanslagna hamnar i en ny tabell. Tabell1 är oförändrad. Så du måste en gång om dagen (ish) manuellt/script hämta hela den sammanslagna tabellen till tabell1 så att den innehåller allt gammalt innan du lägger på nya data.
     
    Annat:
    Jag är tyvärr inte inläst på "power automat" (menyn Automat i Din excel). Men jag tror att det finns färdiga funktioner för att göra precis det du vill. Eftersom "automat" inte har samma säkerhetsbegränsnngar som VBA så borde vem som helst få köra  det i din organisation.
    Kolla om det finns något här- jag är som sagt var inte inläst och kan inte riktigt bedöma:
    https://learn.microsoft.com/en-us/office/dev/scripts/resources/samples/combine-worksheets-into-single-workbook
    I exemplet handlar det nog (?) om att skapa ett automatiskt flöde i en onedrive -mapp ("automat" kan ställas in så att det körs automatiskt så fort något läggs till i en mapp, t.ex din rapport). Men även om dina filer ligger utanför onedrive så borde du kunna skapa en knapp så att du kan starta jobbet manuellt.
     
    DAX 
    distinct (union(bla bla, bla bla))
  17. MH_'s post in Blad i Excel was marked as the answer   
    https://support.microsoft.com/sv-se/office/specifikationer-och-begränsningar-i-excel-1672b34d-7043-467e-8e27-269d656771c3#ID0EDBD=Office_2007
    Blad i en arbetsbok: Begränsas av tillgängligt minne
     
    ************************
    för att skapa bladen "automatiskt" kan du köra ett VBA-makro. Typ:
    [Alt]+[F11] för att öppna VBA editorn
    infoga->modul
    Klistra in något i den här stilen:
    Sub veckoblad() Dim i As Integer     For i = 1 To 52         Sheets.Add After:=ActiveSheet         Sheets(i).Name = "V" & i     Next i End Sub kör koden [F5]
    Sen kan du radera modulen innan du stänger VBA-editorn
  18. MH_'s post in Skapa formulär i Word med kantlinjer was marked as the answer   
    Frågeställaren avslutade frågan på ett annat forum. Om någon har samma problem kan det eventuellt ge en ledtråd:
    https://answers.microsoft.com/sv-se/msoffice/forum/all/hur-skapa-synliga-kantlinjer-och-låsta/de67a0eb-122c-4a80-b784-99834d35302d
  19. MH_'s post in Behöver hjälp att modifiera ett makro was marked as the answer   
    Min länk gick ju inte till excel VBA utan någon gammal visual basic. Wooops!🙈
     
    Kollar du excels riktiga dokumentation här:
    OpenTextFile method (Visual Basic for Applications) | Microsoft Learn
    Så är det helt andra värden för konstanterna och parametrarna skall in i en annan ordning
    '... MinText = MinText & """)" Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs As Object, f As Variant Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile(Filename:="C:\temp\filldown.ahk", iomode:=ForAppending, Create:=True, Format:=TristateTrue) f.Write MinText f.Close End sub eller så här om du vill ha det kompaktare (men svårbegripligare)
    '... MinText = MinText & """)" Dim fs As Object, f As Variant Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("C:\temp\filldown.ahk", 8, True, -1) f.Write MinText f.Close End Sub  
  20. MH_'s post in inventarielista i Excel was marked as the answer   
    Ingen exakt lösning. Men lite byggstenar. Antag att inköpsdatum står i cell A1:
    2016-02-14 (ett högerställt, "riktigt" datum)
    Då kan du kan använda formeln IDAG() för att få dagens datum och räkna ut diffen i en anna cell. Exempel (dagar sedan inköp):
    =IDAG()-A1
    Eftersom du använder IDAG() och länkar till ett datum så kan excel försöka visa resultatet som ett datum (1907-någonting). markera cellen och tryck Ctrl+noll (0) eller högerklicka och  välj "formatera celler", tal eller allmänt.
    Det här kan du använda för att kolla om det gått 7 år
    =OM((IDAG()-A1)>365*7;"RÖD";"")
    Istället för 365*7 så kan du använda EDATUM() som räknar månader (och tar hänsyn till skottår osv) 
    =om(IDAG()>EDATUM(A1;12*7);"RÖD";"")
    Ok. Nu ville du inte ha texten "röd" utan färgen röd
    Markera cell A1
    START->Villkorsstyrd formatering->ny regel->bestäm vilka...använda en formel
    skriv in formeln
    =IDAG()>EDATUM(A1;12*7)

    och tryck på knappen [Formatera..], fliken fyllning och ange den färg du vill ha
     
    När du fått den tekniska livslängden att fungera så kan du lägga till flera villkor om du vill. Gå till:
    START->Villkorsstyrd formatering->Hantera regler så kan du duplicera regeln du skapade och gå in och ändra villkor/färg.
    Du kan stapla en massa villkor. Exempel som kollar om dagens datum ligger mellan 2 år och 2år+1 månad
    =OCH(IDAG()>=EDATUM(A1;12*2);IDAG()<=EDATUM(A1;12*2+1))

    OSV.
    Det här är lite "kinkigt" avseende vilken ordning villkoren ligger och beroende på om du kryssat i "avbryt om sant".
    Du får testa och leka dig fram.
  21. MH_'s post in Kopiera formel utan att förändra den (dess platsvärden) vid beräkning av värden från annan flik was marked as the answer   
    Tror att det absolut enklaste är att klistra in och sedan köra sök/ersätt (Ctrl+H)
    Sök: [Ursprungligt_Exelark.xlsx]
    Ersätt med: (tomt, ingenting)
     
    Om det bara är någon enstaka cell så kan du kopiera från formelfältet. Dvs kopiera formeln som text.
    Alternativt kopiera från cellen i redigeringsläge ("snabb"-kommando F2, Ctrl+A, Ctrl+C, Esc)
     
  22. MH_'s post in Radnummer i Excel was marked as the answer   
    **ED**
    Sidlayout->Alternativ->rubriker: skriv ut
    **/ED**

    ***ED2***
    Vill du bara ha radnumren utan kolumnrubrikerna så kan du a bort krysset för rubriker och lägga till den här formeln i A kolumnen istället:
    RAD()
    Om dina utskrifter är bredare än en sida så får du gå till
    Sidlayout->utskriftsformat ->skriv ut rubriker   (ja, det är förvirrande med två olika saker som heter nästan samma sak ([Alt], p, i1))
    Där väljer du fliken "blad" och "kolumner till vänster". Sen markerar du kolumn A. Då kommer den alltid att synas.
    ***/ED2***
  23. MH_'s post in Excel - dataverifiering i flera nivåer was marked as the answer   
    Namnge listan I blad3 till "gu"  
    Och namnge listan i blad 4 till "Fo"
     

     
    i Blad1, A1 så skapar du en lista på vanligt sätt  (data->dataverifiering: Lista) där du läger in Fo och Gu i listan.
    i Blad1, B1 så skapar du ett villkor på vanligt sätt  (data->dataverifiering:Lista). Men du lägger in formeln
    =INDIREKT($A$1)

    i cellen A1 kommer att kunna välja namnet på ett namngivet område (Gu eller Fo).
    I dataverifieringen för B2 berättar Indirekt() för excel att värdet som hämtas från A1 är en adress (namngivet område).
     
    *********************
    Ähhh, testa.
    Du kan börja med att peta in
    =INDIREKT($A$1)
    i en cell och se vad som händer när du ändrar värdet i A1
     
  24. MH_'s post in VB - Att med hjälp av initial generera signatur + dagens datum infört i cell was marked as the answer   
    När man skriver in någonting i cellen man står i, t.ex 
    Target.Value = "EJ"
    Så är det ju en "change" som inträffar och då skall ju Change_makrot köras igen, vilket kan göra en ändring som triggar igång en förändring som startar makrot som trigga....
    Det här borde lösas med hjälp av: 
    Application.EnableEvents = False
    Men eftersom jag är paranoid pga erfarenhet (Tangenten [Break] är ett viktig instrument när du skall stoppa ett makro som löpt amok... (eller var det Ctrl+break, hmmm?))
    så vill jag gärna ha både hängsle, livrem och kontorsklister för att vara säker på att byxorna sitter kvar
    If Not Len(Target.Value) = 1 Then Exit Sub
    Avbryter om cellen är tom eller om det står något i stil med "EJ 2023-02-22" (dvs om vi hamnat i en loop).
    medan "Target.Offset(1, 0).Select" i ärlighetens namn ökar risken för en loop - Tag bort- jag hade lite otur när jag tänkte...
     
    Och när jag kollar koden igen så inser jag att "EnableEvents = False" skall ligga efter de första "exit-raderna". Annars kommer excel sluta känna av "Change" så for du ändrar en cell utanför området eller skriver något annat än p,j,e i en av cellerna
    Och Case Else behövs inte heller
    Det här blir ju ganska kompakt och trevligt:
    Private Sub Worksheet_Change(ByVal Target As Range) ' avbryt om ändringen skedde utanförd ditt bevaknings-område If Intersect(Target, Range("c4:n50")) Is Nothing Then Exit Sub ' avbryt om mer än en cell är vald If Target.Cells.Count <> 1 Then Exit Sub ' fortsätt bara om det är exakt ett tecken i cellen If Len(Target.Value) <> 1 Then Exit Sub ' du bör inte stänga av "EnableEvents" förrän här eftersom ovanstående rader inte ' gör något som kan uppfattas som en Change och de sätter inte på "event" innan exit Application.EnableEvents = False Select Case LCase(Target.Value) Case "p" Target.Value = "PB " & Date Case "j" Target.Value = "JW " & Date Case "e" Target.Value = "EJ " & Date End Select Application.EnableEvents = True End Sub  
     
  25. MH_'s post in Makro - använda samma sökväg när PDF skapas - Excel 365 för företag was marked as the answer   
    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....
×
×
  • Skapa nytt...