Avatar billede banazmi Nybegynder
30. juli 2004 - 10:00 Der er 28 kommentarer og
2 løsninger

Læs værdi i en celle inden der kommer en tomme celle i rækken

Hej. Er en der kan hjlæpe mig med denne her opgave.

Jeg har en række består af 31 celler. Jeg indtaster en værdi hverdag i en celler stater fra celle nr. 1.
Så har jeg en anden celle hvor den værdi fra den sidste udfyldt celle i rækken kopiers.
Der er en detalje mere at celler for weekenderne står også tomme.
Avatar billede tobler Nybegynder
30. juli 2004 - 10:53 #1
Prøv med denne funktion:

Public Function clastInColumn(rLast As Range) As Variant
clastInColumn = rLast.Parent.Cells(65536, rLast.Column).End(xlUp).Value
End Function

Hvis du har værdierne i cellerne A1 til A31, kan du i celle B1 indtaste denne formel(funktion): =clastInColumn(A1), så får du værdien fra den sidste celle i kollonne A.

Denne løsning stammer fra spørgsmål: http://www.eksperten.dk/spm/460889 hvor jeg med bak's og flemmingdahl's hjælp fik løst mit problem.
Avatar billede banazmi Nybegynder
30. juli 2004 - 11:17 #2
Mine værdier ligger i fra A1......til AE1. Altså i en række og ikke i en kolon.
værdien fra den højste nr. i rækken som er udfyldte skal være i f.eks. celle B1.

Skal funktion skrives i B1 ???
Avatar billede sjap Praktikant
30. juli 2004 - 12:17 #3
Blot et gæt på hvordan toblers funktion "drejes":

Public Function clastInRow(rLast As Range) As Variant
clastInRow = rLast.Parent.Cells(rLast.Row, 256).End(xlToLeft).Value
End Function
Avatar billede tobler Nybegynder
30. juli 2004 - 13:41 #4
Var lige borte et par timer, men det ser ud til at sjap's drejning virker.
Avatar billede banazmi Nybegynder
30. juli 2004 - 14:54 #5
Jeg er helt bank om brug af funktioner/koder. hvor skal jeg lægge funktionen.??
Avatar billede tobler Nybegynder
30. juli 2004 - 15:02 #6
Du går ind i macroredigering med F11, og opretter et modul, derefter kopierer du nedenstående kode ind og "saver" koden.

Derefter indsætter du denne formel i felt B1: =clastInRow(A1)

Public Function clastInRow(rLast As Range) As Variant
Application.Volatile
clastInRow = rLast.Parent.Cells(rLast.Row, 256).End(xlToLeft).Value
End Function
Avatar billede banazmi Nybegynder
30. juli 2004 - 15:15 #7
Det fungerer. men kan du fortæl hvad de enket del af funktion gøre, så jegkan tilpasse det til det relevente opgave.
Avatar billede banazmi Nybegynder
30. juli 2004 - 15:22 #8
Der er et andet problem. svar cellen ligger også i samme række. jeg har værdier i nr.1 til 31 og i række nr. 32 er svar celle.
Det går galt når jeg skriver "=clastInRow(A1)" i denne celle.
Avatar billede tobler Nybegynder
30. juli 2004 - 15:37 #9
Det er jeg nok ikke så clever til, men lidt input kan jeg da give dig.

=clastInRow(A1) dette er nu lig med en formel(funktion), som er gyldig i det regneark, koden er lagt ind i. A1 betyder at den skal lede i række 1, så hvis det skal være i række 12, angiver du bare A12. Funktionen kan du indsætte hvor du vil, den behøver ikke stå i B1.
Avatar billede tobler Nybegynder
30. juli 2004 - 15:49 #10
Det har jeg så ikke helt styr på, men hvis du erstatter 256 med 32 og placerer =clastInRow(A1) i celle AG1 så virker, men kun hvis AF1 er blank.
Avatar billede sjap Praktikant
30. juli 2004 - 16:13 #11
tobler du har vist talt lidt forkert. Hvis funktionen skal skrives i kolonne nr. 32 er det AF kolonnen.
Hvis du laver toblers rettelse (dvs. ændrer 256 til 32), så virker funktionen - også når den placeres i AF1 og også selvom AE1 ikke er tom.
Avatar billede tobler Nybegynder
30. juli 2004 - 16:21 #12
Det er ikke fordi jeg ikke kan tælle, men ved hjælp test nåede frem til den løsning, andre kombinationer virkede ikke hos mig.
Avatar billede banazmi Nybegynder
03. august 2004 - 11:16 #13
Jeg har prøvet det. Det fungere fint. Nu synes jeg I begge herre har jo bidrag til at jeg kunne løse opgaven. Skal jeg dele pointene.  Er det ok fra jer ?

jeg har en tillægges spørgsmål. Hvad så hvis rækken består af en bestemt range: f.eks. fra C til AG. hvilkene ænringer skal jeg lave.
Avatar billede banazmi Nybegynder
03. august 2004 - 11:23 #14
Der er lige en lille problem. tallet i række 31 kommer ikker med i svarcellen (32). Det fungere kun til rækken 31 hvor række 30 er tomme. men i mimn opgave skal jeg bruge række 31. hvad gøre jeg ???
Avatar billede sjap Praktikant
03. august 2004 - 12:38 #15
Når du skriver "tallet i række 31 kommer" mener du så kolonne 31?
Avatar billede bak Forsker
03. august 2004 - 13:02 #16
Du kunne måske bruge denne formel. Den skal indtastes som en array-formel, dvs indtastningen afsluttes med ctrl-shift-enter, således at formlen får tuborg-klammer omkring sig {}

=INDEKS($C2:$AG2;MAKS(KOLONNE($C2:$AG2)*($C2:$AG2<>"")))
Avatar billede bak Forsker
03. august 2004 - 13:07 #17
Var nok lige lidt for hurtigt. Skal starte i kolonne A, Sorry
=INDEKS($A2:$AG2;MAKS(KOLONNE($A2:$AG2)*($A2:$AG2<>"")))
Avatar billede bak Forsker
03. august 2004 - 13:10 #18
og skrev jeg også forkert :-)
=INDEKS($A2:$AG2;MAKS(KOLONNE($C2:$AG2)*($C2:$AG2<>"")))
Avatar billede sjap Praktikant
03. august 2004 - 13:34 #19
Jeg kom til at tænke lidt på sammenlign-funktionen - den må da også kunne bruges:

=SAMMENLIGN("*";A1:AE1;-1)  'Hvis data er tekst
=SAMMENLIGN(9,999999E+306;A1:AE1) 'Hvis data er tal
Avatar billede sjap Praktikant
03. august 2004 - 13:41 #20
Og nedenstående fungerer uanset om data er tekst eller tal, men så er den altså også meget mere frygtelig end baks forslag.

=HVIS(ER.FEJL(SAMMENLIGN(9,999999E+306;A1:AE1));SAMMENLIGN("*";A1:AE1;-1);HVIS(ER.FEJL(SAMMENLIGN("*";A1:AE1;-1));SAMMENLIGN(9,999999E+306;A1:AE1);MAKS(SAMMENLIGN(9,999999E+306;A1:AE1);SAMMENLIGN("*";A1:AE1;-1))))
Avatar billede banazmi Nybegynder
03. august 2004 - 14:03 #21
Jeg har faktisk løst det lille problem meget simpelt.
Jeg funktionen kun hvis den sidte celle er tomme, ellers er svar lig med den sidte celle.
Jeg deler pointene ligeligt men hvordan gøre jeg det ? skal jeg tryk Accepter og så kommer der måske nogle valg muligheder .. ?
Avatar billede banazmi Nybegynder
03. august 2004 - 14:04 #22
ups:  Jeg bruger ............
Avatar billede sjap Praktikant
03. august 2004 - 16:07 #23
Du skal først markere, hvem der skal have pointene. Herefter trykker du accepter.
Avatar billede sjap Praktikant
03. august 2004 - 16:09 #24
p.s. banazmi -> Fik du ikke prøvet min "sammenlign" (fr. kl. 13.34.44) den er jo ret enkelt og kræver ikke VBA-kode.
Avatar billede banazmi Nybegynder
03. august 2004 - 16:30 #25
P.s. sjap ->  jo, men den kommer det kolon nr. hvor den sidste værdi findes. så skal jeg lave et eller andet så jeg kan hente selve værdien. Der gik jeg i står.
Avatar billede sjap Praktikant
03. august 2004 - 16:57 #26
Nåh ja. Jeg havde jo lige glemt, at det var værdien du ville have. Så bliver det ved noget i retning af

=INDEKS(A1:AF1;1;SAMMENLIGN(9,999999E+306;A1:AE1))
Avatar billede sjap Praktikant
03. august 2004 - 16:59 #27
Hov der skal jo stå AF1 i "begge ender" :

=INDEKS(A1:AF1;1;SAMMENLIGN(9,999999E+306;A1:AF1))
Avatar billede sjap Praktikant
03. august 2004 - 17:14 #28
Jeg "faldt" lige over en anden mulighed (hos MS - hvem skulle have troet det?!)

=FORSKYDNING(A1;0;SAMMENLIGN(MAKS(A1:AF1)+1;A1:AF1;1)-1)

Og så kan i godt slappe af. Jeg skal nok lade være med at komme med flere lystige indfald. :0|
Avatar billede bak Forsker
03. august 2004 - 18:24 #29
sjap-> din egen er bedre end MS's  :-)
1. MS har en funktion mere end din  (maks)
2. Forskydning skal genberegnes hver eneste gang der sker en beregning i excel
  Så vidt jeg husker er dette ikke tilfældet med Indeks i de nyere versioner af excel

du kan i princippet nøjes med
=INDEKS(1:1;1;SAMMENLIGN(9,999999E+306;A1:AF1))    (uden kolonnenavne i starten)
Avatar billede sjap Praktikant
03. august 2004 - 18:29 #30
bak -> Du er nu ret snu. Den havde jeg ikke lige luret. Du må være kandidat til Falkeøjeprisen.
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