Avatar billede mr.handstand Novice
31. oktober 2007 - 12:48 Der er 7 kommentarer og
1 løsning

returner værdien fra dén udfyldte celle længst mod højre i række

Uden brug af VBA kode - håber dette kan lade sig gøre:
Find den celle i en række/range der er udfyldt længst mod højre - der kan være tomme celler i rækken frem mod den udfyldte celle.

Konkret:
Jeg ønsker at én kolonne på mit ark viser de nyeste værdier for hver række. Fx Værdien i celle B3 afspejler værdien af den celle i række 3 der står længst til højre med værdier (der kan være luft mellem cellerne). Således skal følgende datasæt returnere værdien "Anders" i B3: (C3="Jesper", D3="Jens", K3="Anders")

Det er vigtigt for mig, hvis overhovedet muligt, at det foregår uden makroer og egenudviklet funktionalitet i VBA.

Baggrund: Overblik over parametres udvikling over tid - visning af gældende værdi pr. række i én kolonne.
Et ark vil skulle kunne indeholde settings for et ukendt antal parametre, der vil kunne ændres over tid - jeg ønsker at bevare historikken samt automatisk få vist den nyeste værdi af hver parameter. Hver gang man identificerer en ny parameter får den sin egen række på arket: i kolonne A angives navnet på parameteren, fx session_length, fieldLastVisit_visible etc.

På arket vil ØVERSTE række blive anvendt til at skrive tidspunktet for en ny parameterinddatering /-justering, og i rækkerne under den givne dato anføres ændrede/nye værdier ud for de respektive parameternavne. Kun et fåtal af parametrene ændres hver gang - de uændrede vil være blanke i denne kolonne. Næste gang man laver en justering indføres det nye tidspunkt i øverste række i kolonnen til højre for sidste justeringstidspunkt, og igen anføres de justerede værdier for parametrene under datoen i de respektive rækker.

Men eftersom alle parametre ikke ændres hver gang vil der være tomme celler i arket.

Eksempel:
C1: 21-10 2007, D1:24-10 2007, E1:28-10 2007, F1: 30-10 2007

A3: Parameternavn2, C3:24
A4: Parameternavn3, C4:Høj, D4:Meget høj, F4:Medium
A5: Parameternavn1, D5:True, E5:False


Jeg ønsker at B3 via formel returnerer: 24
Jeg ønsker at B4 via formel returnerer: Medium
Jeg ønsker at B5 via formel returnerer: False

Min egen tanke er at identificere hvilken tidspunkt-celle der er udfyldt længst mod højre ( i eksemplet E1, forudsætning: stigende værdi, så maks værdi altid står længst til højre i række 1). Jeg tænker selv på at lave en "skjult" række 2, neden under datorækken, hvor tallene blot stiger incrementelt m. 1 pr. celle mod højre - ved at lave hlookup på max-værdien i række 1 og returnere værdien fra række 2, ved jeg hivlken kolonnenr(a la offset) der indeholder største dato. Denne information vil jeg bruge til for hver række at kigge mod venstre fra maxkolonnen og retunere første værdi man møder. Men hvordan?

Et skygge-alternativ er at definere et skjult ark med en masse formler omme bagved - men det håber jeg at kunne undgå!
Avatar billede excelent Ekspert
31. oktober 2007 - 13:45 #1
henter værdi længst til højre i række 1
laver en formel som kan kopieres ned når jeg er hjemme
så prøv forløbig denne (skal du have værdi i række 2, ændres alle 1 til 2
husk afslut formel med ctrl+shift+enter {}
uk
=INDIRECT(ADDRESS(1;MAX(IF(1:1<>"";COLUMN(1:1)))))
dk
=INDIREKTE(ADRESSE(1;MAKS(IF(1:1<>"";COLONNE(1:1)))))
Avatar billede excelent Ekspert
31. oktober 2007 - 13:46 #2
ups DK

=INDIREKTE(ADRESSE(1;MAKS(HVIS(1:1<>"";KOLONNE(1:1)))))
Avatar billede mr.handstand Novice
31. oktober 2007 - 13:56 #3
Hej,
Det ser skarpt ud  - arrayformel er en rigtig god løsning.
Jeg kan fint få ovenstående til at virke, men jeg må blankt indrømme at jeg ikke helt kan følge strukturen. Kan du prøve at vise den med nogle afgrænsede range's så den ikke tager hele række 1, men returnerer største værdi i området "c1:k1" ?
Avatar billede excelent Ekspert
31. oktober 2007 - 15:20 #4
=ADRESSE(1;MAKS(HVIS($C1:$K1<>"";KOLONNE($C1:$K1))))
Avatar billede excelent Ekspert
31. oktober 2007 - 15:22 #5
ovenstående returnerer adressen, denne værdien

=INDIREKTE(ADRESSE(RÆKKE(1:1);MAKS(HVIS($C1:$K1<>"";KOLONNE($C1:$K1)))))
Avatar billede mr.handstand Novice
31. oktober 2007 - 16:14 #6
Lige for at komme dig i forkøbet - sådan her ser den ud til engelsk version af excel:

=INDIRECT(ADDRESS(ROW(1:1);MAX(IF($C1:$K1<>"";COLUMN($C1:$K1);""))))

Baseret på dit input lavede jeg lige følgende lille justering - for at kunne tillade at formlen placeres på en række der endnu ikke har nogen værdier indtastet har jeg introduceret en tom kolonne (E:E) som er skjult og ikke indeholder værdier:

Følgende arrayformel er indsat i cellen D6 og returnerer værdien længst til højre i række 6. Hvis der ikke er nogen værdier i række 6 (startende v. cellereference F6), returnerer den værdien i E6 som er blank:

=INDIRECT(ADDRESS(ROW(6:6);IF(MAX(IF($F6:$BB6<>"";COLUMN($F6:$BB6);""))=0;COLUMN($E:$E);MAX(IF($F6:$BB6<>"";COLUMN($F6:$BB6);"")))))

Jeg takker MANGE gange for svaret excelent - godt gået! ;o)
Avatar billede mr.handstand Novice
31. oktober 2007 - 16:15 #7
Placerer du et svar for at modtage point.
Avatar billede excelent Ekspert
31. oktober 2007 - 16:34 #8
ok velbekom
en lidt kortere version af formlen (hvis ingen værdier i området)

=IF(COUNTA(F6:BB6)>0;INDIRECT(ADDRESS(ROW(6:6);MAX(IF($F6:$BB6<>"";COLUMN($F6:$BB6)))));"")
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