Excel sheets vergelijken

Pagina: 1
Acties:
  • 425 views sinds 30-01-2008
  • Reageer

  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
Ik weet niet of het mogelijk is maar ik zou graag 2 excelsheets als het ware over elkaar heen leggen en kijken wat er gewijzigd is. Ik moet anders namelijk wekenlijks of maandeljks 3000 items nakijken end at is wat veel werk :)

Ik vraag me af of Excel het zelf kan (ik dacht namelijk van niet) en of er anders programmatuur voor is ?

Jij bent misschien belangrijk, maar ik ben aardig ;)


Verwijderd

Kun je relatief simpel een stukje vba voor inzetten.

Bepaal het bereik, laat vba door dat bereik heen gaan, vergelijk waarde van actieve cel met waarde uit cel 2e blad en geef ander kleurtje als het verschillend is.

Edit: Zie hieronder, is natuurlijk nog simpeler.

[ Voor 11% gewijzigd door Verwijderd op 25-09-2003 11:30 ]


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

Als het alleen om getallen gaat zou je zoiets kunnen doen: Maak een derde sheet met A1=Blad1!A1-Blad2!A1, B1=Blad1!B1-Blad2!B1.
Als het ook om tekst gaat kun je het ook met een derde sheet kunnen oplossen; je moet dan vergelijken d.m.v. =ALS(Blad1!A2=Blad2!A2;;Blad2!A2)

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
He dat is leuk :) ik ga het proberen vandaag ! Thnx !!

FizGiz: Zou jij nog iets meer info hierover kunnen geven ik wil dat in het 2e stadium ook wel gaan proberen denk ik :)

Beide alvast bedankt !

Owja, het gaat om text en getallen, nu zal het vaker zijn dat er getallen zullen wijzigen dan text. Maar wordt er ook gecontroleerd of er items in het ene sheet staan en in de andere nog niet ??

[ Voor 33% gewijzigd door BacardiBreezer op 25-09-2003 11:33 ]

Jij bent misschien belangrijk, maar ik ben aardig ;)


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

:?
BacardiBreezer schreef op 25 September 2003 @ 11:32:
Maar wordt er ook gecontroleerd of er items in het ene sheet staan en in de andere nog niet ??
=ALS(Blad1!A2=Blad2!A2;;Blad2!A2)
Je snapt toch wel wat daar staat? Zo niet, dan moet je in Excel help ALS maar eens opzoeken.

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


Verwijderd

Hieronder een aanzetje, het is erg bot, maar zal wel werken. Geef in Main de worksheets mee die je wilt vergelijken (de eerste 2 parameters) en de derde is de worksheet waar je de verschillen in wilt terugzien. Excel zal nu de range doorlopen zoals in sub SheetDiff aangegeven (moet je misschien vergroten afhankelijk van het gebruikte aantal kolommen en rijen, NB deze loops vreten tijd!!!). Sheet3 zal nu een overzicht geven met voor elke cell waarin Sheet1 en Sheet2 verschillen een comment met daarin de verschillen.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Sub SheetDiff(inSheet1 As Worksheet, inSheet2 As Worksheet, outSheet As Worksheet)
Dim i As Integer
Dim j As Long

For i = 1 To 10 'Each column Max=256
    For j = 1 To 10 'Each row Max=65536
        If inSheet1.Cells(j, i).Value <> inSheet2.Cells(j, i).Value Then
            outSheet.Cells(j, i).AddComment
            outSheet.Cells(j, i).Comment.Visible = False
            outSheet.Cells(j, i).Comment.Text Text:="Sh1=" & inSheet1.Cells(j, i).Value & " || Sh2=" & inSheet2.Cells(j, i).Value
            outSheet.Cells(j, i).Interior.ColorIndex = 10
        Else
            outSheet.Cells(j, i).Value = inSheet1.Cells(j, i).Value
        End If
    Next j
Next i

End Sub

Public Sub Main()
    SheetDiff ActiveWorkbook.Sheets(1), ActiveWorkbook.Sheets(2), ActiveWorkbook.Sheets(3)
End Sub

  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
KingRichard schreef op 25 september 2003 @ 11:48:
:?
[...]
=ALS(Blad1!A2=Blad2!A2;;Blad2!A2)
Je snapt toch wel wat daar staat? Zo niet, dan moet je in Excel help ALS maar eens opzoeken.
Jawel, ik bedoelde het op een andere manier dan jij begrijpt denk ik, is al opgelost.

Thnx voor de CODE :D

Jij bent misschien belangrijk, maar ik ben aardig ;)


  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
Ik begrijp het deels (ben geen VB man) mar hoe doe ik dat in main ongeveer ??

Jij bent misschien belangrijk, maar ik ben aardig ;)


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

:? Bovenstaande VBA-code doet bijna hetzelfde als mijn oplossing. Alleen is mijn oplossing real-time (en makkelijker). :9

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
KingRichard schreef op 25 September 2003 @ 15:44:
:? Bovenstaande VBA-code doet bijna hetzelfde als mijn oplossing. Alleen is mijn oplossing real-time (en makkelijker). :9
Jouw oplossing geeft fouten :(

Jij bent misschien belangrijk, maar ik ben aardig ;)


Verwijderd

BacardiBreezer schreef op 25 september 2003 @ 14:24:
Ik begrijp het deels (ben geen VB man) mar hoe doe ik dat in main ongeveer ??
Start XL -> ALT-F11 (je komt in VBA)
Ga in de project explorer op het project staan waarin je sheets zitten
Klik rechts -> Insert -> Module

Paste eerder geposte code in deze module, wil je de sheets bij naam kunnen aanroepen wijzig bovenstaande main dan in onderstaande en voeg ook onderstaande functie toe. Verander de namen in de benodigde sheetnamen en blijf in Main staan druk nu op de RUN Macro button (of druk F5)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Sub Main()
    Dim Name1 As String
    Dim Name2 As String
    Dim Name3 As String
    
    Name1 = "Naam van sheet1"
    Name2 = "Naam van sheet2"
    Name3 = "Naam van sheet3"
    
    SheetDiff Name2Sheet(Name1), Name2Sheet(Name2), Name2Sheet(Name3)
End Sub

Private Function Name2Sheet(inName As String) As Worksheet
    Dim i As Integer
    Dim sheetorchart As Variant 'Workbook returns Sheet or Chart on Sheets (don't ask...)
    
    Set Name2Sheet = Nothing
    
    For i = 1 To ActiveWorkbook.Sheets.Count
        Set sheetorchart = ActiveWorkbook.Sheets.Item(i)
        If sheetorchart.Name = inName Then
            Set Name2Sheet = sheetorchart
            Exit For
        End If
    Next i
End Function
KingRichard schreef op 25 September 2003 @ 15:44:
:? Bovenstaande VBA-code doet bijna hetzelfde als mijn oplossing. Alleen is mijn oplossing real-time (en makkelijker). :9
Dat realtime ben ik wel met je eens :) Alleen geeft jouw code enkel de cell van het 2e blad terug als er een verschil is in cel tussen blad1 en blad2 :X Verder weet ik eigenlijk niet of die code van jou ook werkt bij cellen van het type string, mogelijk werkt het alleen met numbers, maar dat weet ik niet zeker (ff proberen zou ik zeggen)...

  • Chopper_Rob
  • Registratie: November 2001
  • Laatst online: 01-05-2025
BacardiBreezer schreef op 25 september 2003 @ 18:35:
[...]


Jouw oplossing geeft fouten :(
Waarom zou die fouten geven?

https://drinkwaterpunten.nl


  • Jappo112
  • Registratie: Juni 2003
  • Laatst online: 24-08 00:55
Office 2003 kan documenten en cellen comparen. Natuurlijk heb ik deze nog niet omdat hij niet in Nederland te koop is >:)....

  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

BacardiBreezer schreef op 25 September 2003 @ 18:35:
[...]
Jouw oplossing geeft fouten :(
Verwijderd schreef op 26 September 2003 @ 10:07:
[...]
Alleen geeft jouw code enkel de cell van het 2e blad terug als er een verschil is in cel tussen blad1 en blad2 :X Verder weet ik eigenlijk niet of die code van jou ook werkt bij cellen van het type string, mogelijk werkt het alleen met numbers, maar dat weet ik niet zeker (ff proberen zou ik zeggen)...
Mijn oplossing is niet kant en klaar! :(
TS mag zelf ook wat doen! Met ALS kun je de cellen met elkaar vergelijken, wat er vervolgens gebeurt moet 'ie zelf invullen. Als 'ie de verschillen tussen twee waardes wil hebben kan dat ook, bijvoorbeeld. En aangezien TS geen VBA-nerd is (zoals wij B) ), lijkt een formule-benadering mij de goede weg. Bij nader inzien, het lijkt me sowieso de goede weg, maar dat is mijn mening.
Formule uitbreiden en op het hele sheet plakken dus, zou ik zeggen. En als er iets fout gaat, ben ik erg benieuwd wat dat dan is.

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 26-08 18:43

hufkes

nee, daar staat niet hufter!

denk ik nu te simpel of denken jullie te moeilijk... je kunt toch ook gewoon de optie "wijzigingen markeren" aanzetten? Die vind je onder het extra menu, in ieder geval al in versie van off2000 die ik hier voor me heb. Dan vink je gewoon zelf aan dat hij ze moet markeren en dan krijg je keurig een blauw hokkie om de veranderde cel met uitleg als wie wanneer en van wat in wat veranderd is.

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P


Verwijderd

Maar dat is wel heel wat anders dan vergelijken.

  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 26-08 18:43

hufkes

nee, daar staat niet hufter!

Verwijderd schreef op 29 september 2003 @ 11:20:
Maar dat is wel heel wat anders dan vergelijken.
BacardiBreezer schreef op 25 september 2003 @ 10:45:
[..] 2 excelsheets als het ware over elkaar heen leggen en kijken wat er gewijzigd is.
:? hij vraagt toch om wijzigingen? dat is dus precies waar die functie voor bedoeld is volgens mij...
Ik vraag me af of Excel het zelf kan (ik dacht namelijk van niet) en of er anders programmatuur voor is ?
antwoord is dus ja volgens mij kun je gewoon de standaard functie van excel gebruiken ja...

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P


  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
Zo ik wil jullie vast heel hartelijk bedanken want ik ben er ana begonnen :)

Ik zie dat het wel werken gaat maar in mijn 3e sheet krijg ik groene blokjes te zien en zodra ik daar op ga staan die ik het comment, dus het werkt al enigzins :)

Nu loopt het script alleen vast op deze regel:

outSheet.Cells(j, i).AddComment

De errorcode die ik krijg is 1004......

Hoe kan ik dit oplossen ?

Jij bent misschien belangrijk, maar ik ben aardig ;)


  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
Zo ik ben hier maar weer eens aan begonnen :) nieuw jaar nieuwe kansen :p

Waarom zou het script zoals je in de post hierboven ziet staan niet helemaal kunnen werken ?

Jij bent misschien belangrijk, maar ik ben aardig ;)


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

  1. Als je de hele draad opnieuw gelezen hebt, zul je gemerkt hebben dat ik mij in september nogal ergerde aan een aantal reacties. Als ik je probeer te helpen en ik heb een vraag, dan krijg daar graag antwoord op.
  2. Ik blijf bij mijn mening dat de VBA-oplossing een minder goede keuze is dan een eenvoudige formulebenadering, omdat je weinig ervaring met VBA hebt én omdat het sowieso niet de beste oplossing is. VBA dien je te gebruiken if all else fails.
  3. Error 1004: application-defined or object-defined error is een te vage foutmelding om zonder meer informatie een oorzaak voor te benoemen. Dus:
Welke code heb je gebruikt (er staan twee voorbeelden hierboven) en bij welke regel gaat het mis?

[ Voor 2% gewijzigd door KingRichard op 03-01-2004 03:11 . Reden: typefoutjes... ]

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • BacardiBreezer
  • Registratie: September 2003
  • Laatst online: 19-06-2005

BacardiBreezer

Breezing Bacardi ?

Topicstarter
KingRichard schreef op 03 januari 2004 @ 03:07:
  1. Als je de hele draad opnieuw gelezen hebt, zul je gemerkt hebben dat ik mij in september nogal ergerde aan een aantal reacties. Als ik je probeer te helpen en ik heb een vraag, dan krijg daar graag antwoord op.
  2. Ik blijf bij mijn mening dat de VBA-oplossing een minder goede keuze is dan een eenvoudige formulebenadering, omdat je weinig ervaring met VBA hebt én omdat het sowieso niet de beste oplossing is. VBA dien je te gebruiken if all else fails.
  3. Error 1004: application-defined or object-defined error is een te vage foutmelding om zonder meer informatie een oorzaak voor te benoemen. Dus:
Welke code heb je gebruikt (er staan twee voorbeelden hierboven) en bij welke regel gaat het mis?
Dan wil ik jou eens vragen waarom jij zo snel aangebrand bent. Tis een forum zeg......

Jij bent misschien belangrijk, maar ik ben aardig ;)


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

BacardiBreezer schreef op 03 januari 2004 @ 03:22:
Dan wil ik jou eens vragen waarom jij zo snel aangebrand bent. Tis een forum zeg......
Ten eerste: iets minder reageren richting de mensen die je al een hele tijd proberen te helpen mag ook wel :*
Ten tweede: geef anders ook even antwoord op z'n vraag voor meer info, zie zijn punt 1 8)7
(Ten derde: nog de beste wensen :* )

Daarnaast wordt in September al een heel ged werkende (bijna-af) oplossing gegeven: KingRichard in "Excel sheets vergelijken"
Eventueel nog een conditional formatting eroverheen, copy, ctrl-a, paste en klaar :Y)

Maar als je toch VBA wilt gebruiken (ik deel eigenlijk de mening van KingRichard: je wilt dit voor je eigen bestwil niet zomaar met VBA doen als je er geen ervaring mee hebt, blind copypasten werkt niet zoals je al merkt. Maar natuurlijk kan je best de afgelopen maanden de help en diverse tutorials hebben doorgespit :P )

Anyhow, geen idee welke versie van XL jij gebruikt maar hier werkt het perfect. Kijk even in je online help of die AddComment functie wel wordt ondersteund (zonder parameters).

[ Voor 9% gewijzigd door F_J_K op 03-01-2004 10:39 . Reden: toch maar een puntje drie, anders lijk ik aangebrand 8)7 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)

Pagina: 1