• 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.

advanced filter - blanco lijnen

  • Onderwerp starter Onderwerp starter vovo
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

vovo

Gebruiker
Lid geworden
2 dec 2009
Berichten
98
Hallo beste excellers,

allereerst mijn beste wensen :cool:

En dan nu mijn vraagje :

Ik zou in de file "test eric" per klant (56...) enkel de totalen moeten kunnen uithalen met de code ALA en ZNP (cfr gele fluo) zonder de overige te tonen ! Heb al geprobeerd met advanced filter functie maar kom er niet uit :(

En dan nog extraatje, hoe kan je gemakkelijkst de blanco lijntjes uit een excel-file halen ??

Alvast bedankt voor jullie hulp !
 

Bijlagen

Heb gebruik gemaakt van een pivot table om je totalen uit te rekenen.

Blanco lijnen kan je met advanced filter (blanks) of asap utilities of met vba (code komt van.......... via dit forum of andere excel forums gevonden en bewaard).

Code:
Sub DeleteBlankRows(Optional WorksheetName As Variant)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteBlankRows
' This function will delete all blank rows on the worksheet
' named by WorksheetName. This will delete rows that are
' completely blank (every cell = vbNullString) or that have
' cells that contain only an apostrophe (special Text control
' character).
' The code will look at each cell that contains a formula,
' then look at the precedents of that formula, and will not
' delete rows that are a precedent to a formula. This will
' prevent deleting precedents of a formula where those
' precedents are in lower numbered rows than the formula
' (e.g., formula in A10 references A1:A5). If a formula
' references cell that are below (higher row number) the
' last used row (e.g, formula in A10 reference A20:A30 and
' last used row is A15), the refences in the formula will
' be changed due to the deletion of rows above the formula.
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim RefColl As Collection
Dim RowNum As Long
Dim Prec As Range
Dim Rng As Range
Dim DeleteRange As Range
Dim LastRow As Long
Dim FormulaCells As Range
Dim Test As Long
Dim WS As Worksheet
Dim PrecCell As Range

If IsMissing(WorksheetName) = True Then
    Set WS = ActiveSheet
Else
    On Error Resume Next
    Set WS = ActiveWorkbook.Worksheets(WorksheetName)
    If Err.Number <> 0 Then
        '''''''''''''''''''''''''''''''
        ' Invalid worksheet name.
        '''''''''''''''''''''''''''''''
        Exit Sub
    End If
End If
    

If Application.WorksheetFunction.CountA(WS.UsedRange.Cells) = 0 Then
    ''''''''''''''''''''''''''''''
    ' Worksheet is blank. Get Out.
    ''''''''''''''''''''''''''''''
    Exit Sub
End If

''''''''''''''''''''''''''''''''''''''
' Find the last used cell on the
' worksheet.
''''''''''''''''''''''''''''''''''''''
Set Rng = WS.Cells.Find(what:="*", after:=WS.Cells(WS.Rows.Count, WS.Columns.Count), lookat:=xlPart, _
    searchorder:=xlByColumns, searchdirection:=xlPrevious, MatchCase:=False)

LastRow = Rng.Row

Set RefColl = New Collection

'''''''''''''''''''''''''''''''''''''
' We go from bottom to top to keep
' the references intact, preventing
' #REF errors.
'''''''''''''''''''''''''''''''''''''
For RowNum = LastRow To 1 Step -1
    Set FormulaCells = Nothing
    If Application.WorksheetFunction.CountA(WS.Rows(RowNum)) = 0 Then
        ''''''''''''''''''''''''''''''''''''
        ' There are no non-blank cells in
        ' row R. See if R is in the RefColl
        ' reference Collection. If not,
        ' add row R to the DeleteRange.
        ''''''''''''''''''''''''''''''''''''
        On Error Resume Next
        Test = RefColl(CStr(RowNum))
        If Err.Number <> 0 Then
            ''''''''''''''''''''''''''
            ' R is not in the RefColl
            ' collection. Add it to
            ' the DeleteRange variable.
            ''''''''''''''''''''''''''
            If DeleteRange Is Nothing Then
                Set DeleteRange = WS.Rows(RowNum)
            Else
                Set DeleteRange = Application.Union(DeleteRange, WS.Rows(RowNum))
            End If
        Else
            ''''''''''''''''''''''''''
            ' R is in the collection.
            ' Do nothing.
            ''''''''''''''''''''''''''
        End If
        On Error GoTo 0
        Err.Clear
    Else
        '''''''''''''''''''''''''''''''''''''
        ' CountA > 0. Find the cells
        ' containing formula, and for
        ' each cell with a formula, find
        ' its precedents. Add the row number
        ' of each precedent to the RefColl
        ' collection.
        '''''''''''''''''''''''''''''''''''''
        If IsRowClear(RowNum:=RowNum) = True Then
            '''''''''''''''''''''''''''''''''
            ' Row contains nothing but blank
            ' cells or cells with only an
            ' apostrophe. Cells that contain
            ' only an apostrophe are counted
            ' by CountA, so we use IsRowClear
            ' to test for only apostrophes.
            ' Test if this row is in the
            ' RefColl collection. If it is
            ' not in the collection, add it
            ' to the DeleteRange.
            '''''''''''''''''''''''''''''''''
            On Error Resume Next
            Test = RefColl(CStr(RowNum))
            If Err.Number = 0 Then
                ''''''''''''''''''''''''''''''''''''''
                ' Row exists in RefColl. That means
                ' a formula is referencing this row.
                ' Do not delete the row.
                ''''''''''''''''''''''''''''''''''''''
            Else
                If DeleteRange Is Nothing Then
                    Set DeleteRange = WS.Rows(RowNum)
                Else
                    Set DeleteRange = Application.Union(DeleteRange, WS.Rows(RowNum))
                End If
            End If
        Else
            On Error Resume Next
            Set FormulaCells = Nothing
            Set FormulaCells = WS.Rows(RowNum).SpecialCells(xlCellTypeFormulas)
            On Error GoTo 0
            If FormulaCells Is Nothing Then
                '''''''''''''''''''''''''
                ' No formulas found. Do
                ' nothing.
                '''''''''''''''''''''''''
            Else
                '''''''''''''''''''''''''''''''''''''''''''''''''''
                ' Formulas found. Loop through the formula
                ' cells, and for each cell, find its precedents
                ' and add the row number of each precedent cell
                ' to the RefColl collection.
                '''''''''''''''''''''''''''''''''''''''''''''''''''
                On Error Resume Next
                For Each Rng In FormulaCells.Cells
                    For Each Prec In Rng.Precedents.Cells
                        RefColl.Add Item:=Prec.Row, key:=CStr(Prec.Row)
                    Next Prec
                Next Rng
                On Error GoTo 0
            End If
        End If
        
    End If
    
    '''''''''''''''''''''''''
    ' Go to the next row,
    ' moving upwards.
    '''''''''''''''''''''''''
Next RowNum


''''''''''''''''''''''''''''''''''''''''''
' If we have rows to delete, delete them.
''''''''''''''''''''''''''''''''''''''''''

If Not DeleteRange Is Nothing Then
    DeleteRange.EntireRow.Delete shift:=xlShiftUp
End If

End Sub

Function IsRowClear(RowNum As Long) As Boolean
''''''''''''''''''''''''''''''''''''''''''''''''''
' IsRowClear
' This procedure returns True if all the cells
' in the row specified by RowNum as empty or
' contains only a "'" character. It returns False
' if the row contains only data or formulas.
''''''''''''''''''''''''''''''''''''''''''''''''''
Dim ColNdx As Long
Dim Rng As Range
ColNdx = 1
Set Rng = Cells(RowNum, ColNdx)
Do Until ColNdx = Columns.Count
    If (Rng.HasFormula = True) Or (Rng.Value <> vbNullString) Then
        IsRowClear = False
        Exit Function
    End If
    Set Rng = Cells(RowNum, ColNdx).End(xlToRight)
    ColNdx = Rng.Column
Loop

IsRowClear = True

End Function
 

Bijlagen

Beste Raymond,

bedankt voor antwoord, maar niet helemaal wat ik zocht...

Ik zou tot uiteindelijk resultaat moeten komen dat ik per klant (56...) telkens het totaal ALA EN ZNP te zien krijg, samen met totaal per klant.

Beste groeten
 
Dan staan je klantnamen dus in dezelfde kolom als ALA en ZNP.

Ik zou dan als eerste de opbouw van je database aanpassen.
 
OK bedankt.

is het beter dat ik dan eventueel enkel de klantNAAM behoudt en nadien de nummer er bijzet met een VLOOKUP ?
 
Gelijk van de eerste keer goed opmaken je database.

Bijvoorbeeld:


Klantnaam Product Debetbedrag credit bedrag btw

Als je de ALA en ZNP in een apart tabblad hebt staan dan kan je vlookup gebruiken.
 
Probleem is dat de data rechtstreeks uit SAP in een excel sheet gezet worden,
heb geen invloed op de layout :confused:

Excuses, wil niet moeilijk doen maar geraak er nog altijd niet aan uit op die manier.

vba voor blanco's is super daarentegen !
 
In jouw bestand kunnen lege rijen met een oneliner verwijderd worden:

Code:
Sub weg()
  activesheet.columns(1).specialcells(xlcelltypeblanks).entirerow.delete
End Sub
 
Beste snb,

bedankt ! en ook direct getest en 't werkt !

grootste zorg blijft andere probleempje...
 
Daarvoor deze macro:

Code:
Sub tst4()
  With [Sheet1!A1].CurrentRegion
    [Sheet1!G1:K1] = .Rows(1).Value
    [Sheet1!H2] = "Laques"
    [Sheet1!H3] = "Paint related"
    .AdvancedFilter xlFilterCopy, [Sheet1!G1].CurrentRegion, [Sheet1!M1]
  End With
End Sub
 
Laatst bewerkt:
Er ontbreekt een punt " . " voor advancedfilter
 
Dat werkt ondertussen waarvoor dank !

nu nog één detail, ik zou graag ook de klantnummer of -naam er nog bijkrijgen...
 
Met de aangereikte code moet jou dat nu wel lukken !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan