23. juli 2018 - 21:58Der er
18 kommentarer og 1 løsning
Søge efter data fra andet sheet og tilføje data
Hej med Jer.
Jeg har lidt udfordringer på, hvordan jeg skal løse en måske simpel opgave. Det drejer som om, at jeg skal have fat i Celle A & E fra sheet 1 - som skal flyttes over til sheet 2.
Men da meget af det samme tekst, så er det vigtigt - at det er det rigtige som bliver flyttet. Derfor skal den søge på flere celler, i sheet 2.
Sheet 2 søgning: Kolonne C står uger, som også gør i Sheet 1 Kolonne G - de skal matche. Sammen med D i Sheet2 som skal matche D i Sheet 1. Desuden, skal det arknavn, hvor der bliver fortaget søgning skal også matche i Sheet 1 Kolonne C.
Passer de 3 punkter, flyttes cellerne A & E over i Sheet 2. Det skal siges, at der sagtens kan stå flere uger og varenr. Men den skal bare tage det første match, i begge dele.
Tænker det er noget VBA, da jeg ikke har kunne finde en løsning med vlookup og match.
Prøv evt. at lægge et eksempel op via dropbox el. lign, med beskrivelse i arket, så er det nemmere at guide dig videre.
Men det lyder umiddelbart, som om du kan komme langt med INDEX og MATCH funktionerne i en matrixfunktion: =INDEX("Et passende område af kolonne A på sheet 1";MATCH("Celle med ugenummer"&"Celle i kolonne D";"Et passende område af Ugekolonnen på sheet 2"&"Et passende område af kolonne D på sheet 2";0);1)
Sub Search() Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Ark1") Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Hans") Dim week1 As Range: Set week1 = ws1.Range("G2", ws1.Cells(ws1.Rows.Count, "G").End(xlUp)) Dim week2 As Range: Set week2 = ws2.Range("C2", ws2.Cells(ws2.Rows.Count, "C").End(xlUp)) Dim f As Range, s As Range
For Each s In week1 For Each f In week2 If InStr(s.Text, f.Text) <> 0 Then f.Offset(0, 5).Value = s.Offset(0, -2).Value f.Offset(0, 6).Value = s.Offset(0, -6).Value End If Next f Next s End Sub
Fandt denne på en side, som søgte lidt som jeg. Dog mangler jeg at tilføje, at den også søger på varenr - således at de også stemmer overens. Lige nu gør scriptet det fint i mit dummy excel, men i mit main excel - så hvis der står flere uger - får alle den samme pris som den sidste som har samme uge.
Så det den skal sikre er, at uge nr og varenr er et fælles match. Nu har jeg manuelt tilføjet "Hans" som arknavn, men her er det meningen at den kigger arkene igennem og læser fra "Ark1" og finder de rigtige post den vej igennem.
Håber der er én, som lige kan fikse scriptet :). PFT
Tusind tak for forslaget, det virker jo faktisk ret fint. Dog er ulempen bare, at der sagtens kan stå flere varenumre. Hvis der findes flere i den samme serie - så den kan sagtens se således ud: (varenr: 2300+2310+3320+3324)
Kan det bygges ind i det VBA script i #3 i stedet for en matrix? For du har ramt så godt med matrix, men VBA scriptet i #3 søger hele linien igennem. Så den er ligeglad med om der står varenr og uge f.eks.
Jeg ved ikke noget om VBA, så jeg kan ikke hjælpe dig med den del.
Men jeg skal lige forstå det med varenumrene. I dit eksempel står der i Ark1 "Grillhandsker (varenr. 123)". Og i arket Hans, står der grillhandsker i en celle og varenummer i en anden.
1) Er det udfra varenummer og ugenummer i arket Hans, at du vil finde de tilhørende priser og datoer? 2) Kan der i samme celle i Ark1 stå Grillhandsker med flere forskellige varenumre efterfølgende? Og i så tilfælde, hvilket varenummer skal vi så søge efter? 3) Står der varenummer altid i ark1 eller kan der godt bare stå "Grillhandsker" uden efterfølgende nummer?
2) Varenummeret som skal søges efter, står altid under selve kunden. I mit eksempel kolonne D, det skal blot søges efter i kolonne D i Ark1 også. Grunden til der kan stå flere varenumre, er hvis der er flere varer i samme serie. Det jeg har lavet er blot en dummy. :)
3) Der kan godt forkomme, at der mangler varenummer i Ark1. Men de bliver tilføjet så snart man finder ud af det.
Håber det giver mening.
I forhold til de matrix koder, hvad gør jeg når der kommer flere linier - skal jeg selv manuelt rette fra 12 til f.eks. 20 felter?
Det sidste først, ja du kan selv manuelt rette dit område til eksempelvis 20 linjer. Bare du ikke kigger i hele arket (D:D eksempelvis). Husk fortsat at holde CTRL + SHIFT nede inden du trykker ENTER.
Eneste problem lige nu for mig, er hvis der står uge 20-22 eller uge 20+21 - altså hvis der står flere uger, så finder den det ikke. Kan man fikse det, ligesom med det andet du har lavet ved varenr?
Kan man få den til at tage en celle i stedet for jeg manuelt skal rette Ark navnet til? Så i stedet for Hans så denne: H10 - som på dit excel? Har prøvet at rette Hans til H10, men så kommer den frem med "Opdater værdier: H10"?
Gerne hvor den kun tager det første ord før evt. mellemrum Så ledes Hans Hansen bliver til Hans - Hans Henrik Hansen, også bliver Hans.
Du kan godt udskifte arknavnet med en celle, således for prisen i celle H2 hvor du vil referere til celle H10: =INDEX('Ark1'!$E$2:$E$12;MATCH([b]H10[\b]&Hans!D2&Hans!C2;'Ark1'!$C$2:$C$12&IF(SEARCH(D2;'Ark1'!$D$2:$D$12;1)>0;Hans!D2;)&IF(SEARCH(C2;'Ark1'!$G$2:$G$12;1)>0;Hans!C2;)))
Og hvis der står et fuldt navn, så erstat H10 i ovenstående med LEFT(H10;SEARCH(" ";H10;1)-1)
Denne istedet: =INDEX('Ark1'!$E$2:$E$12;MATCH(H10&Hans!D2&Hans!C2;'Ark1'!$C$2:$C$12&IF(SEARCH(D2;'Ark1'!$D$2:$D$12;1)>0;Hans!D2;)&IF(SEARCH(C2;'Ark1'!$G$2:$G$12;1)>0;Hans!C2;)))
Har endda også forsøgt at formatere cellerne både som standard og tekst. Intet virker, kun noget af det. Og $E$2:$E$19 passer også med feltet, sammen med C og G kolonnen.
Tror måske jeg har fundet ud af fejlen. Det er hvis flere har købt den samme vare, altså handsker (123) uge 3 Hvis der så står handsker (123) uge 5, så skriver den ved uge 5 og ikke ved uge 3 i matrix formlen.
Det selvom, det er to forskellige kunder. Så den tjekker ikke umiddelbart om det er Hans eller Jørgen.
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.