Just nu i M3-nätverket
Jump to content

Excel-expert??


Arne Andersson

Recommended Posts

Arne Andersson

Tror jag blir gaaaaaaalen...

 

Jag har tre namngivna celler i ett kalkylblad; Sverige (A1), Norge (B1), Finland (C1). Dessa celler innehåller, i sin tur, olika värden, ex. 10 (A1), 20 (B1), 5 (C1).

I A3, A4 och A5 vill jag se rangordningen, d v s Norge, Sverige och Finland beroende på ooäng. A3:A5 ska naturligtvis uppdateras automatiskt.

 

Har inga problem med att få själva värdena (siffrorna) att uppddatera sig självt (funktionsguiden - leta upp och referens - OM), eller att namnet på namngiven cell infogas istället för själva värdet i max-cellen (funktionsguiden - leta upp och referens - LETAUPP). Men hur i hela fridens namn får jag samtl. tre länder att uppdatera sig självt???

 

Jag vill alltså se namnen (Sverige, Norge, Finland) istället för dess värden.

Fall någon förstår vad jag menar (!!) och kan bistå med ett tips skulle jag bli så himla glad!

Hej.

 

 

 

Link to comment
Share on other sites

Daniel Wahlgren

Formel:

=OM(RANG(A2;A2:C2;0)=1;A1;OM(RANG(B2;A2:C2;0)=1;B1;OM(RANG(C2;A2:C2;0)=1;C1;)))

 

Byt ut =1 till =2 resp =3 på de tre platserna i formeln...

 

Kanske inte är den mest effektiva, men den fungerar och är lättförståelig.

 

**********

Om spelvåld påverkar unga, hur skulle pacmangenerationen se ut idag?

 

Svarade jag bra? Ge mig ett poäng ;)

[inlägget ändrat 2003-01-10 21:25:04 av Daniel Wahlgren]

Link to comment
Share on other sites

I cell A3 (Största värdet - landets namn):

=OM(Sverige=STÖRSTA($A$1:$C$1;1);"Sverige";OM(Norge=STÖRSTA($A$1:$C$1;1);"Norge";"Finland"))

 

I cell A4 (Näst största värdet - landets namn):

=OM(Sverige=STÖRSTA($A$1:$C$1;2);"Sverige";OM(Norge=STÖRSTA($A$1:$C$1;2);"Norge";"Finland"))

 

I cell A5 (Tredje största värdet - landets namn):

=OM(Sverige=STÖRSTA($A$1:$C$1;3);"Sverige";OM(Norge=STÖRSTA($A$1:$C$1;3);"Norge";"Finland"))

 

Vill man ha själva värdet räcker denna enkla formel:

 

A3:

=STÖRSTA($A$1:$C$1;1)

 

A4:

=STÖRSTA($A$1:$C$1;2)

 

A5:

=STÖRSTA($A$1:$C$1;3)

 

Nu väntar jag med spänning tills XL-Dennis kommer och ger oss den mest optimala lösningen.

 

;-) :-)

 

 

 

[inlägget ändrat 2003-01-10 23:28:18 av CarlWan]

Link to comment
Share on other sites

Hej,

 

Optimala lösningen?

 

Njae, men dock en annorlunda ansats ;-)

 

A3: =STÖRSTA(Sverige:Finland;RAD()-2)

A4: =STÖRSTA(Sverige:Finland;RAD()-2)

A5: =STÖRSTA(Sverige:Finland;RAD()-2)

 

B3: =OM(A3=Sverige;"Sverige";OM(A3=Norge;"Norge";"Finland"))

B4: =OM(A4=Sverige;"Sverige";OM(A4=Norge;"Norge";"Finland"))

B5:=OM(A5=Sverige;"Sverige";OM(A5=Norge;"Norge";"Finland"))

 

 

Mvh

Dennis

Besök Sveriges ledande oberoende webbplats om MS Excel: http://www.xldennis.com

 

Link to comment
Share on other sites

Man kan spinna vidare på Dennis svar och göra:

 

=INDEX({"Sverige";"Norge";"Finland"};1;PASSA(STÖRSTA(Sverige:Finland;RAD()-2);Sverige:Finland;0))

 

Observera dock att ingen av lösningarna ger korrekt resultat om två eller tre indata har samma värde. Kan det lösas utan sortering?

 

Anders

 

Link to comment
Share on other sites

Kan en cell ha två eller flera namn ?

Hur då ?

När jag namnger en cell eller område så markerar jag och skriver in namnet i rutan där det normalt står tex B2.

 

/TN

 

Link to comment
Share on other sites

Aha :-)

 

När jag läste frågan och tittade efter en lösning så fattade jag det som att han ville läsa av namnet utan att skriva in det.

Fast jag gav upp när jag vet att det som tar mig ungefär två-tre timmar tar XL-Dennis tio minuter...

 

Jag körde fast på att kunna göra egna funktioner. Det gick inte.

Kan man inte göra en egen funktion som man kan anropa i en cell med =minFunktion() ?

 

<Escape>Det fungerade nu...det va' inget.

 

/TN

 

Link to comment
Share on other sites

istället för

sub minFunktion()

så gör du en publik funktion. Den hamnar i infoga-funktioner-anpassade

 

Public Function minFunktion(indata1, Indata2) As Variant

'

'

'

End Function

 

Link to comment
Share on other sites

En liten korrigering av mitt tidigare inlägg:

 

Programraden

 

=INDEX({"Sverige";"Norge";"Finland"};1;PASSA(STÖRSTA(Sverige:Finland;RAD()-2);Sverige:Finland;0))

 

fungerar men är inget bra exempel på bra programmering.

 

Man ska aldrig hårdkoda utdata i programkoden.

 

Om det bestäms att det i stället ska stå "Noreg" eller "Suomi" i utdata måste någon in och rodda i koden. Usch! Eller om programmet ska översättas och det ska heta "Sweden", "Norway" och Finland".

 

Bättre är att lägga ländernas namn (i detta fall Sverige, Norge och Finland) i egna (dolda) Excel-fält eller i en extern textfil.

 

Anders

 

Link to comment
Share on other sites

Anders,

 

Jo generellt har du en poäng i det :-)

 

...i en extern textfil.

 

Möjligtvis om du håller på och programmerar i VB/VB.Net men inte i XL ;-)

 

Namn är litet mer problematiska än andra "containers".

 

Användning av ett dolt cellområde kräver att formeln byggs upp annorlunda än den nuvarande. Värden inom klammrar kan t ex inte referera till celler utan kräver hårdkodning.

 

Om vi vill ha en smidig lösning (givet ett behov) borde den rimligtvis se ut på följande sätt:

- Ett redigeringsformulär där namnuppgifterna läses från och skrivs till Workbook.Names-collectionen.

- Replace-procedur för att byta ut namnen i befintliga formler.

 

Båda dessa steg kan också ske manuellt men blir då mer tidskrävande men vi behöver inte "rodda" i koden.

 

Utan att rikta kritik mot dig som person vill jag påstå att du är en van VB/VB.net-programmerare och har din utgångspunkt i den miljö.

 

XL delar mycket med VB men har mycket egen funktionalitet som VB/VB.net-programmerare inte känner till eller har djupare kunskaper om.

 

Mvh

Dennis

Besök Sveriges ledande oberoende webbplats om MS Excel: http://www.xldennis.com

 

Link to comment
Share on other sites

Hej (igen),

 

Läste igenom denna tråd igen och insåg att utgångspunkten är olämplig.

 

Det enklaste och mest logiska är att

ange namnen i cellområdet A1:C1 och

värdena i cellområdet A2:C2 och i cell A4 ange följande formel, som kopieras nedåt i kolumnen:

 

=INDEX($A$1:$C$1;PASSA(STÖRSTA($A$2:$C$2;RAD()-3);$A$2:$C$2;0))

 

Mvh

Dennis

Besök Sveriges ledande oberoende webbplats om MS Excel: http://www.xldennis.com

 

Link to comment
Share on other sites

Jo generellt har du en poäng i det :-)

 

Just det, det var bara en generell betraktelse, ingenting annat.

 

Utan att rikta kritik mot dig som person vill jag påstå att du är en van VB/VB.net-programmerare och har din utgångspunkt i den miljö.

 

VB/VB.net, vad är det? Jag har bara hackat lite Excel av och till sedan 1985 då programmet hette Multiplan och distribuerades på 1 (en!) 400K floppy. Nåja, lite annan har jag väl också gjort :)

 

Anders

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...