20. august 2019 - 19:55Der er
21 kommentarer og 2 løsninger
Sammenlign kolonner og find manglende værdi (vba)
Hej derude,
Jeg har en Excel fil som indeholder 4 ark. I ark 2 har kolonne AE en masse rækker med tal. Det samme har ark3 i kolonne AE. Jeg vil gerne, at de tal som ikke findes i ark2 kolonne AE, men som findes i ark3 kolonne AE bliver overført til ark 4. Den skal ikke kun overføre de enkelte tal, men hele rækken som tallet er i. Forestiller mig det skulle være sum en makro i et vba modul.
formel i #1 {=HVIS.FEJL(INDEKS(Sheet3!$AE$1:$AE$20;MINDSTE(HVIS(Sheet3!$AG$1:$AG$20=SAND;RÆKKE(Sheet2!$AE$1:$AE$20)-CELLE("row";Sheet2!$AE$1:$AE$20)+1);RÆKKER($1:1)));"")}
Hmm. Er ikke så stærk til formler. Men hvis f.eks tallet i ark3 celle AE1 ikke findes i ark2 kolonne AE(hele kolonnen). Så skal hele rækken fra ark3 A1:AE1 kopieres over i ark4 celle A1. Hvis der er flere værdier som som findes, så skal de bare indsættes i næste række i ark4. F.eks celle A2. Håber at i forstår, hvad jeg mener.
Set rng = Sheets("Ark3").Range("AE1:AE" & Sheets("Ark3").Range("AE" & Rows.Count).End(xlUp).Row)
Application.ScreenUpdating = False
For Each rk In rng If Application.CountIf _ (Sheets("Ark2").Range(("AE1"), Sheets("Ark2").Range("AE1").End(xlDown)), _ Sheets("Ark3").Range("AE" & rk)) = 0 Then Sheets("Ark3").Rows(rk).Copy _ Destination:=Worksheets("Ark4").Range("A" & Worksheets("Ark4").Range("AE" & Rows.Count).End(xlUp).Row + 1) End If Next rk
Det er fordi formlerne i kolonne A:AD i Sheet4 ikke er kopieret længere ned end til række 12. Vælg A12:AD12 og træk i fyldhåndtaget i AD12 (lille firkant i nederste højre hjørne) så langt ned som nødvendigt. Bemærk også at formlerne i Sheet2 og Sheet3 (+ Sheet4, kolonne AE) kun er kopieret ned til række 20. Kopier selv længere ned i alle ark om nødvendigt (også hjælpekolonne AG i Sheet3).
Set rng = Sheets("Ark3").Range("AE1:AE" & Sheets("Ark3").Range("AE" & Rows.Count).End(xlUp).Row)
Application.ScreenUpdating = False
rkNr = 1
For Each rk In rng If Application.CountIf _ (Sheets("Ark2").Range(("AE1"), Sheets("Ark2").Range("AE1").End(xlDown)), _ Sheets("Ark3").Range("AE" & rkNr)) = 0 Then Sheets("Ark3").Rows(rkNr).Copy _ Destination:=Worksheets("Ark4").Range("A" & Worksheets("Ark4").Range("AE" & Rows.Count).End(xlUp).Row + 1) End If
Hej Morten, Nu tager den også rækkerne under den række i ark 3, som den overfører. Altså hvis der er 10 rækker og den skal overføre række 6 kun. Så overfører den fra række 6 og ned.
Hej xl, Det ark som du har lavet virker helt vild godt. Men kan jeg lokke dig til ændre fra AE til AG, da jeg lige har en ændring, hvor jeg lige skal have 2 kolonner mere imellem? Har prøvet, om jeg selv kunne rette i dine formler, men det virker ikke for mig. Tror, at det har noget at gøre med din hjælpekolonne. Men det er super godt ellers.
Jeg har vist ikke fået nævnt at formlerne i Sheet4 og i Sheet3 kolonne AG er matrixformler. Matrixformler er specielle derved at i stedet for bare at trykke Enter ved afslutning af en formel skal du her holde Ctrl og Shift nede før tryk på Enter. Derved vil Excel automatisk sætte krøllede parenteser {} omkring formlen. Forsøg ikke at indtaste disse parenteser manuelt, det vil bare føre til, at Excel opfatter det som tekst og ikke som en formel. Når du har indtastet én matrixformel korrekt kan den kopieres til andre celler på normal måde. Hvis du retter i en matrixformel skal du igen afslutte indtastningen ved at holde Ctrl og Shift nede før tryk på Enter.
'Gennemløb på Ark3 af cellerne AE1:AE10 med start i række 1 rkNr = 1 For Each rk In Sheets("Ark3").Range("AE1:AE10") 'Tæller hvor mange der er på Ark2 i cellerne AE1:AE100, = 0 så If Application.CountIf _ (Sheets("Ark2").Range("AE1:AE100"), Sheets("Ark3").Range("AE" & rkNr)) = 0 Then 'Kopieres rækken, og indsættes på Ark4 Sheets("Ark3").Rows(rkNr).Copy _ Destination:=Worksheets("Ark4").Range("A" & Worksheets("Ark4").Range("AE" & Rows.Count).End(xlUp).Row + 1) 'Finde sidste udfyldte celle på Ark4 i kolonne AE + 1 End If 'Række tillægges 1 rkNr = rkNr + 1 Next rk
Tak for det Morten. Du har reddet min r.. en del efterhånden. Bruger din løsning, da jeg har brug for, at tallene ikke ændrer sig ved beregning. Ville egentlig gerne markere begge som løsning, da jeg også er begyndt at bruge din @xl, men bare til et andet formål. Og har iøvrigt styr på "tuborg kapsler" i Matrixformler. :-) 1000 tak til jer begge 2. God weekend om hjørnet.
Efter at have brugt en del kræfter på det her havde jeg i det mindste håbet at du ville fortælle, hvorfor du ikke kan bruge mit forslag. Det er næsten noget af det værste når man har gjort en indsats og så ender med ikke at ane, hvad du ser som problemet. Indsatsen føles lidt som skønne spildte kræfter.
Hvad mener du med, at du har brug for, at tallene ikke ændrer sig ved beregning? Jeg er ikke tankelæser.
Hej xl, Jamen, jeg kan godt bruge dit forslag. Det har løst en tidligere problemstilling og jeg har netop fået det sat ind i et andet ark. Grunden til, at jeg har problemer med dit forslag i første sammenhæng, er at jeg har brug for, at låse mine output. Ark2 er dynamisk, hvilket vil ændre mine overførsler fra ark3 til ark4, hver gang ark2 ændrer sig. Jeg bruger det i en lagerstyring, hvor nogle medarbejdere skal rapportere ind på bestemte tidspunkter. Men vil gerne, at mappen kører automatisk på et PC, så den selv rapporterer ind når dagen er omme. Det kunne jeg også få til, at fungere med din løsning med hjælp fra lidt makroer. Men på Mortens løsning, er det ikke nødvendigt. Jeg skal til gengæld også have en live status over afsendte varer og det har jeg gjort manuelt hver dag Med din løsning åbner folk bare mappen og vupti. Så jeg er vildt glad for din løsning og har nu slået 2 fluer med ét smæk. Jeg har derfor også markeret begge forslag som løsning. Så jeg er rigtig glad for jeres hjælp.
Grunden til, at jeg har problemer med dit forslag i første sammenhæng, er at jeg har brug for, at låse mine output. Ark2 er dynamisk, hvilket vil ændre mine overførsler fra ark3 til ark4, hver gang ark2 ændrer sig.
Jeg går ud fra du mener Sheet3 i den fil jeg uploadede i post #7. Hvis jeg har ret i det, så er det da bare at markere A1:AD20, trykke Ctrl C, højreklikke, Indsæt Speciel, Værdier og OK. Jeg havde bare brugt funktionen SLUMPMELLEM/RANDBETWEEN som en nem måde at generere forskellige talværdier på i et stort område, så du havde noget at teste på.Jeg havde ikke forestillet mig at du skulle bruge data i Sheet3 til andet end at teste formlernes anvendelighed. Jeg gik som en selvfølge ud fra, at du i den egen fil havde dine egne faste data i det der svarer til mit Sheet3.
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.