• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Rij verwijderen na nazicht dubbel op bepaalde rij range

Status
Niet open voor verdere reacties.

snookie

Gebruiker
Lid geworden
16 apr 2001
Berichten
123
Beste,

Graag had ik een macro (of iets anders bekomen) om onderstaande te vergemakkelijken.
Heb een lijst te onderhouden die op wekelijkse basis aangvuld word met vers geimporteerde data die ik onderaan de lijst plak.
De nieuwe data zet ik bewust in het rood om zo al een onderscheid te kunnen maken.
Dan sorteer ik op datum begin. En wis handmatig de dubbelen.
Naast de rijen word er extra data toegevoegd en deze rijen mogen absolute niet gewist worden.
Doel is eigenlijk dat als een range van een rij overeenkomt met een nieuw bijgekomen rij deze laatste verwijderd dient te worden.
Bestandje in bijlage ter verduidelijking.
Alvast bedankt op voorhand voor de feedback.:cool:
 

Bijlagen

In de bijlage een mogelijke oplossing.
Toets Ctrl-a om de macro uit te voeren.
Bij een erg groot aantal rijen kan dat wel even duren.
Voordat anderen er een opmerking over maken: als het aantal rijen meer dan 32767 bedraagt, dan moet je de lr-variabele bij de dimopdracht declareren als long. Blijft het aantal rijen beneden 32767, dan handhaaf je best de integer, omdat die veel minder geheugenruimte inneemt dan een long-variabele.
 
Hey zapatr,

Alvast bedankt voor uw deskundige moeite en oplossing, thanks :thumb:

Nu ga ik deze week als er nieuwe data op komst is dit uitproberen (met een duplicaat)
Echter kan ik deze macro zomaar integreren in een andere bestand/sheet?

Ik heb wel notie' s van programmeren en vermoed dat ik onderstaand dien in acht te nemen, corrigeer mij indien nodig aub.
Alvast bedankt.

Sub macro1()
Dim a As Integer, k As Integer, lr As Integer
'Deze macro is geschreven door Zapatr
With Sheets(1)
lr = .[b5].End(xlDown).Row b5 = de startkolom
For x = 5 To lr - 1 5= is het aantal te controleren kolom in eenzelfde rij (te vermeerderen indien meer kolommen)
For y = x + 1 To lr
a = 0
For k = 2 To 6 is een loop maar vanwaar van 2 To 6?
If .Cells(y, k).Value = .Cells(x, k).Value Then a = a + 1
Next k
If a = 5 Then .Rows(y).Delete 5 aantal kolommen te vermeerderen indien meer kolommen
Next y, x
End With
End Sub
 
Echter kan ik deze macro zomaar integreren in een andere bestand/sheet?
lr = .[b5].End(xlDown).Row b5 = de startkolom
Ja, die macro kun je integreren in een ander bestand, mits de indeling van dat bestand hetzelfde is als het bestand dat je hier op het forum plaatste. Bovenstaande opdracht bepaalt tot hoever (tot welke rij) de bovenste tabel loopt. Daarbij is er vanuitgegaan dat in die tabel alle cellen in de B-kolom gegevens bevatten.

For x = 5 To lr - 1 5= is het aantal te controleren kolom in eenzelfde rij (te vermeerderen indien meer kolommen)
Niet juist,die opdracht bepaalt welke rijen de macro moet doorlopen, rij 5 is de startrij.

For k = 2 To 6 is een loop maar vanwaar van 2 To 6?
Omdat in elke rij de kolommen 2 t/m 6 gecontroleerd moeten worden

If a = 5 Then .Rows(y).Delete 5 aantal kolommen te vermeerderen indien meer kolommen
Ja, als je het aantal cellen in een rij dat gelijk moet zijn aan het aantal cellen in een andere rij (om te bepalen of een rij verwijderd moet worden) wil vermeerderen. Dit uiteraard in combinatie met de opdracht hierboven.
Het antwoord op bovenstaande vragen kun je overigens eenvoudig vinden door de macro, op te delen in kleine stukjes (afzonderlijke macro's van maken) en die uit te voeren. Dat is bovendien heel erg leerzaam, want programmeren leer je vooral (net zoals bv. autorijden) door het zelf te doen.
 
Laatst bewerkt:
Oke beste zapatr,

Ik neem dit mee en probeer het deze week uit.
Laat het je nog weten of het gelukt is.
Nogmaals dank.

Dat is bovendien heel erg leerzaam, want programmeren leer je vooral (net zoals bv. autorijden) door het zelf te doen.

indien je wat goede links kent om van start te gaan, laat het maar weten aub. Als ik google zie ik de bomen niet meer door....
 
indien je wat goede links kent om van start te gaan, laat het maar weten aub.
Als ik google zie ik de bomen niet meer door....
De vba-helpfile van Excel is voor mij altijd al de grootste bron van informatie geweest. Bij bijna alle opdrachten wordt een voorbeeld gegeven van hoe je die moet gebruiken. Van zo maar willekeurig een aantal uren in die helpfile rond te neuzen, kun je heel veel bijleren. En vooral: zelf proberen, héél véél dingen zelf proberen, waarbij je in het begin 19 keer mislukt en de 20e keer een werkbare oplossing vindt.
Wellicht kunnen andere lezers van dit forum je andere ideeën aan de hand doen, want ik ben geen programmeur.
 
Laatst bewerkt:
Heb de macro kunnen integreren en aanpassen (meerdere koloms).
Heb de macro onder een button gestoken om de macro te starten (en lukt).
Echter na de eerste rij die hij verwijderd stop de macro met een foutmelding die gerelateerd is op een ander script in de worsheet / change.

Foutmelding is run-time error'13'
type mismatch

Heeft betrekking op onderstaande code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("O17:O1405")) Is Nothing Then
Select Case Target.Value
Case Is = "ja", "nee", "JA", "NEE"
Target.Offset(, 1).Value = Date

Case Is = ""
Target.Offset(, 1).Value = ""
End Select
End If
End Sub

Iemand een idee hoe op te lossen?
Kan het script tijdens de macro eventjes buiten spel gezet worden?
Ofwel met variabelen werken dat bv O1405 verminderd met 1 bij verwijderen van rij.
Het is voor mij nog iets te vroeg om scripts te beginnen nesten, kan iemand mij op weg helpen?
Of als er een rij weg is op laatste een nieuwe bijzetten?
Alvast bedankt op voorhand voor de feedback.
 
Laatst bewerkt:
Dat zal deze regel wel zijn, maa rdat kun je toch zien ?

Case Is = "ja", "nee", "JA", "NEE"
 
Case Is = "ja", "nee", "JA", "NEE"

Bedoeling is als er een ja of JA gezet wordt in een kolom er automatisch een datum geplaatst wordt en blijft (in ander kolom op zelfde rij).
BTW als ik handmatig een rij in de range wegdeed (dubbel) kreeg ik ook deze foutmelding per keer / per rij
 
als ik handmatig een rij in de range wegdeed (dubbel) kreeg ik ook deze foutmelding per keer / per rij
Dat verbaast me niet.
Hoe zou die code in Private sub... nou overweg kunnen met iets dat je handmatig in dat bereik gaat aanpassen....
 
Beste zapatr,

Een kleine toelichting, we dienen dit op te delen in een tweeluik.
Eerste is na import van nieuwe data de opkuis van de dubbels die nu perfect gaat met jouw script

Tweede is dat na de opkuis meerdere personen de ja of nee kunnen plaatsen en doel is om te weten wanneer die status geplaatst is. = automatisch datum kolom +1.

M.a.w. mijn werk bestaat er in om de data van een ander sheet te kopieeren en op te kuisen zodanig het bestand klaar staat om de extra data toe te voegen op dezelfde lijn.
Ook dien ik na het wissen de range in de code aan te passen ofwel rijen met paste special bij te plaatsen, dit om de opmaak te behouden.

'k weet het,niet simpel om uit te leggen, maar ik probeer.
Ondertussen zelf aan het neuzen, kan ik hier gebruik maken van een onderbrekingsmodus?
 
Laatst bewerkt:
Om uitvoering van Event-macro's tijdelijk te onderbreken
Bovenaan je macro
Code:
Application.EnableEvents=False
Onderaan terug inschakelen
Code:
Application.EnableEvents=True
 
Hey warm bakkertje, dat is de code die ik zocht en het werkt perfect, bedankt aan iedereen om tot deze oplossing te komen :thumb::thumb::thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan