21. april 2006 - 06:35Der er
54 kommentarer og 1 løsning
opsalg i usorteret kolonne
Hej jeg har en værdi fra en kolonne som skal slås op i en kolonne i et andet regneark.
Kolonnen har filter og er ikke sorteret og kan ikke sorteres.
I opslagskolonnen optræder værdien ofte flere gange sog ikke hulter til bulter men lige efter hinanden.
Returværdierne skal henhodlsvis være den første værdi i kolonne 5 Samt max de tre første forskellige værdier i kolonne 4.
Et fiktivt eksempel
kolonnne 4 kolonne 5
2010 audi 1234 2010 audi 1234 2020 bmw 4567 2020 bmw 7894 2005 citrroen 6547 2005 citroen 6547 2005 mazda 6547 2005 ford 4561 2030 ford 9874 2040 honda 3214 2040 vw 6542
Hvis søgeværdien feks er 2005 returneres 6547 og citroen/mazda/fordi er søgeværdien 2040 returneres 3214 og honda/vw. Det gør ikke så meget hvis alle værdier fra kolonne 4 kommer med så kan jeg selv sortere fra - men det er vigtigt de står i fortløbende rækkefølge.
Men jeg skal jo ikke bruge alle oplysninger. Kun udvalgte oplysninger feks oplysninger på 20 numre ud af omtrent 1100 numre.
Det der sker er at jeg skal hente data fra 4 forskellige excel filer og taste dem manuelt ind i axapta. Det er hidtil sket ved at man manuelt har hentet alle oplysninger fra de 4 foskellige filer og skrevet dem ind i et skema. Det mener jeg er for usikkert og giver mulighed for fejl undervejs. Derfor ønsker jeg at data automatisk kan hentes over i et skema.
Men ok hvis problemet med hentning af data er at at kolonnen man søger i ikke er sorteret og et avanceret filter kan klare en sortering, ja så kan det være en mulighed. Men det er data fra 3-4 forskellige excel filer.
Men man kan selvfølgelig oprette en excel fil hvor hvert datamateriale fra de 3.4 filer ligger på hvert sit ark og se hente det ind i mit skema.
Det er excelfiler der løbende opdateres og de varenumre jeg skal bruge i næste uge står endnu ikke i filerne.
Men det er ret omstændigt og tidskrævende at hente dataerne manuelt.
har hentet data fra en fil. Det går godt i 95 % af tilfældene. Her står dataerne sorteret i selve skemaet jeg søger i, men ikke i filteret og det er netop de varenumre der er står usorteret i filteret jeg har probelemer med.
Indsæt makro i arkmodul Forudsætter at dine datakolonner er i A:C. Sorterer og returnerer herefter værdien i kol. D:F. Tilret evt. dine område i koden Range("område") Den smider dog alle værdier ind kolonne 4 (dine biler). Jeg arbejdr stadigt på at begrænse det til maks 3.
Sub sorter() Dim tæl As Integer, i As Integer Application.ScreenUpdating = False Range("d10:f100").ClearContents i = 0 For Each a In Range("a10:a100") tæl = 0 For Each b In Range("a10:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 End If Next If tæl = 1 Then Range("d10").Offset(i, 0) = a Range("f10").Offset(i, 0) = a.Offset(, 2) i = i + 1 End If Next
j = 0 For Each c In Range("d10:d100") For Each d In Range("a10:a100") If c = d And c <> "" Then Indsat = Indsat & d.Offset(, 1).Value & "/" End If Next Range("e10").Offset(j, 0) = Indsat j = j + 1 Indsat = "" Next
Sub sorter() Dim a, b, c, d, indsat Application.ScreenUpdating = False Range("d10:f100").ClearContents i = 0 For Each a In Range("a10:a100") tæl = 0 For Each b In Range("a10:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 End If Next If tæl = 1 Then Range("d10").Offset(i, 0) = a Range("f10").Offset(i, 0) = a.Offset(, 2) i = i + 1 End If Next
j = 0 For Each c In Range("d10:d100") For Each d In Range("a10:a100") If c = d And c <> "" Then indsat = indsat & d.Offset(, 1).Value & "/" End If Next Range("e10").Offset(j, 0) = indsat j = j + 1 indsat = "" Next Application.ScreenUpdating = True End Sub
Sub sorter() Dim a, b, c, d, tæl, indsat Application.ScreenUpdating = False Range("d10:f100").ClearContents i = 0 For Each a In Range("a10:a100") tæl = 0 For Each b In Range("a10:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 End If Next If tæl = 1 Then Range("d10").Offset(i, 0) = a Range("f10").Offset(i, 0) = a.Offset(, 2) i = i + 1 End If Next
j = 0 For Each c In Range("d10:d100") For Each d In Range("a10:a100") If c = d And c <> "" Then tæl = tæl + 1 If tæl <= 3 Then indsat = indsat & d.Offset(, 1).Value & "/" End If End If Next Range("e10").Offset(j, 0) = indsat j = j + 1 indsat = "" tæl = 0 Next Application.ScreenUpdating = True End Sub
Har rettet en lille fejl så den nu smider maks 3 FORSKELLIGE værdier ind i kolonnen
Sub sorter1() Application.ScreenUpdating = False Range("d10:f100").ClearContents
For Each a In Range("a10:a100") tæl = 0 tæl1 = 0 For Each b In Range("a10:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("d10").Offset(i, 0) = a Range("f10").Offset(i, 0) = a.Offset(, 2) i = i + 1 txt = Range("e10").Offset(i - 1, 0) Range("g10").Offset(i - 1, 0) = Left(txt, 4) tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("e10").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("e10:e100") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("e10").Offset(j, 0) = txt1 j = j + 1 End If Next
Sub sorter1() Dim a, b, c, d, i, tæl, tæl1, tæl2, indsat Application.ScreenUpdating = False Range("d10:f100").ClearContents
For Each a In Range("a10:a100") tæl = 0 tæl1 = 0 For Each b In Range("a10:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("d10").Offset(i, 0) = a Range("f10").Offset(i, 0) = a.Offset(, 2) i = i + 1 tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("e10").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("e10:e100") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("e10").Offset(j, 0) = txt1 j = j + 1 End If Next
Højreklik på din arfane og vælg programkode. Kopier den sidste kode ind og luk vinduet. Herefter kan du finde sorter1 under menuen funktioner og makro (tryk evt. bare Alt+F8) og afspille den herfra. Herinde kan du også redigere koden og sætte en genvejstast under indstillinger for makroen
Makroen er tilrettet til at hente fra en fil. Ret selv stien, filnavnet, arknavne og evt. celleområderne. Indsæt Makroen i eksempelvis ark 2. Filen du henter fra har jeg kaldt Frafil, Ark1, Filen du henter til har jeg kaldt Tilfil, Ark1. Områderne ændrer du i Range(" ").
For Each a In Sheets("Ark1").Range("a1:a100") tæl = 0 tæl1 = 0 For Each b In Sheets("Ark1").Range("a1:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("a1").Offset(i, 0) = a Range("c1").Offset(i, 0) = a.Offset(, 2) i = i + 1 tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("b1").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("b1:b100") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("b1").Offset(j, 0) = txt1 j = j + 1 End If Next
For Each a In Sheets("Ark1").Range("a1:a100") tæl = 0 tæl1 = 0 For Each b In Sheets("Ark1").Range("a1:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("a1").Offset(i, 0) = a Range("c1").Offset(i, 0) = a.Offset(, 2) i = i + 1 tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("b1").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("b1:b100") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("b1").Offset(j, 0) = txt1 j = j + 1 End If Next
For Each a In Sheets("Ark1").Range("a2:a100") tæl = 0 tæl1 = 0 For Each b In Sheets("Ark1").Range("a2:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("a2").Offset(i, 0) = a Range("c2").Offset(i, 0) = a.Offset(, 2) i = i + 1 tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("b1").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("b1:b100") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("b1").Offset(j, 0) = txt1 j = j + 1 End If Next
Når jeg går ind i funkrioner -> makro står der nu Ark1.sorter1 'opstart_skiver_checklist test.xls'!disable 'opstart_skiver_checklist test.xls'!SetTime 'opstart_skiver_checklist test.xls'!shutdown
Ved ikke om det kan skyldes at jeg fortrød min handling første gang jeg prøvede makroen og afluttede det hele.
Du skal sætte makroen ind på ark2 i den fil som du kopierer over i og hvor du også sortere værdierne. Makroen kopiere først de samme værdier ind i Ark1 som du har stående i din oprindelige fil og herefter laver den sorteringen i Ark2 (eller hvor du nu vælger at sortere dine data) Jeg forstår ikke lige hvorfor du lukker Y:\holstbro\opstart_skiver_checkliste.xls. Det skal være den samme fil som du åbner, h:\Nye skiver\2006\opstart_skiver_checkliste test.xls (altså der hvor du kopierer fra).
hmm har nu prøvet at kopiere over manuelt og så kun bruge det sidste af koden - så kommer der i hvert fald data over på ark 2, men jeg har så stadig problemet med at jeg ikke har mine opslagsværdier og det er jo kun dem jeg skal have data på.
Stop lige lidt. Jeg tror vi begynder forfra. Som jeg har forstået opgaven, skal du have kopieret dene data fra en fil over i en anden fil i Ark1. Når det så er gjort skal dataene herefter sorteres i den nye fil i Ark2, er det korrekt ?
Det jeg har er et datagrundlag på 1100 forskellige varenumre. Som ligger i opstart_skiver.... Hvert varenummer kan have op til flere "mærker" hvor af jeg max skal bruge de tre første og et det første specifikke "nr"(fra kolonne 10) tilhørende varenummeret.
Når der kommer nye varer skal jeg bla finde nogle data fra opstart_skiver... Feks har jeg lige fået 20 nye vare numre jeg skal have data for.
På de 20 varenumre skal jeg slå op opstart_skiver i finde max 3 første "mærker" og ja første nr(fra kolonne 10)
Jeg skal også hente data fra andre filer men dem kan jeg hente vha lopslag.
Du må ikke have filen opstart_skiver åben inden du kører makroen. Prøv lige at kør denne makro fra din nye fil (som hedder test af makro) og fortæl hvad der sker.
Sub Test() Application.ScreenUpdating = False Sheets("Ark1").UsedRange.ClearContents Sheets("Ark2").UsedRange.ClearContents Workbooks.Open Filename:= _ "h:\Nye skiver\2006\opstart_skiver_checkliste test.xls" Sheets("Checkliste").Range("a4:c100").Copy _ Destination:=Workbooks("test af makro").Sheets("Ark1").Range("a2") Workbooks("opstart_skiver_checkliste test").Close savechanges:=False End Sub
For Each a In Sheets("Ark1").Range("a2:a100") tæl = 0 tæl1 = 0 For Each b In Sheets("Ark1").Range("a2:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("a2").Offset(i, 0) = a Range("c2").Offset(i, 0) = a.Offset(, 2) i = i + 1 tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("b2").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("b2:b100") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("b2").Offset(j, 0) = txt1 j = j + 1 End If Next
Nej jeg giver sgu ikke så let op :-). Jeg tror det nemmeste er at du sender mig filen. Altså den fil hvor du laver din sortering og har indsat makroen og hvor du har hentet alle dataene over fra opstart_skiver. Send til alsikva snabela tiscali.dk Så prøver jeg at kigge på det i aften.
Nå, men så prøver vi her. Den kopierer dataene over og sorterer dem i Ark 2. Godt nok ikke i nr. række følge, men hvis du i Ark3, A1 skriver 2010 og i Ark3 B1 indsætter formel =LOPSLAG(A1;Ark2!A1:A100;2;FALSK), så burde den returnere resultatet for B kolonnen i Ark2, nemlig din tekst bmw/citroen/audi eller hvad der nu står. Ellers forstår jeg ikke rigtig hvad der sker.
For Each a In Sheets("opstart skiver").Range("a2:a900") tæl = 0 tæl1 = 0 For Each b In Sheets("opstart skiver").Range("a2:a" & a.Row) If a = b And b <> "" Then tæl = tæl + 1 If a.Offset(, 1) = b.Offset(, 1) Then tæl1 = tæl1 + 1 End If End If Next
If tæl = 1 Then Range("a2").Offset(i, 0) = a Range("c2").Offset(i, 0) = a.Offset(, 10) i = i + 1 tæl2 = 0 indsat = "" End If
If tæl1 = 1 Then tæl2 = tæl2 + 1 If tæl2 <= 3 Then indsat = indsat & a.Offset(, 1) & "/" Range("b2").Offset(i - 1, 0) = indsat End If End If Next
For Each txt In Range("b2:b900") If txt <> "" Then txt1 = Left(txt, Len(txt) - 1) Range("b2").Offset(j, 0) = txt1 j = j + 1 End If Next
Ok det er lidt svært når jeg ikke kan se din fil, men gør den det ellers rigtigt ? altså i kolonne A står alle varenumre 1 gang, i kolonne b er forskellig tekst sat ind maks 3 gange og i kolonne C står der et nr. en gang ??? Hvis det er tilfældet forstår jeg ikke at du får fejl på et opslag hvor nummeret eksisterer i A kolonnen, når du samtidig får returneret et andet nr. som eksister.
ja umiddelbart ser den ud til at gøre det rigtigt, Har ikke tjrkket data så grundigt. Så nu er problemet dubletterne som jeg kan leve med og ja lopslag
Hvilke dubletter ?. Den burde ikke lave dubletter. Hos mig smider den det kun ind en gang. M.h.t. Lopslag, er der nogen bestemte den fejler ved eller er det alle sammen ? Det ville være noget lettere hvis man havde arket. kan du ikke tilrette arket på en eller anden måde så der ikke fremgår nogen fortrolige data. Evt. bare med nogen af de data som fejler, og sende det. Ellers tror jeg desværre ikke at jeg kan gøre meget mere. Desværre :-(
Ja det har jeg. Har sat det op således =HVIS(ER.FEJL(LOPSLAG($A2;'sorteret opstart skiver'!$A$1:$C$150;2;FALSK));111;LOPSLAG($A2;'sorteret opstart skiver'!$A$1:$C$150;2;FALSK))
Og der kommer ganske rigtigt 111 i mange af cellerne, men varenumrene jeg slår op eksisterer altså i kolonnen.
Hmm ved oplag i linie 16 i ark2(sorteret opstart skiver)som jeg slår op i, får jeg en værdi med over. I linie 17 og nedefter får jeg ingen værdi med over.
Har så prøvet at slette linie 17 og kopiere linie 16 ind. Og så overskrive værdiernemed de værdier der opr stod i linie 17. så kan den godt finde ud af at hente værdien.
Hmm siger det dig noget, andet end at det må være noget der er knyttet til cellen. Ark 2 er det ark, hvor der er udvalgt max de tre første bilmærker for alle varenumre.
ja det er rigtigt nok he he. Tænk om du ikke nærmest kommer til at få alle mine point med tiden. Men jo jeg synes nu du skal have flere point. Det lovede jeg tidligere i tråden og det holder jeg. Så jeg laver lige et nyt spm der hedder point til mrjh - for det er vel den eneste måde man kan give ekstra point???
Hvordan er point systemet. Kan man kun tjene point eller får man også løbende nogle ekstrapoint med tiden dvs per uge eller måned?
Så vidt jeg ved får man 5 point pr. dag, og man kan tjene p. ved at svare på spørgsmål. Jeg synes du skal beholde dine point. 60 p. er trods alt for et svært spm. c",)
For sent søde. Har oprettet spm. Jeg er gavmild i dag. Mon ikke du så får mulighed for at være gavmild en anden dag ;O)
LN
Synes godt om
Ny brugerNybegynder
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.