Avatar billede triple-x Nybegynder
08. juni 2009 - 16:33 Der er 14 kommentarer og
1 løsning

Sammenkædning af 2 excel dokumenter

Hej Eksperter

Jeg har et problem.

Jeg har 2 excel ark.

Det ene har indeholder 10.000 varelinier i 2 kolonner

1 med et varenummer og en med vægt.

Så har jeg et andet excel ark

Dette indeholder 40.000 varelinier med de 2 samme kolonner.

Jeg skal på en eller anden vis matche de 2 dokumenter  sådan at jeg får opdateret vægt kolonnen i det dokument med 10.000 varelinier uden at få de 30.000 varerlinier med over som ikke figurerer i dokumentet med de 10.000 varelinier.

Jeg håber det er forståeligt.

På forhånd mange tak.
Avatar billede excelent Ekspert
08. juni 2009 - 19:15 #1
'Ret alle A til kolonne hvor varenumre er

Sub Opdater()

Set sh1 = Sheets("Ark1") ' ark med 10.000 - ret til aktuel navn
Set sh2 = Sheets("Ark2") ' ark med 40.000 - ret til aktuel navn

sh1.Activate
rk1 = sh1.Cells(65500, "A").End(xlUp).Row
rk2 = sh2.Cells(65500, "A").End(xlUp).Row

For Each c In Range("A2:A" & rk1)
If Application.WorksheetFunction.CountIf(sh2.Range("A2:A" & rk2), c) Then
c.Offset(0, 1) = sh2.Range("A2:A" & rk2).Find(c, LookIn:=xlValues).Offset(0, 1)
End If
Next

End Sub
Avatar billede triple-x Nybegynder
08. juni 2009 - 19:30 #2
Hej Excelent

Mange tak for din hjælp. Desværre må jeg indrømme det blev lidt for teknisk. Jeg håber derfor du kan hjælpe mig lidt mere på vej.

Evt vil at knytte en kommentar til de forskellige linier kode så jer bedre forstår hvad den gør.

Jeg håber ikke det er for meget for langt, og det er ikke noget der haster, så gør det endelig når du har god tid.

På forhånd mange tak.
Avatar billede excelent Ekspert
08. juni 2009 - 19:35 #3
Sub Opdater()

Set sh1 = Sheets("Ark1") ' ark med 10.000 - ret til aktuel navn
Set sh2 = Sheets("Ark2") ' ark med 40.000 - ret til aktuel navn

sh1.Activate
rk1 = sh1.Cells(65500, "A").End(xlUp).Row ' finder sidste række med data
rk2 = sh2.Cells(65500, "A").End(xlUp).Row ' finder sidste række med data

For Each c In Range("A2:A" & rk1) ' løkke gennemløber de 10000 varenumre
If Application.WorksheetFunction.CountIf(sh2.Range("A2:A" & rk2), c) Then ' test om den findes i sh2
c.Offset(0, 1) = sh2.Range("A2:A" & rk2).Find(c, LookIn:=xlValues).Offset(0, 1) ' hvis ja hent vægt
End If
Next

End Sub

Er du stadig i tvivl, så oplys arknavne
samt kolonne navne og evt. i hvilken række varenr starter
Avatar billede excelent Ekspert
08. juni 2009 - 19:39 #4
vent lige med at køre
Avatar billede excelent Ekspert
08. juni 2009 - 19:40 #5
vis lige et eks på varenummer
Avatar billede excelent Ekspert
08. juni 2009 - 19:47 #6
Har lige rettet lidt i koden prøv denne :

Sub Opdater()

Set sh1 = Sheets("Ark1") ' ark med 10.000 - ret til aktuel navn
Set sh2 = Sheets("Ark2") ' ark med 40.000 - ret til aktuel navn

sh1.Activate
rk1 = sh1.Cells(65500, "A").End(xlUp).Row
rk2 = sh2.Cells(65500, "A").End(xlUp).Row

For Each c In Range("A2:A" & rk1)
If Application.WorksheetFunction.CountIf(sh2.Range("A2:A" & rk2), c) Then
c.Offset(0, 1) = sh2.Range("A2:A" & rk2).Find(c, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1)
End If
Next

End Sub
Avatar billede triple-x Nybegynder
08. juni 2009 - 20:14 #7
Jeg prøver lige at forklare lidt om baggrunden for det jeg gerne vil lave.

Vi har idag 10.000 varenumre lagt op et sted. Samtidig har vi de samme 10.000 varenumre plus 30.000 mere i vores ERP system.

Nu er det sådan at de 10.000 varenumre blandt andet skal have opdateret vægten. arket med de 40.000 varenumre har den korrekte vægt.

Ark1 med 10.000 varenumre kan vi kalde shop
Ark2 med 40.000 varenumre kan vi kalde erp

Arkene er fuldstændig identisk sat op.

A1 hedder Varenummer B1 hedder vaegt
A2 hedder 9003245 B2 hedder 0,54
A3 hedder 5443245 B3 hedder 1,43

Und so weiter.

Der er intet andet i arkene end disse data.

Den kode du har sat ind hvor skal denne placeres? Beklager mine dumme spørgsmål :)
Avatar billede excelent Ekspert
08. juni 2009 - 20:28 #8
retter først lige koden til med dine arknavne osv. øjeblik...
Avatar billede excelent Ekspert
08. juni 2009 - 20:36 #9
Kopier følgende kode
Tilbage i projektmappen taster du ALT+F11
I menuen Insert vælger du Module
Paste koden i vindue til højre

Tilbage i projektmappen taster du ALT+F8
Marker linie med teksten Opdater og klik på Afspil


Sub Opdater()

Set sh1 = Sheets("shop") ' ark med 10.000 - ret til aktuel navn
Set sh2 = Sheets("erp") ' ark med 40.000 - ret til aktuel navn

sh1.Activate
rk1 = sh1.Cells(65500, "A").End(xlUp).Row
rk2 = sh2.Cells(65500, "A").End(xlUp).Row

For Each c In Range("A2:A" & rk1)
If Application.WorksheetFunction.CountIf(sh2.Range("A2:A" & rk2), c) Then
c.Offset(0, 1) = sh2.Range("A2:A" & rk2).Find(c, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1)
End If
Next

End Sub
Avatar billede triple-x Nybegynder
08. juni 2009 - 20:55 #10
Hej igen Excelent

Det driller lidt.

det jeg har gjort er at oprette et excel ark (xlsx)

I denne har jeg 3 ark/faneblade

1 = Ark1
2 = shop
3 = erp

I Ark1 har jeg trykket F11, valgt module og indsat din kode.
I shop har jeg indsat 10 varenumre med vægt
i erp har jeg indsat 30 varenumre med vægt hvor 10 af dem er identiske med shop arket, men en anden vægt.

Jeg står nu igen tilbage i Ark1 (har gemt) og vælger F8, når jeg så klikker afspil siger den: Run-time error 9
Avatar billede excelent Ekspert
08. juni 2009 - 21:02 #11
Prøv lige at sende filen til pm@madsen.tdcadsl.dk
Jeg kører med Excel 2003 måske det er årsagen
Avatar billede triple-x Nybegynder
08. juni 2009 - 21:07 #12
Nej det var ikke dig der havde lavet en fejl. Men mig der var en torsk.

Det virker nu, tusind tak for din yderst hurtige og venlige hjælp, jeg krediterer meget gerne med at par flasker god rødvin  hvis det ønskes.

Du må have en fortsat god aften. Læg et svar så du kan få dine velfortjente point.
Avatar billede excelent Ekspert
08. juni 2009 - 21:16 #13
Nå ok well shit happens
men jeg tager til takke med pointene :-)

velbekom
Avatar billede excelent Ekspert
08. juni 2009 - 21:17 #14
Sådan af ren nysgerrighed, hvor længe er den om at køre koden ?
Avatar billede triple-x Nybegynder
08. juni 2009 - 21:21 #15
Jeg har ikke de store filer hos mig. Så jeg har ikke testet det på så mange endnu.

Men når jeg gør, så skal jeg gerne melde tilbage hvor hurtigt den klarer det.

De 30/10 jeg testede gik hurtigere end jeg kunne nå at blinke.

I løbet af imorgen formiddag for jeg testet på de store filer.

PS. når du nu er sådan en haj til excel, tager du også betalingsopgaver ind? Grunden til jeg spørger er at jeg i fremtiden muligvis skal have lavet lidt større ting i excel, ud fra samme koncept som dette spørgsmål, og så var det oplagt at hyre dig til opgaven.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester