Toon posts:

[Excel2003] Bepaalde range verwijderen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg elke week een prijslijst in txt formaat. Deze kan ik in ieder geval al inladen in excel en zo krijgen dat het er nu zo uit ziet

columA ColomB ColomC Colom D
art nr omschrijv netto prijs bruto prijs

echter het is onder verdeel in categorieen bv: fruit / groenten / vlees / vis

Dit staat in colomB waaronder dan de produkten van die categorie staan.

Nu de vraag. Ik heb niet alle categorieen nodig, en om de boel een beetje overzichtelijker te maken wil ik dus (bv) de fruit en groenten range verwijderen dmv een macro die bij het inladen van de nieuwe prijslijst deze gelijk verwijderd.

Vanzelfsprekend staan er elke week andere waardes (meer/minder produkten) in de cellen. (anders kon ik gewoon delete a1:a40 doen bv)

iemand ?

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
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
Sub weghalen()
Dim bovensterij As Integer
Dim ondersterij As Integer
Dim categorienaam As String
Dim cel As Range
Dim blad As Worksheet
Set blad = ActiveSheet
With blad
    Set cel = .Range("A1").Offset(.Range("A1").CurrentRegion.Rows.Count + 1, 0)
    Do While cel.Row > 1 'wordt twee als je een kopregel hebt.
        ondersterij = cel.Row
        Do While cel.Value <> ""
            Set cel = cel.Offset(-1, 0)
        Loop
        bovensterij = cel.Row
        categorienaam = cel.Offset(0, 1).Value
        'eventueel weggooien
        If Not (categorienaam = "Knollen" Or categorienaam = "Citroenen") Then
            .Rows(bovensterij & ":" & ondersterij).Delete
        End If
        If bovensterij = 1 Then End
        Set cel = .Cells(bovensterij - 1, 1)
    Loop
End With
End Sub

Alhier een voorzetje.
Als de cel in kolom A naast je categorie leeg is, zoekt deze macro die op en vergelijkt de categorie met wat 'ie moet laten staan (Knollen en citroenen in dezes)

Verwijderd

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Overzichtelijk()

Dim X As Integer
Dim Omschrijving As String
    
    
For X = 2 To 100                              'Begint bij regel 2 t/m regel 100
    Omschrijving = Cells(X, 2)                'Begint in Kolom B
    If Omschrijving = "Groenten" Or Omschrijving = "Fruit" Then
        Range(("A" & X), ("D" & Y)).Select    'Selecteert kolom A(iets) tot D(iets)
        Selection.Delete Shift:=xlUp          'Verwijderd de rij
    End If
Next X

End Sub

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Verwijderd schreef op woensdag 02 november 2005 @ 15:39:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Overzichtelijk()

Dim X As Integer
Dim Omschrijving As String
    
    
For X = 2 To 100                              'Begint bij regel 2 t/m regel 100
    Omschrijving = Cells(X, 2)                'Begint in Kolom B
    If Omschrijving = "Groenten" Or Omschrijving = "Fruit" Then
        Range(("A" & X), ("D" & Y)).Select    'Selecteert kolom A(iets) tot D(iets)
        Selection.Delete Shift:=xlUp          'Verwijderd de rij
    End If
Next X

End Sub
Ik begreep dat er in kolom B zo af en toe tussenkopjes staan en bij een "fout" tussenkopje alles tot de volgende verwijderd moet worden.
Als er op iedere foute regel in kolom B Groente staat werkt dit beter, behalve dat je de For Then beter kan omdraaien:
For X = 100 to 2 step -1
Want anders "vergeet" de macro de rij die op de plaats van een verwijderde komt.

Verwijderd

Onkl, you're good man!!!

Is dit misschien ook niet een idee voor hem?
Visual Basic:
1
2
3
4
5
6
7
Sub Overzicht()

    Columns("B:B").Select
    Selection.AutoFilter Field:=1, Criteria1:="=Groenten", Operator:=xlOr, _
        Criteria2:="=Fruit"
        
End Sub