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

Lijst overzichtelijker indelen met VBA

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

HWV

Terugkerende gebruiker
Lid geworden
19 feb 2009
Berichten
1.213
Beste,

Ik ben bezig om een overzicht te maken voor de accountmanagers.
Nu heb ik het al voor elkaar om uit het originele bestand de accountmanagers per blad neer te zetten, en dat deze dan in een map onder hun code wordt opgeslagen.

Werkt perfect.

Nu wil ik graag het duidelijker maken en overzichtelijker.
Nu staan de maanden allemaal onder elkaar, ik zou graag de maanden naast elkaar willen zien zodat per klant ik kan zien wie wat heeft gedaan en dan zo van alle klanten onder elkaar. Per omzet en marge (kolom E en K)

In de bijlage mijn bestand, na het draaien van het script om alles weg te zetten per accountmanager.

In de sheet "Voorbeeld na verandering 957" staat hoe ik het graag zou willen hebben en in de scheet "957" hoe ik het nu heb staan.

Heeft iemand een idee hoe ik dit voor elkaar kan krijgen

De gegevens die ik krijg zijn per keer anders, maar wel met de zelfde opmaak en de zelfde accountmanagers (kan ook wel eens veranderen)
Ik exporteer elke keer een jaar, dus de maanden zijn ook variabele

Groet HWV

Formule per blad accountmanager plaatsen en opslaan per accountmanagers nummer in een map

Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private c4 As Long

Sub begin_omzet()

On Error GoTo Err_Knop1_Click

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With


ChDir "D:\test_Omzet"
Workbooks.Open Filename:="D:\test_Omzet\omzet.xls"
   
Columns(23) = Columns(2).Value

Windows("Omzet per Accountmanager.xls").Activate
Sheets("Opslag").Select

Workbooks("Omzet.xls").Sheets("Data info").Range("A1:W10000").Copy Workbooks("Omzet per Accountmanager.xls").Sheets("Opslag").Range("A1:W10000")

Windows("Omzet per Accountmanager.xls").Activate

Dim c As Range
    Dim ws As Worksheet
    Dim ws1 As Worksheet
    Dim sh As Object
    
    On Error Resume Next
    
    Set ws1 = ThisWorkbook.Worksheets("Opslag")
    
    For Each c In ws1.Range("C2", ws1.Range("C" & Rows.Count).End(xlUp))
        
        If WksExists(c.Text) Then
        
            Set ws = ThisWorkbook.Worksheets(c.Text)
            
        Else
        
            Set ws = ThisWorkbook.Worksheets.Add
            ws.Name = c.Text
        
        End If
        
        c.Resize(, 26).Copy ws.Range("A" & Rows.Count).End(xlUp).Offset(1)
        
    Next

ws1.Select
ws1.Columns("aV:aX").Delete

    For Each sh In ThisWorkbook.Sheets
        If sh.Index > "" Then
                Sheets(sh.Name).Select
                
           '' Formule 'aanroepen formule
            
        End If
    Next sh

    ''Application.ScreenUpdating = False
    ''Application.DisplayAlerts = False
    For Each ws In ThisWorkbook.Worksheets
         
        Sheets(ws.Name).Select
        Sheets(ws.Name).Copy
        ActiveWorkbook.SaveAs Filename:= _
        "D:\test_Omzet\Omzet per accountmanger opslag\" & ws.Name & ".xls", CreateBackup:=False
        ActiveWorkbook.Close
        ThisWorkbook.Activate
    Next

'Workbooks("Omzet.xls").Close SaveChanges:=False

With Sheets("Opslag")
    Range("A1:W10000").ClearContents
End With

With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With

Exit_Knop1_Click:
Exit Sub
Err_Knop1_Click:
MsgBox Err.Description
Resume Exit_Knop1_Click

End Sub

Function WksExists(wksName As String) As Boolean
    On Error Resume Next
    WksExists = CBool(Len(Worksheets(wksName).Name) > 0)
End Function
 

Bijlagen

Laatst bewerkt:
Met macro?

Dit probleem kan volgens mij heel goed opgelost worden met een matrixfunctie.
Nadeel is natuurlijk alweer de snelheid bij veel gegevens.

Beste groeten, Paul.
 

Bijlagen

Laatst bewerkt:
Beste,

Bedankt voor je inbreng.

Dit is iets wat maandelijks terug kom en dus ook elke keer andere gegevens bevat.
Graag zou ik dit dus ook in VBA willen zetten, om daar dus de snelheid in te brengen.
En dat dit dan mee kan lopen met de macro.

De verschillende tabbladen worden automatisch aangemaakt, dus de opmaak van de maanden (die verschillen moeten ook aangemaakt worden)

Met deze op lossing zie ik niet dat dit automatisch kan.

Groet HWV
 
vba

Spijtig genoeg ken ik te weinig van vba om je verder te kunnen helpen.
Als Openoffice-fanaat (niet-fanatiek) werk ik graag met technieken die compatibel zijn.

Nog veel succes!
Paul.
 
Stap verder, maar loop vast

Beste,

Ik ben al weer een stap verder gekomen, al wel met een hoop omwegen en tot nu toe alweer een lange code.
Maar goed tot zover gekomen, maar hoe nu verder.

In de bijlage het bestand tot zover ik en gekomen.

Ik heb boven horizontaal de maanden in totaal 12
Dan heb ik de klanten onder elkaar

Nu moet ik proberen de omzet te plaatsen bij de juiste maand en de juiste klant.
Omdat de cellen variabele zijn en dus niet altijd in de zelfde rij staat geef dit problemen.

Wie zou met mij mee willen kijken om tot een oplossing te komen.

Groet HWV
 

Bijlagen

Code korter

Telkens met klein stukjes kom ik verder, ik bkijf hangen op mijn topic hierboven dus ben even verder gegegaan met de opbouw.
Nu heb ik onderstaande code gemaakt voor het plaatsen van tekst en er voor te zorgen dat er telkens een cel leeg is tussen de datums.
Ik kan geen kolomen er tussen voegen ivm met gegevens die er boven staan moeten blijven staan.
Ik weet het is erg omslachtig op deze manier maar het werkt wel.

Code:
Sub Datum_verplaatsen()
'hiermee verplaats je de datum`s op de juiste plek, met een cel er tussen voor de marge
    
    Range("V2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 0).Activate
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    ActiveSheet.Range("C2").End(xlDown).Offset(3, 0).Activate
With ActiveSheet
    ActiveCell = ""
    End With

'zorgen dat er een kolom tussen komt

    ActiveSheet.Range("D2").End(xlDown).Offset(3, 1).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 2).Select
    ActiveSheet.Paste
   
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 3).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 4).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 5).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 6).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 7).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 8).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 9).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 10).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 11).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 12).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 13).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 14).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 15).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 16).Select
    ActiveSheet.Paste

    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 17).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 18).Select
    ActiveSheet.Paste

    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 19).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 20).Select
    ActiveSheet.Paste

    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 21).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 22).Select
    ActiveSheet.Paste
    
    Application.CutCopyMode = False
    ActiveCell.Select
    
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 23).Activate
    ActiveCell.Select
    Selection.Cut
    ActiveSheet.Range("D2").End(xlDown).Offset(3, 24).Select
    ActiveSheet.Paste
End Sub

Sub opmaak_Omzet_Marge()

ActiveSheet.Range("D2").End(xlDown).Offset(4, 0).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 1).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 2).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 3).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 4).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 5).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 6).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 7).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 8).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 9).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 10).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 11).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 12).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 13).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 14).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 15).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 16).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 17).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 18).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 19).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 20).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 21).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 22).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 23).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 24).Activate
With ActiveSheet
    ActiveCell = "Omzet"
End With
ActiveSheet.Range("D2").End(xlDown).Offset(4, 25).Activate
With ActiveSheet
    ActiveCell = "Marge"
End With

ActiveSheet.Range("D2").End(xlDown).Offset(4, 0).Activate
Range(Selection, Selection.End(xlToRight)).Select
With Selection.Borders(xlEdgeBottom)
     .LineStyle = xlContinuous
     .Weight = xlMedium
     .ColorIndex = xlAutomatic
End With

End Sub

Alvast bedankt voor de hulp
 

Bijlagen

Marge totaal bepalen

Beste,

ben weer een stap verder maar loop tegen het volgende aan.
in de kolommen E5;G5;I5;K5 heb ik de marge staan, maar nu wil ik van dit kwartaal laten zien welke marge er gehaald si
dit doe ik met onder staande code

helaas geef hij de waarde 0

Als E5=30% G5=30% I5=30% K5=30% zou als uitkomst 30% moeten zijn.
nu wil het ook wel eens dat er bv in E5 geen waarde staat, uitkomst zou ook gewoon 30% moeten zijn

Code:
=ALS(ISFOUT(GEMIDDELDE(E5;G5;I5;K5;">0"));0;GEMIDDELDE(E5;G5;I5;K5;">0"))

Hoe kan ik dit voor elkaar krijgen ?

Groet HWV
 
Beste HWV ;)

Zie bestandje.
Verwijder één van de cellen en kijk wat er gebeurd als uitkomst.

Groetjes Danny. :thumb:
 

Bijlagen

Laatst bewerkt:
Gelukt

Beste,

Bedankt voor de oplossing, iets te moeilijk gedacht :-)
Ga er weer verder mee stoeien.

groet HWV
 
Toch nog verkeerd

Beste,

Ik loop toch nog tegen het volgende aan.
In het voorbeeld van danny zijn of alle velden gevuld met een waarde, of zijn leeg.
Ik heb in mijn kolomen de waarde 0 ook staan, en die trek het gemiddelde omlaag.

Hoe kan ik dat voorkomen ?

In de bijlage een voorbeeld van hoe het verkeerd gaat

Code:
=GEMIDDELDE(E5;G5;I5;K5)

Kolom E 30%
Kolom G 0 %
Kolom I 0 %
Kolom K 0 %

Eigenlijk wil ik dan 30 % zien, is dat mogelijk

Groet HWV
 

Bijlagen

Als de tussenliggende kolommen leeg zijn
Code:
=SOM(E5;G5;I5;K5)/AANTAL.ALS(E5:K5;">0")
Als ze niet leeg zijn
Code:
=SOM(E5;G5;I5;K5)/(AANTAL(E5;G5;I5;K5)-AANTAL.ALS(E5:K5;0))
 
Opnieuw onder de aandacht

Beste,

Graag wil ik deze vraag weer onder de aandacht brengen.
De matrix formule uit gebreid van D4 tm AY1367 maar ik kom daar niet mee weg, ivm dat er meer klanten zijn dan dat ik in dit blad kan zetten.En dat deze heel erg traag is geworden.

Kan dit niet in VBA gebouwd worden.
Ik heb 7 kolomen waarvan de waarde van getransporteerd moeten worden (Zie bijlage tabblad "957"),
in een overzichtelijke lijst (zie bijlage tabblad "Voorbeeld na verandering 957")

De debiteuren in netjes ontdubbeld onder elkaar en de maanden met omzetten er naast

Als ik deze code heb kan ik de rest erwel omheen bouwen maar hier blijf ik op steken, heb nu met de matrix formule maar dit werkt niet afdoende

Hopende dat er iemand hier een oplossing voor weet.

groet HWV
 

Bijlagen

draaitabel?

HWV,

dit lijkt me typisch iets te zijn voor een draaitabel

zie bijlage voor een mogelijkheid
 

Bijlagen

Een ander insteek, ook goed

Beste,

Het is een andere insteek en misschien kan ik er wel wat mee.
Ben niet erg thuis in draaitabellen, maar wat niet is kan nog komen :-)

De gevens die ik krijg zijn Dynamisch, dus ik weet nooit hoeveel regels er in het bestand komen te staan.
Ik heb al gekeken waar ik de range kan aanpassen maar nog niet gevonden. kan deze dan ook dynamisch worden ?

Bedankt tot zover, en hoop dat je me hierdoorheen wil loodsen

Groet HWV

Ik heb al gekeken waar ik de range kan aanpassen maar nog niet gevonden

Deze heb ik al gevonden, en werkt goed, dynamisch is ook niet van toepassing op deze manier geweldig.

Zit dan wel met het volgende dat ik altijd twee jaar wil laten zien.
Nu dus 2009 1t/m12 en 2010 1t/m12 om een totaal en duidelijk overzicht te laten zien.
Terwijl er in de het overzicht niet altijd omzet is geweest in de desbetreffende maand !
 
Laatst bewerkt:
voorbeeld van ongesplitste data

HWV,

natuurlijk wil ik je graag van dienst zijn!

Zou je me (een voorbeeld van) het originele (nog niet in tabbladen gesplitste) bestand kunnen mailen?
Ook het splitsen kan nl mbv ingebouwde draaitabelfunktionaliteit.
 
Laatst bewerkt:
let op je e-mail

verzonden
 
Haije had de oplossing

Beste,

Haije heeft inderdaad de juiste insteek gegeven door met een draaitabel te komen.
Hij heeft een handleiding gemaakt op mijn gegevens, op deze manier ben ik dus weer iets wijzer van Excel en zeker ok met de draaitabelen.

Haije nogmaals bedankt voor je inzet.:thumb:

groet HWV
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan