Gå till innehåll

MH_

Medlem
  • Innehållsantal

    191
  • Gick med

  • Dagar vunna

    20

Ytterligare profilinformation

  • Från
    stötande

Senaste besökare till profilen

Blocket med senaste besökare är inaktiverat och visas inte för andra besökare.

MH_'s Achievements

  1. Testa/anpassa makrot. Det borde funka. Å andra sidan borde jag vara miljardär också.
  2. Använder sällan de där funktionerna. Det mest användbara är väl Data->Delsumma Men då skall data ligga på ett ganska strukturerat sätt. Typ: vilket ger något i stil med: ******************************************************************************************** Men dina data är ju inte i närheten av den strukturen så jag begriper inte hur en autodisp skulle lista ut det. Makro? Det är väl din B-kolumn som definierar grupperna. Typ Stå i B2 och tryck dig nedåt med Ctrl+nedpil Sub Makro1() 'ange startpunkten (första "rubriken" i B-kolumnen) Range("B2").Select Do 'välj cellen en rad under rubriken som startpunkt Selection.Offset(1, 0).Select 'Utöka området nedåt (som om du tryckt ctrl+shift+nedpil) 'förskjut området ett steg till vänster (till A-kolumnen) och utöka tre steg åt höger (A3:C7) ' och gruppera Range(Selection, Selection.End(xlDown)).Offset(0, -1).Resize(, 3).Rows.Group 'hitta nästa "rubrik" om den finns (din sista selection var B3 så du utgår därifrån). Samma som ctrl+nedpil två gånger. Selection.End(xlDown).End(xlDown).Select Loop Until Selection.Value = "" 'hoppa tillbaks till toppen av sidan Range("B2").Select End Sub
  3. N() skall stöttas i 2019. https://support.microsoft.com/sv-se/office/funktionen-n-a624cad1-3635-4208-b54a-29733d1278c9 Och om du kör Excljets exempel https://exceljet.net/formulas/leave-a-comment-in-a-formula borde det funka rakt av. Typ: =SUMMA(F5:F8)+N("Q4 numbers are estimates") Obs att det skall vara Citattecken runt din kommentar Men det verkar vara ett extremt Omständligt sätt att kommentera. Och det bygger väl på att N() returnerar värdet 0 när du skriver in en text. Så du måste lägga det någonstans där en 0:a inte spelar någon roll. Dvs det här funkar =A1*75+N("Multiplicera värdet i A1 med 75") Men inte det här: =LETARAD(A1;C1:D5;2)+N("Multiplicera värdet i A1 med 75") Då får du göra något klipp och klistra istället =LETARAD(A1;C1:D5;2)&OMFEL(1/N("En kommentar");"") Men då skulle det första exempel bli en text =A1*75&OMFEL(1/N("Multiplicera värdet i A1 med 75");"") Inte värt besväret om du frågar mig. ********************************************************************************************************************************************** Jag skulle köra Granska->Anteckningar eller Granska->nu kommentar istället. Anteckningar kan bete sig väldigt underligt ibland. Om du tycker att det suger så kan du köra DATA->Dataverifiering->Dataverifiering->Indatamedelande Inte så smidigt. Men då ser du kommentarerna även om du går till cellen med tangentbordet.
  4. "Är det så att B:H är ett omfång snarare än en deklaration av två specifika kolumner" Ja. Det är området du jobbar med. LETARAD() är en äldre funktion. Den söker alltid i den vänstraste kolumnen och returnerar värdet från kolumnnumret du anger (kolumn 2 i området) =LETARAD(B11;'IR 2022 NY'!B:C;2;FALSKT) Vill du t.ex den tredje kolumnen så måste området ha minst tre kolumner, typ: =LETARAD(B11;'IR 2022 NY'!B:E;3;FALSKT) Om du väljer den moderna varianten XLETAUPP så anger du sök och returområderna separat: =OMFEL(OM(XLETAUPP(B11;'IR 2022 NY'!B:B;'IR 2022 NY'!C:C)="JA";"Genomförd";"Ej Genomförd");"Ej inplanerad") Men den funkar inte på äldre excel (ganska mycket äldre nuförtiden) XLETAUPP låter dig dessutom ta hand om "ej inplanerat" direkt: =XLETAUPP(B11;'IR 2022 NY'!B:B;'IR 2022 NY'!C:C;"Ej inplanerad") Men tyvärr blir det svårt att få det att funka ihop med resen av OM-villkoren så formeln blir onödigt lång: =VÄXLA(XLETAUPP(B11;'IR 2022 NY'!B:B;'IR 2022 NY'!C:C;"Ej inplanerad");"Ja";"Genomförd";0;"Ej Genomförd";"Ej inplanerad";"Ej inplanerad") Eller, en marginellt kortare variant: =VÄXLA(XLETAUPP(B11;'IR 2022 NY'!B:B;'IR 2022 NY'!C:C;"X");"Ja";"Genomförd";0;"Ej Genomförd";"X";"Ej inplanerad") Kolla Microsofts hjälpsidor: https://support.microsoft.com/sv-se/office/funktionen-letarad-0bbc8083-26fe-4963-8ab8-93a18ad188a1 https://support.microsoft.com/sv-se/office/funktionen-xletaupp-b7fd680e-6d10-43e6-84f9-88eae8bf5929 https://support.microsoft.com/sv-se/office/växla-funktionen-växla-47ab33c0-28ce-4530-8a45-d532ec4aa25e
  5. Villkor 2 (om ja/tomt). =OM(LETARAD(B11;'IR 2022 NY'!B:C;2;FALSKT)="JA";"Genomförd";"Ej Genomförd") Om letarad() inte hittar något så returneras ett felmeddelande. Det kan du utnyttja för texten till villkor 1 =OMFEL(OM(LETARAD(B11;'IR 2022 NY'!B:C;2;FALSKT)="JA";"Genomförd";"Ej Genomförd");"Ej inplanerad")
  6. Om du vill göra olika saker beroende på svaret från en ekvation (letarad) så kan du testa VÄXLA istället för en massa OM(). Din sista formel borde kunna förenklas till något i stil med: =VÄXLA(LETARAD('IR 2022 NY'!B11;Mätningar!$A$3:$R$29;2;0);"Ja";"Ja";"Nej";"Nej";0;"Här vare tomt") Men om jag fattar det rätt så vill du kolla varje kolumn för sig? Då måste du variera 2:an i LETARAD. T.ex genom att använda KOLUMN() (ger kolumnnummret ) och låsa fast kolumn B i "sök efter" =VÄXLA(LETARAD('IR 2022 NY'!$B11;Mätningar!$A$3:$R$29;KOLUMN(B1);Falskt);"Ja";"Ja";"Nej";"Nej";0;"Här vare tomt") Och, om du råkar skriva ett obefintligt värde i B11 så kan du ta hand om det: =OMFEL(VÄXLA(LETARAD('IR 2022 NY'!$B11;Mätningar!$A$3:$R$29;KOLUMN(B1);Falskt);"Ja";"Ja";"Nej";"Nej";0;"Här vare tomt");"finns inte i databasen") Bör anpassa sig när du kopierar åt höger Ähh, testa. VÄXLA: https://support.microsoft.com/sv-se/office/växla-funktionen-växla-47ab33c0-28ce-4530-8a45-d532ec4aa25e Modernare variant av LETARAD() XLETAUPP(): https://support.microsoft.com/sv-se/office/funktionen-xletaupp-b7fd680e-6d10-43e6-84f9-88eae8bf5929
  7. Jag TROR att området förblir intakt, eller utökas logiskt om man infogar en hel rad (som Shift+mellanslag, Ctrl++) Men så fort man infogar delar av en rad, kör klipp ut/klistra in eller släpar något med musen så fragmenteras det. Tyvärr går det inte att låsa med indirekt() eller ett namngivet område eftersom "villkorsstyrd" (precis som diagram) omvandlar det till ett addres-område som förblir instabilt. Det är väl helt enkelt så det är byggt.
  8. Då får du försöka skapa en regel (med ord) som avgör vad so skall räknas som ett område. I mitt sista exempel (och OveS om jag läser rätt) så antar man att ett nytt område påbörjas när de första tecknen i A-kolumnen skiljer sig från ovanstående. Och det gör de ju om du infogar en tom rad mitt i. Om man vet att de 21 första tecknen aldrig återkommer kan man filtrera bort tomma celler och köra: =ÄRJÄMN(ANTALV(UNIK(FILTER(VÄNSTER($A$3:$A3;21);$A$3:$A3<>"")))) =ÄRudda(ANTALV(UNIK(FILTER(VÄNSTER($A$3:$A3;21);$A$3:$A3<>"")))) Då blir regeln att den byter färg så fort det kommer nya (unika) värden i de 21:a första tecknen i A1. Men om de 21:a första tecknen återkommer i en ny grupp så missar man bytet Eller också fortsätter du att krångla till formeln genom att dra bort antalet tomma rader ovanför två gånger (De ger två falska "byten". Ett när den tomma cellen jämförs med värdet ovan. Och ett när värdet jämförs med med den tomma cellen ovan): =ÄRUDDA(SUMMA((VÄNSTER($A$2:$A2;21)<>VÄNSTER($A$3:$A3;21))*1)-ANTAL.OM($A$3:$A3;"")-ANTAL.OM($A$2:$A2;"")) =ÄRjämn(SUMMA((VÄNSTER($A$2:$A2;21)<>VÄNSTER($A$3:$A3;21))*1)-ANTAL.OM($A$3:$A3;"")-ANTAL.OM($A$2:$A2;"")) Men den kommer å andra sidan att floppa så fort du sätter in en tom rad mellan två områden... Eller så här om du låter varje unik 21-serie få en färg: =ÄRUDDA(PASSA(VÄNSTER($A3;21);UNIK(VÄNSTER(FILTER($A$3:$A$402;$A$3:$A$402<>"");21));0)) Men då har du åter risken för att de unika värdena dyker upp en gång till. Så jag tror faktiskt att det är väldigt svårt att sätta upp en vettig regel. Ett alternativ skulle vara att alltid jämför A-värdet med senast ifyllda rad =TA(VÄNSTER(FILTER($A$2:$A3;$A$2:$A3<>"");21);-1) Men sen blev det jobbigt...
  9. Nja. Min tanke var att du skulle byta ut både ÄRUDDA och ÄRJÄMN. Men jag var inte glasklar. MEN Det är första raden som krånglar till det. Man vill egentligen jämföra med raden ovanför. Men det blir knas om man startar från rad1. Med det ser ju ut som om ditt område startar på rad 3 och då kan du förenkla allt. Se till att cell A3 är aktiv och kör formlerna: ***ED*** Skrev fel trots att jag gjorde rätt i bilden... =ÄRUDDA(SUMMA((VÄNSTER($A$2:$A2;21)<>VÄNSTER($A$3:$A3;21))*1)) respektive =ÄRJÄMN(SUMMA((VÄNSTER($A$2:$A2;21)<>VÄNSTER($A$3:$A3;21))*1)) ***/ED*** Skrev fel trots att jag påpekade saken under bilden... Obs att formeln skall vara skriven som om den skrevs för den översta vänstra cellen i området "gäller för". I din skärmdump börjar formlerna på A1 trots att området börjar i A3.
  10. Bahhh. så mycket för enkla lösningar (om du vill att den skall funka på översta raden): =ÄRUDDA(SUMMA((VÄNSTER($A$1:$A2;4)<>VÄNSTER($A$2:$A3;4))*1)-(VÄNSTER($A2;4)<>VÄNSTER($A3;4))*1)
  11. ****ED*** Kollade inte ditt exempel ordentligt. Samma start-bokstäver kan ju återkomma. Ignorera ***/ED*** En matris av alla vänsterdelar i A-kolumnen (fram till aktuell rad, obs att det inte är något $-tecken före ettan i sista $A1) =VÄNSTER($A$1:$A1;4) Lista bara unika: =UNIK(VÄNSTER($A$1:$A1;4)) Och hur många unika finns det (t.om den här raden): =ANTALV(UNIK(VÄNSTER($A$1:$A1;4))) Och till sist: Är det ett jämt eller udda antal unika? =ÄRUDDA(ANTALV(UNIK(VÄNSTER($A$1:$A2;4)))) =ÄRjämn(ANTALV(UNIK(VÄNSTER($A$1:$A2;4)))) Tyvärr kommer även tomma celler på slutet att markeras. Antingen gör man ett OM() som kollar att A är ifylld =OCH($A1<>"";ÄRUDDA(ANTALV(UNIK(VÄNSTER($A$1:$A1;4))))) Eller lägg ett villkor först i listan som stoppar om A-kolumnen är tom
  12. I kalkylbladet Är datumen ”exceldatum”? Det är svårt att se eftersom du centrerat data. Om du markerar en cell och trycker ctrl+0 för att visa data oformaterat, står det fortfarande ett textdatum eller blir det en lång siffra (som ligger bakom ett datum)? Om du vill ha en axel med "datumavstånd" så måste underliggande data vara i datumformat. Om det är textdatum så kan du testa: skriva in en etta (1) i en cell. Kopiera cellen med etta markera datumkolumnen och gå till "klistra in special" -> multiplicera Formatera kolumnen som datum När du gör diagram från det här datasettet så bör du få fram alternativet att hantera axeln som datum. I nyare Excel gäller det även med vanliga linjediagram. I äldre Excel bara på plotterdiagram
  13. Ja, det var därför jag landade i att skapa villkoret med ett makro. Det verkar omöjligt att få Excel att fatta att man inte vill blanda in bakgrundsfärgen när man har öppnat [formatera] dialogrutan. Makrot kan ju kastas bort när man skapat villkoret.
  14. Typ samma sak hur man än gör. Villkordsstyrd formatering kräver något slags uppdatering. Och för att Slippa "överfärgningen" måste du se till att "ingen färg" INTE är vald i villkoret.
  15. Hej. "Private Sub Worksheet_SelectionChange(...." ligger i boken. Inte i din excel (om du högerklickar på fliken och begär "visa kod" så ser du att den hör till fliken). Jag antar att du hämtar akuell rad via något i stil med: =RAD()=RAD(INDIREKT(CELL("adress"))) Och den triggas ju bara av att du verkligen går in och redigerar något i en cell eller uppdaterar. Det är väl därför de gjorde "Application.Calculate". Så jag tror faktiskt att det är lite kört om du vill behålla Undo (om du inte vill skriva egna hanterare med hjälp av Application.OnUndo/Application.Undo). En variant för att lösa ditt problem är att radera dina villkor och skapa dom med ett makro så att du har kontroll. Typ (inspelat): Sub Makro1() Cells.Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=RAD()=RAD(INDIREKT(CELL(""adress"")))" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Borders(xlTop) .LineStyle = xlContinuous .Color = -16776961 .TintAndShade = 0 .Weight = xlThin End With With Selection.FormatConditions(1).Borders(xlBottom) .LineStyle = xlContinuous .Color = -16776961 .TintAndShade = 0 .Weight = xlThin End With End Sub Som du ser berörs inte "Interior" överhuvudtaget. Men om du hade kört manuellt och gått in i fliken fyllnadsfärg så är risken uppenbar att "Mönster= inget" skulle ingå i villkoret. På VBA'ska något i stil med: With Selection.FormatConditions(1).Interior .Pattern = xlNone .TintAndShade = 0 End With (test att spela in så ser du hur känslig excel är) Om du skall köra en händelsehanterare så kan du även fundera på om du inte skall dumpa aktuellt radvärde någonstans på bladet. typ "A1" och skippa CELL() formeln helt Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.CutCopyMode = False Then Range("A1").Value = Target.Row End If End Sub och låta villkoret du skapar hänvisa dit istället: Sub Makro1() Cells.Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=RAD()=$A$1" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Borders(xlTop) .LineStyle = xlContinuous .Color = -16776961 .TintAndShade = 0 .Weight = xlThin End With With Selection.FormatConditions(1).Borders(xlBottom) .LineStyle = xlContinuous .Color = -16776961 .TintAndShade = 0 .Weight = xlThin End With End Sub Fast någon annan cell än A1 naturligtvis. Det borde gå att skapa en "public funktion" och hänvisa dit. Men vem orkar.
×
×
  • Skapa nytt...