I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Den funktion findes vist ikke... Der kan laves en kode løsning, som skriver i en specifik celle (eller en navngiven) men ikke en funktion, så du kan skrive =SidsteCelle(H)
Her har jeg navngivet en celle i kolonne A, B og i C med navne rLastA, rLastB og rLastC
På kodearket for det specifikke ark har jeg indsat følgende kode:
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Target, Range("A1:A65536")) Is Nothing Then Me.Range("rLastA").Value = Target.Address End If If Not Intersect(Target, Range("B1:B65536")) Is Nothing Then Me.Range("rLastB").Value = Target.Address End If If Not Intersect(Target, Range("C1:C65536")) Is Nothing Then Me.Range("rLastC").Value = Target.Address End If Application.EnableEvents = True End Sub
Nåå, for at den opdaterer ved ny linie, skal den se sådan ud
Public Function SidsteCell(FørsteCell As Range) As String SidsteCell = Cells(65536, FørsteCell.Column).End(xlUp).Address Application.Volatile End Function
Nu har jeg lavet en løsning, som kan gøre det, men det kræver lidt mere end bare en funktion.
I kodemodulet til Ark1 smider du følgende kode:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:M65536")) Is Nothing Then If Not (UCase(Left(Target.Formula, 9)) = "=LASTCELL") Then Select Case Target.Column Case 1 msWS1A = Target.Value Case 2 msWS1B = Target.Value Case 3 msWS1C = Target.Value Case 4 msWS1D = Target.Value Case 5 msWS1E = Target.Value Case 6 msWS1F = Target.Value Case 7 msWS1G = Target.Value Case 8 msWS1H = Target.Value Case 9 msWS1J = Target.Value Case 10 msWS1I = Target.Value Case 11 msWS1K = Target.Value Case 12 msWS1L = Target.Value Case 13 msWS1M = Target.Value End Select
Application.Calculate End If End If End Sub
I et almindeligt kodemodul smider du følgende kode:
Public msWS1A As String Public msWS1B As String Public msWS1C As String Public msWS1D As String Public msWS1E As String Public msWS1F As String Public msWS1G As String Public msWS1H As String Public msWS1I As String Public msWS1J As String Public msWS1K As String Public msWS1L As String Public msWS1M As String
Public Function LastCell(ByVal ColumnLetter As String) As String Application.Volatile Dim sRetVal As String
Select Case UCase(ColumnLetter) Case "A" sRetVal = msWS1A Case "B" sRetVal = msWS1B Case "C" sRetVal = msWS1C Case "D" sRetVal = msWS1D Case "E" sRetVal = msWS1E Case "F" sRetVal = msWS1F Case "G" sRetVal = msWS1G Case "H" sRetVal = msWS1H Case "I" sRetVal = msWS1I Case "J" sRetVal = msWS1J Case "K" sRetVal = msWS1K Case "L" sRetVal = msWS1L Case "M" sRetVal = msWS1M End Select
LastCell = sRetVal End Function
Findes også som en eksempelfil, som kan rekvireres via fd@win-consult.com (HUSK nummeret på spørgsmålet)
Det har jeg da også. Her er to functioner. Den øverste finder den sidste værdi i kolonnen. Den nedeste finder værdi før første tomme celle regnet fra det udgangspunkt (cellen) man har sat ind.
Function clastInColumn(rLast As Range) As Variant clastInColumn = rLast.Parent.Cells(65536, rLast.Column).End(xlUp).Value End Function
Function clastFilled(rLast As Range) As Variant clastFilled = rLast.Parent.Cells(rLast.Row, rLast.Column).End(xlDown).Value End Function
Bak's funktion virker for det ark du står i, hvis du vil have funktionen til at virke for et specifikt ark, så skal du have en funktion pr. ark eller lave en Select Case hvilket ark der skal returneres data fra.
check - jep de gør. Men jeg kan se, at vi slet ikke arbejder imod det samme mål....
Dine funktioner giver den første eller den sidste værdi i kolonnen, hvorimod de eksempler jeg har lavet giver den sidst ændrede celle i kolonnen.... se det er jo slet ikke det samme. Eks. kolonne A med data i række 1-10 så returnerer din f.eks. A10. Men min vil returnere den af de 10 celler der sidst er ændret i.
Jeg kan kan jo have misforstået tobler's ord "cellereferencen til den sidste aktive/udfyldte celle i en kollonne" eller værdien
---> Bak, din funktion gi'r mig værdien, men ikke cellereferencen, som er det jeg søger efter.
Det jeg har gang i, er at jeg har nogle inputdata i ark1, som er forskellige fra måned til måned. I ark2 beregner jeg med arrays hvormeget enkelte sælgere har solgt for, jeg tæller antal fakturaer mellem x og y kr.
Derfor har jeg med en indirect indbygget i min formel, for ikke at skulle skifte referencen til sidste celle hver gang, jeg skal lave en ny månedsrapport. =SUM(IF((FJData!C$2:INDIRECT("FJData!"&I$1)=A$28)*(FJData!H$2:INDIRECT("FJData!"&H$1)<F29);1;0))
Jamen så smider jeg et svar og deler med glæde med flemming :-) Jeg er sikker på at jeg kan bruge hans funktioner til noget andet....... Sæt lige Application.Volatile ind, så funktionen genberegnes hver gang der sker en beregning i arket.
Public Function clastInColumn(rLast As Range) As Variant Application.Volatile clastInColumn = rLast.Parent.Cells(65536, rLast.Column).End(xlUp).Address End Function
Tak for hjælpen til alle, jeg vil fortsætte med finpudsningen af mine ark.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.