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 !