Jump to content

MH_

Medlem
  • Posts

    186
  • Joined

  • Days Won

    20

Ytterligare profilinformation

  • Från
    stötande

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

MH_'s Achievements

  1. 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
  2. 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.
  3. 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...
  4. 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.
  5. 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)
  6. ****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
  7. 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
  8. 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.
  9. 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.
  10. 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.
  11. 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?
  12. Blir det överhuvudtaget något markerat när du går till: Ctrl+G+[special...]->objekt->[Ok] Eller får du meddelandet "Hittar inga objekt"? ******************************************************** Om det skapas objekt ur "tomma intet" så måste det nästan ligga händelseaktiverad kod. Vad ser du om du: Högerklickar på fliknamnet (längs ner på fliken) och begär "visa kod" Är det ett helt tomt kodfönster eller ligger det kod däri? ********************************************************
  13. Fritt ur minnet. Snabbkommandot för "gå till" Ctrl+g eller [F5] Någon "merknapp" - > objekt. Då markeras alla objekt>delete
  14. Kolla Youtuben från 8:08 ungefär https://youtu.be/OS7BPjTy3H0?t=487 I VBA-editorn Verktyg->referenser Bläddra ner till, och välj, MicrosoftVBscriptRegularexp... Sen kan du använda regexp för att se om cellen passar mönstret. Tyvärr blir jag inte klok på hur du bygger delar som i word om du skulle vilja köra replace. Men du kan använda vanliga vänster/extext och helt enkelt byta ut det 24:e tecknet mot en radbrytning (chr(10) - jag kommer inte ihåg om en radbrytning har koden 10 eller 13, testa) Sub MönsterMatch() ' hämtar regexp till ett eget objekt regex (eller vad det heter, se Youtuben) Dim regEx As New regexp regEx.Global = True Dim rCell As Range ' Sökmönstret = radstart (^), 23 tecken, mellanslag, 13 tecken, radslut ($) ' i engelsk regexp så avänds "." istället för "?" för att ange "vilket tecken som helst" regEx.Pattern = "^.{23} .{13}$" ' gå igenom alla celler i det markerade området For Each rCell In Selection.Cells ' OM cellen passar mönstret så hämtar du de vänstraste 23 tecknen, skriver en radbrytning och hämtar tecken 25+13 If regEx.Test(rCell.Value) = True Then sOld = rCell.Value rCell.Value = Left(sOld, 23) & Chr(10) & Mid(sOld, 25, 13) End If Next rCell End Sub Du får anpassa mönstret 23 mellanslag 13 så att det passar det du faktiskt har. Om du vet att det alltids skall starta/sluta på samma sätt så kan du göra sökningen säkrare gemom att ändra söksträngen.
  15. 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)
×
×
  • Create New...