PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAResize Range som fungerar dynamiskt?Resize Range som fungerar dynamiskt?
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2024-01-04 13:12
 

Har två cellområden def. som tabeller. I kolumnerna efter tabellerna finns färdiga formler. När jag manuellt drar ut tabellen så att ytterligare en kolumn ingår finns formlerna kvar i det utvidgade tabellområdet samtidigt som grafer över tabellerna uppdateras.

Men eftersom detta ska göras ofta vill jag göra ett mackro. Hur kan jag referera till sista kolumnen i tabellen, så att makrot fungerar även gång 2, 10 och 50?

Ett alternativ är att makrot infoga en kolumn sist i tabellen, men då finns inte formlerna. Finns det en funktion som kan dra över formlerna från fåregående kolumn kanske?

Sub test1()

'

' test1 Makro

'

    ActiveSheet.ListObjects("CVLåg").Resize Range("$A$31:I$51")

    ActiveCell.Select

    ActiveSheet.ListObjects("BiasL").Resize Range("$A$54:I$75")

    ActiveCell.Select

End Sub

Nytt inlägg
 2024-01-04 16:33
 
 Ändrad av Gondi  på 2024-01-04 17:34:00

Hej och välkommen till forumet annbr59!

Det är lite otydligt exakt vad du menar med beskrivningarna samt var tabellerna respektive formlerna återfinns.

Kan du infoga ett par skärmklipp så vi kan se strukturen på din data samt bättre förstå vad det är du vill åstadkomma. Du kan exempelvis infoga ett skärmklipp "före" och ett "efter" det du vill att makrot/koden ska göra åt dig.

Om arket innehåller känslig information kan du ändra den. Det är strukturen, formlerna och ev. befintlig kod du skrivit som är viktiga inte själva innehållet i arbetsbladet.

Får vi lite mer "kött på benen" ska vi nog kunna hjälpa till.

Nytt inlägg
 2024-01-05 06:43
 

Försöker förklara lite tydligare. 

Jag har ett ark med data med flera tabeller

Lägst ned en tabell med "rådata" för i detta fall analysen ALAT  och de kontroller som analyserats på olika analysinstrument. Dessa ska jämföras så vi ser att alla analysinstrument ligger lika i vår region. Tabellen med rådata uppdateras med ny data varje kvartal.

När data för ett nytt kvartal har lagts in i den nedre tabellen, så skriver man in på rad 5 vilket lotnummer som kontrollmaterialet har och benämningen på kvatalet för det lotnumret läggs in på rad 4. På rad 6 räknas medelvärdet för samtliga instrument under aktuellt kvartal ut.

När detta är gjort vill får jag manuellt dra ut tabellen för CV% och %Bias så att den nya kvartalet inkluderad i dessa tabeller. Det är detta som jag vill ha ett makro för.

Som du ser på bilden så ligger det redan formler i kolumnerna efter sista kolumnen för tabelll CV% och %Bias. Fördelen med det är att i rubrikraden där det står 0 ligger hänvisning till cellen för kvartalet, så att rätt kvartal automatiskt skrivs in i rubriken (hittade inget sätt att göra det i själva tabellen som automatiskt skriver in en rubrik som inte stämmer). 

Jag har spelat in ett makro när jag drar ut tabellerna, men makrot blir för ett specifikt tabellområde. Nästa gång som makrot ska köras så slutar inte tabellen på tex G51 utan F51 och inget nytt händer därför med tabellen. Så hur kan jag skriva i makrot för att det ska veta vilken den sista cellen är i tabellen?

Det är en lite uppgift som kan göras manuellt, men då det förutom denna analysen ALAT finns 90 analyser till och varje analys har 2 olika kontrollnivåer så hade det varit till hjälp med ett makro.

Formeln i tabell CV% ska hämta CV% för ett specifikt instrument&lotnummer&kvartal från tabellen med "rådata" längst ned i arket. I cell G32 står =INDEX(RådataL[[%CV]:[%CV]];PASSA(G$4&G$5&$A32;RådataL[[Kvartal]:[Kvartal]]&RådataL[[Lot number]:[Lot number]]&RådataL[[Analyser]:[Analyser]];0))

Formeln i tabell för %Bias ska räkna ut biasen mellan medelvärdet för samtliga instrument medelvärdet för kontrollkörningarna på ett specifikt instrument i G55 står =(G10-G$6)/G$6

Nytt inlägg
 2024-01-05 18:08
 
 Ändrad av Gondi  på 2024-01-05 19:17:41

Hej annbr59,

Tack för en mycket bra och detaljerad beskrivning!

Vi måste fixa så att tabellrubrikerna är länkade till cellområde B4:M4 där du skriver in kvartal. I Excel kan man tyvärr inte ange en formel som en tabellrubrik. För att kringgå detta problem kan vi använda VBA och uppdatera rubrikerna i tabellerna med det du skriver in på rad 4 på arbetsbladet. 

Vad jag har förstått så vill du dynamiskt ändra storlek på tabellerna ”CVLåg” och ”BiasL” så fort du lägger till eller tar bort något kvartal i de orangea fälten längst upp. Vidare så har jag - baserat på din skärmdump - kommit fram till att ni har 19 olika instrument. Hoppas det är rätt uppfattat.

Lösning med hjälp av VBA

Starta VBA-editorn med Alt+F11 och dubbelklicka på arbetsbladet (Blad1 i mitt fall) där du har tabellerna i projektutforskaren på vänster sida.

I procedurfönstret välj ”Worksheet”-objektet till vänster samt ”Change”-eventet från högra dropdown-listan. Då ser det ut så här. Koden som är blåmarkerad i skärmdumpen nedan kan tas bort. Den läggs automatiskt dit av VBA-editorn när man dubbelklickar på ”Worksheet”-objektet första gången.

 
När du raderat ovan kod ska det se ut så här.
 
 
Kopiera efter det nedan kod och klistra in den i VBA-editorn.
 

Private Sub Worksheet_Change(ByVal Target As Range)

 

    If Target.Cells.count > 1 Then GoTo done

 

    If Application.Intersect(Target, ActiveSheet.Range("B4:M4")) Is Nothing Then GoTo done

 

    Dim lcol As Long

    Dim lrow As Long

    Dim lastCol As String

    Dim ws As Worksheet

    Dim tblCV As ListObject

    Dim tblBias As ListObject

   

    Set ws = ActiveSheet

    Set tblCV = ws.ListObjects("CVLåg")

    Set tblBias = ws.ListObjects("BiasL")

   

    With ws

        lcol = .Cells(Target.Row, .Columns.count).End(xlToLeft).Column

        lastCol = Split(.Cells(, lcol).Address, "$")(1)

    End With

   

    With tblCV

        lrow = .DataBodyRange.Rows.Row + .DataBodyRange.Rows.count - 1

        .Resize Range(.HeaderRowRange.Cells(, 1).Address & ":" & lastCol & lrow)

        .HeaderRowRange.Cells(, Target.Column) = Target.Value

    End With

   

    With tblBias

        lrow = .DataBodyRange.Rows.Row + .DataBodyRange.Rows.count - 1

        .Resize Range(.HeaderRowRange.Cells(, 1).Address & ":" & lastCol & lrow)

        .HeaderRowRange.Cells(, Target.Column) = Target.Value

    End With

done:

    Exit Sub

End Sub 

 
När du klistrat in koden ska det se ut så här.
 
 
 
 
Nu kommer makrot ovan köras automatiskt varje gång du ändrar eller tar bort ett kvartal i någon av cellerna i området B4:M4 på arbetsbladet.
 

Exempelvis om jag raderar ”2023 Q2:3” från cell G4 ovan kommer båda tabellerna ”CVLåg” och ”BiasL” automatiskt göras en kolumn mindre enligt nedan.

Och när jag skriver in ”2023 Q2:3” i cell G4 igen justeras tabellernas storlek så att också kolumn G ingår och rubrikerna skrivs in i tabellerna i cell G31 och G54.

Du får återkoppla om det inte fungerar som du tänkt dig.

Lycka till !

Nytt inlägg
 2024-01-07 20:12
 

 Stor tack! Det fungerar prcecis som det var tänkt.

En liten fråga bara. Du har lagt område i koden. 

"Vi måste fixa så att tabellrubrikerna är länkade till cellområde B4:M4 där du skriver in kvartal"

När vi passerat M4 och jag skriver ett kvartal i N4 så kommer funktionen sluta att fungera antar jag? Så jag kan justera i koden och lägga in en kolumn längre bort i arket?

Åter igen stort tack

Nytt inlägg
 2024-01-08 06:55
 
 Ändrad av Gondi  på 2024-01-08 08:04:05

God morgon annbr59,

Ja, det är korrekt uppfattat.

Det är förändringar i kodraden nedan som styr om koden körs eller inte (GoTo done). Så cellområdet B4:M4 kan du ändra efter behov.

If Application.Intersect(Target, ActiveSheet.Range("B4:M4")) Is Nothing Then GoTo done

Rent allmänt bör man dock fundera över om VBA är en ändamålsenlig lösning för dig. VBA har sina fördelar, men också en del nackdelar.

  • Det finns inget stöd för VBA i Excel Online (webbläsare), Excel på surfplatta (Andoid/IOS) eller Excel på mobilen (Andoid/IOS), så där kommer koden inte fungera.
  • Många mejlsystem filtrerar bort e-postbilagor som innehåller VBA eller annan kod så det kan vara svårt att dela dokumentet via mail om det behövs.
  • Som standard tillåter inte Excel att VBA-kod körs. Man måste alltså godkänna och aktivera att makron används för att det ska fungera. Detta måste man förklara för alla som ska arbeta med dokumentet. Dessutom kan företagets policies helt blockera makron och VBA av säkerhetsskäl.
  • VBA är en "gammal" teknologi som kom redan 1993. Microsoft utvecklar inte VBA längre utan utvecklar nya lösningar som t.ex. Office Script som framtida ersättning för VBA. Exempelvis i senaste versionen av Outlook (aka. "New Outlook") finns inget stöd för VBA längre. Därför bör man fundera över om man ska skapa rutiner och processer som är "beroende" av VBA-kunskap och/eller stöd för VBA i MS Office. 

Du kan göra i princip samma sak med Pivottabeller och Pivotdiagram helt baserat på tabellen "Rådata", utan att ens behöva skapa tabellerna "CVLåg" och "BiasL".

Mvh Gondi

Nytt inlägg
 2024-01-08 13:53
 
 Ändrad av annbr59  på 2024-01-08 15:06:34

 Jag har varit inne och försökt leka runt med Pivottabeller, men har inte förstått hur jag ska kunna lösa det. Har du några tips eller vet någon bra webkurs. Jag är ju inte intresserad av ekonomiska beräkningar och tycker att allt verkar handla om det.... Det verkar som det är enkelt att summer på olika sätt, men det är ju inte intressant i detta fallet

Nytt inlägg
 2024-01-09 08:40
 
 Ändrad av Gondi  på 2024-01-09 10:06:10

Hej igen annbr59,

Jag har gjort en liten guide åt dig som du kan följa för att lära dig grunderna i hur man skapar pivotabeller och diagram. Guiden är gjord i Excel 2007 eftersom jag inte vet vilken version av Excel ni använder samt så att de som har äldre versioner av Excel också kan använda den.

Pivottabeller och diagram – ”miniskola” – Del 1 av 4

1 -  välj källdata och sedan infoga pivottabell

2 -  välj destination för tabellen

3 – en tom tabellen är nu på plats

4 – välj fält som ska ingå med musen (dra-och-släpp)

5 – dölj automatiska summeringar (de behövs inte i denna typ av sammanställning)

Det var slutet på del 1 av 4

Nytt inlägg
 2024-01-09 08:45
 

 

Pivottabeller och diagram – ”miniskola” – Del 2 av 4

6 – ändra namnet på värdefältet ”Summa av %CV” till ”Instrument”

7 – ändra visning av CV-värden från decimal- till procentform

8 – skapa beräknat element för kontrollgränsvärdet

9 – ändra design på pivottabellen efter tycke och smak

 
Detta var slutet på del 2 av 4.
Nytt inlägg
 2024-01-09 08:52
 

 

Pivottabeller och diagram – ”miniskola” – Del 3 av 4

10 – skapa pivotdiagram

11 -  alla diagramtyper fungerar inte med pivotdiagram (nedan jag förökte jag med punktdiagram)

12 -  välj linjediagram med brytpunkter

13 – ändra till önskad diagramdesign

14 – filtrera diagrammet på önskat LOT-nummer och kvartal

15 – länka diagramrubrik till cell. Markera rubrikrutan i diagrammet och skriv in länken i formelfältet.

Slut på del 3 av 4.

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAResize Range som fungerar dynamiskt?Resize Range som fungerar dynamiskt?

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter