Page 1 of 2
[LØST] Hvis værdi=?
Posted: 22. Jun 2009 08:41
by SnowmanDK
Jeg er lidt fortabt, men der er sikkert en nem løsning jeg bare overser
Jeg har en kolonne med knap 2000 rækker af tal (kolonne A).
Der er formentlig omkring 100 forskellige tal.
Jeg skal lave en NY kolone (kolonne B) hvori alle værdier der er identiske med A1 får værdien "1" sat i B1.
Alle identiske med A2 får værdien "2" MEDMINDRE det er identisk med A1, sat i B2, og så fremdeles.
Nogen idéer

Posted: 22. Jun 2009 09:28
by Jens S
Hvis du har mulighed for at lave en hjælpekolonne i E med de værdier (200, 2, 12 osv) der i kolonne B skal erstattes med 1,2,3 osv kan du bruge denne formel i B1 og så trække ned i fyldhåndtaget:
=SAMMENLIGN(A1;$E$1:$E$100;0)
mvh
Jens
Posted: 22. Jun 2009 10:02
by SME
Jeg efterprøvede Jens' løsning, men fik det ikke til at virke (SAMMENLIGN er det danske navn for LOOKUP?).
Min løsning kræver 2 hjælpekolonner og virker kun hvis dine tal er heltal, men til gengæld behøver du ikke kende hvilke tal der er tale om!
Kolonne B dækker over samtlige tal mellem minimum og maksimum (inklusive), f.eks. tallene 1 til 2000.
Kolonne C angiver første placering af tallet og kan beregnes med formlen:
=VLOOKUP(B1;$A$1:$B$2000;2;0)
(på dansk hedder funktionen LOPSLAG). Nogle af resultaterne bliver #N/A, men det betyder blot at tallet ikke blev fundet i kolonne A. Det sidste 0 i funktionen er tilsyneladende vigtigt.
Kolonne D giver dig dit endelige resultat:
=VLOOKUP(A1;$B$1:$C$2000;2;0)
Posted: 22. Jun 2009 10:38
by SnowmanDK
øhm... Jeg tror at jeg fik formuleret det forkert. Jeg beklager.
B1 skal have værdien 1. Den samme værdi skal alle øvrige rækker i B have, HVIS A er lig med A1.
B2 skal have værdien 2, HVIS værdien i A2<>A1, ellers er B2=B1.
B3 skal have værdien 3, HVIS værdien i A3<>A1 OG A3<>A2 MEN HVIS A3=A1 så er B3=B1 OG HVIS A3=A2 så er B3=B2.
Håber det er bedre

Posted: 22. Jun 2009 10:44
by SME
Dvs. du vil have:
Code: Select all
A | B
===========
5 | 1
2 | 2
8 | 3
5 | 1
8 | 3
Det mener jeg også min løsning giver. Blot er resultatet i kolonne B flyttet hen til kolonne D pga. hjælpekolonnerne, så overstående vil se således:
Code: Select all
A | B | C | D
========================
5 | 1 | #NA | 1
2 | 2 | 2 | 2
8 | 3 | #NA | 3
5 | 4 | #NA | 1
8 | 5 | 1 | 3
| 6 | #NA |
| 7 | #NA |
| 8 | 3 |
Posted: 22. Jun 2009 11:35
by SnowmanDK
Hej SME. Dit svar kom mellem jeg læste, og fik svaret

Mit sidste svar var til Jens S.
Angående din løsning...
Du har forstået hvad jeg vil have
MEN... Nu skal jeg være sikker på at jeg har forstået det korrekt.
Jeg har nemlig fundet ud af at mine værdier ligger fra 5798002700000
til 5798002800000.
Vil det sige at jeg skal lave 100000 værdier i kolonne B?
Posted: 22. Jun 2009 11:41
by SME
SnowmanDK wrote:MEN... angående din løsning...
Nu skal jeg være sikker på at jeg har forstået det korrekt.
Jeg har nemlig fundet ud af at mine værdier ligger fra 5798002700000
til 5798002800000, hvilket vil sige at jeg skal lave 100000 værdier i kolonne B?
Teknisk set, ja, medmindre du kan se, at dine numre har et vist trinstørrelse, f.eks. at der efter 5798002700000
ikke kommer 579800270000
1 men blot 579800270
1000. Så kan du jo nøjes med tallene 5798002700000, 579800270
1000, 579800270
2000, 579800270
3000 osv.
Hvis dine tal begynder at blive decimal tal eller antallet af tal bliver for stor, er jeg bange for, at du må ty til makroprogrammering. Men så kan det nok også klares uden ekstra hjælpekolonner.
Posted: 22. Jun 2009 11:44
by Jens S
Denne virker måske nemmere. I B1 indtaster du og trækker nedad:
=SAMMENLIGN(A1;$A$1:$A$2000;0)
Det er tilsyneladende ikke nødvendig at lave en sammenligningskolonne. SAMMENLIGN er det samme som MATCH på engelsk.
Her kan du hente regneark med oversættelse
http://peecee.dk/upload/view/177138
NB! den er ikke helt stabil, hvis du ændre tal i kolonne A
mvh
Jens
Posted: 22. Jun 2009 11:50
by SME
Jens S wrote:Denne virker måske nemmere. I B1 indtaster du og trækker nedad:
=SAMMENLIGN(A1;$A$1:$A$2000;0)
Det er tilsyneladende ikke nødvendig at lave en sammenligningskolonne. SAMMENLIGN er det samme som MATCH på engelsk.
Her kan du hente regneark med oversættelse
http://peecee.dk/upload/view/177138
mvh
Jens
Ja, det forklarer nok hvorfor jeg ikke kunne genskabe dine resultater

. Og denne metode ser klart ud til at være at foretrække frem for min metode.
Posted: 22. Jun 2009 12:19
by SnowmanDK
Så er vi ved at være der Jens

Men desværre virker din metode ikke HELT som jeg vil have den til.
Jeg får nedenstående med din formel (dette er bare et meget lille udklip):
Code: Select all
A | B
====================
5798002754506 | 1
5798002754506 | 1
5798002754506 | 1
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759754 | 4
5798002759785 | 17
5798002759785 | 17
5798002759785 | 17
5798002759785 | 17
5798002759808 | 21
Jeg prøvede at sortere kolonne A for at få et overblik under tests.
Din formel tildeler ikke løbende numre, men numre baseret på rækkenummer. Derfor har 4. række værdien 4 i stedet for 2 som den burde, og 17. række får værdien 17 i stedet for 3.
Posted: 22. Jun 2009 12:43
by SME
Oprindeligt havde jeg kigget på noget VLOOKUP (da: LOPSLAG), men det voldte mig store problemer. Men tror nu, at problemet var fraværet af den sidste parameter.
Jeg er nu nået frem til følgende forslag:
Code: Select all
A | B | C
==================
5 | 1 | 1
2 | 2 | 2
8 | 3 | 3
5 | 4 | 1
8 | 5 | 3
hvor C1 har koden:
=VLOOKUP(A1; $A$1:$B$5; 2; 0)
Hvad med databaser?
Posted: 22. Jun 2009 12:47
by SME
Hej igen
Hvad har du til at generere de 2000 tal? For er du ikke i bund og grund på udkig efter de enkelte tal samt ??
Jeg tænker på, om der ikke er et bedre medie til din opgave end calc. F.eks. en database (her får du SQL udtrykket "DISTINCT") eller Python (her vil jeg kunne skrive en rutine med lukkede øjne til at løse denne opgave).
Så hvad laver du?

Posted: 22. Jun 2009 12:55
by SnowmanDK
Det er virksomheds-EAN numre som skal bruges til afregning hos vores teleselskab.
De vil ikke lave samlede regninger ud fra vores EAN numre, men have en liste med fortløbende numre at basere det på.
De har en fast skabelon i xls format som vi skal bruge...
De er jo desværre lidt sstive med hvordan de vil have tingene gjort.
Har i øvrigt lige testet dit sidste forslag SME.
De giver samme resultat som Jens' gjorde... Når den finder en værdi der ikke er set før, tildeler den et nummer baseret på rækken værdien er i, i stedet for et fortløbende nummer.
Posted: 22. Jun 2009 13:12
by SME
Argh... P1S. Havde overset den vigtige detalje, at hvis et element forekommer flere gange før alle har været der, går det galt.
Nu er jeg hooked på at få en løsning der virker (gjorde min af kl. 10:02?), så kom med det! Jeg sover ikke før det virker!
Har du Python installeret? Hvad genererer dit output? Er det i CSV? Tekst? Bla? Og hvordan skal tingene sættes ind i XLS skabelonen? Copy-and-paste?
Posted: 22. Jun 2009 13:34
by SnowmanDK
Jeg fik det nok formuleret lidt forkert, da det er et xls dokument i færdig format med diverse låste kolonner og celler med videre.
Det er ÉT kæmpe dokument på 10,5Mb.
Alle data der skal bruges er der allerede, lige med undtagelse af de fortløbende numre som jeg skal have genereret.
Det skal gemmes igen som xls.
I det ene ark jeg skal bruge, er der p.t. række 1 til 1401 fordelt på kolonne A til CP i brug.
Er det info nok?