Avatar billede tobler Nybegynder
04. februar 2004 - 09:49 Der er 20 kommentarer og
3 løsninger

Funktion til cellereferencen på sidste aktive celle i kollonne

Jeg har brug for en funktion, der giver mig cellereferencen til den sidste aktive/udfyldte celle i en kollonne.

Jeg forestiller mig noget lignende dette: =sidstecelle(H) ---> f.eks. H21
04. februar 2004 - 09:57 #1
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)

Har du brug for det på flere kolonner ?
Avatar billede tobler Nybegynder
04. februar 2004 - 10:02 #2
Jeg forestiller mig en macro, som er en funktion.

Det er tænkt til den enkelte kollonne som er i "parameteren" (H).
04. februar 2004 - 10:03 #3
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
04. februar 2004 - 10:05 #4
Jeg vil blive meget overrasket, hvis der er en, som kan lave en funktion, som giver dig dette.
Avatar billede tobler Nybegynder
04. februar 2004 - 10:14 #5
Man har jo lov til at håbe, det er jo de utroligste ting der kan lade sig gøre, bare man tænker abstrakt.
Avatar billede kabbak Professor
04. februar 2004 - 10:16 #6
vælg en celle i den kolonne, der skal findes den sidste på

Public Function SidsteCell(FørsteCell As Range) As String
SidsteCell = Cells(65536, FørsteCell.Column).End(xlUp).Address
End Function
Avatar billede kabbak Professor
04. februar 2004 - 10:20 #7
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

Kaldes sådan

=SidsteCell(F1)
Avatar billede tobler Nybegynder
04. februar 2004 - 10:26 #8
---> Kabbak, du er tæt på.

Jeg vil godt ha' værdien fra f.eks. C1 i Ark1 til et felt i Ark2
04. februar 2004 - 10:37 #9
Cells(65536, FørsteCell.Column).End(xlUp). >> giver den nederste celle i kolonnen - det er jo ikke nødvendigvis den sidst udfyldte celle......!!!
04. februar 2004 - 10:59 #10
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)
Avatar billede bak Forsker
04. februar 2004 - 11:03 #11
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
Avatar billede tobler Nybegynder
04. februar 2004 - 13:44 #12
--- Kabbak, kan din macro ændres til kun at søge sidste celle for den valgte kollonne i det ark den står i?
Avatar billede bak Forsker
04. februar 2004 - 13:58 #13
Min første makrofunktion kan gøre det også hvis du står i et andet ark

=clastInColumn(Ark1!B1)

Måske skal du lige skrive public foran funktionen

Public Function clastInColumn(rLast As Range) As Variant
clastInColumn = rLast.Parent.Cells(65536, rLast.Column).End(xlUp).Value
End Function
04. februar 2004 - 14:04 #14
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.
Avatar billede bak Forsker
04. februar 2004 - 14:11 #15
Nope... :-)
Min funktion virker uanset hvilket ark du står i og uanset hvilket ark du peger på.
Avatar billede bak Forsker
04. februar 2004 - 14:12 #16
Det gør de forøvrigt begge mine funktioner..
04. februar 2004 - 14:17 #17
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
Avatar billede tobler Nybegynder
04. februar 2004 - 14:17 #18
---> 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))
04. februar 2004 - 14:19 #19
udskift .Value med .Address så får du cellereferencen
Avatar billede tobler Nybegynder
04. februar 2004 - 14:26 #20
Sådan, nu virker det. Nu skal jeg bare lige ryde op i de mange forskellige funktioner jeg har testet med.

---> Bak, smider du lige et svar, så jeg fordele points mellem dig og Flemming.
Avatar billede bak Forsker
04. februar 2004 - 14:34 #21
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
Avatar billede tobler Nybegynder
04. februar 2004 - 15:04 #22
Jeg vil også i en fredelig stund sætte mig ned, og se om jeg kan gennemskue Flemmings løsning, den er ihvertilfald avanceret.
Avatar billede tobler Nybegynder
04. februar 2004 - 15:07 #23
Tak for hjælpen til alle, jeg vil fortsætte med finpudsningen af mine ark.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester