Visual Basic for Applications : verwijzingen

Status
Niet open voor verdere reacties.

luk36912

Nieuwe gebruiker
Lid geworden
6 jul 2009
Berichten
4
Hallo,

Ik ben reeds lang een fervente gebruiker van Excel (momenteel MS Office Pro 2007) maar heb pas de macro's ontdekt. Dus daar ken ik in feite niet zoveel van. Ik heb al veel zitten zoeken in de help-pagina's en heb mij een handboek aangeschaft maar het blijkt toch niet zo gemakkelijk te zijn. Ik mis eigenlijk de basis om te beginnen.

Nu specifiek gebruik ik al jaren een programma waar ik enorm veel repetitieve handelingen moet doen die ik waarschijnlijk kan automatiseren met macro's. Ik voeg in bijlage mijn "vereenvoudigd" Excel-blad met het begin van een macro en daarbijhorend drie vragen voor een oplossingen :

Vraag1
Deze macro loopt kolom "B" af en zoekt naar een waarde die groter of gelijk is aan de waarde die zich bevindt in cel "C2". (u kan dit bekijken met "Ctrl t"). Nu werk ik met een teller om de waarde in kolom "C" steeds te verhogen met 1, maar dat*voldoet niet om het gewenste resultaat te bekomen daar de volgorde van de rijen steeds wijzigt. In feite zou de bewerking niet moeten zijn TELLER = TELLER + 1 maar zou er met volgende formule moeten gewerkt worden "= gelijk aan de vorige rij + 1", maw zou de waarde van de vorige rij moeten genomen worden en verhoogd worden met 1. Bovendien zou de formule "= gelijk aan de vorige rij" moeten geplaats voor de getallen in C die niet voldoen aan de voorwaarde, met andere woorden zouden deze formule moeten zijn : is gelijk aan de waarde van de vorige rij (op uitzondering van de laatste rij die niet voldoet, waar de formule ook moet blijven "= gelijk aan de vorige rij +1")

Vraag2

In programmaregel "6" wordt aangegeven in welke cel moet gestart worden met zoeken (in voorbeeld is dit rij "14", kolom "C". Voor elke zoekopdracht moet ik het programma aanpassen om aan te geven in welke cel moet begonnen worden. De kolom blijft steeds kolom "C", het rijnummer wordt aangegeven in cel "D2". Kan dit zo geprogrammeerd worden dat er automatisch gestart wordt in de rij aangegeven in cel "D2"?





Vraag3

Op het moment dat in kolom "B" een waarde gevonden wordt die voldoet aan de voorwaarde "B2" moet ik manueel
1°) in de overeenkomstige rij de cellen in de kolommen "A" tot "B" selecteren,
2°) deze kleuren in het rood,
3°) deze kopiëren en plakken op dezelfde plaats "speciaal waarden",
4°) een andere macro "Ctrl c" uitvoeren die werkt naar behoren, (dit betreft het verplaatsen van de volledige rij naar onderaan het blad)
5°) deze zoekopdracht "Ctrl t" opnieuw starten
Kunnen deze acties geautomatiseerd worden zodat alle rijen doorlopen worden zonder manuele tussenkomsten?
Het Excel-blad betreft in feite 16.000 rijen en de berekening waar hier Aselect.Tussen() staat betreft in feite een 120-tal berekeningen die ongeveer telkens 10 seconden in beslag nemen.

Bedankt op voorhand
 

Bijlagen

Beschrijf eerst eens gewoon wat er moet gebeuren (jouw beschrijving vind ik niet duidelijk, want een mix van wat en hoe):

bijv.
- zoek in kolom B vanaf de regel, aangegeven in cel D2, naar de waarde, aangegeven in cel C2.
- als deze waarde is gevonden.......
- als deze waarde niet is gevonden .....
 
Logische stappen programma

In bijlage de logische stappen

1. Selecteer de cel in de kolom C met het rijnummer aangegeven in cel D2 (de cel die geselecteerd is noem ik hierna de actieve cel)
2. Plaats de formule (= de waarde van de cel boven de actieve cel + 1)
• Als deze waarde gelijk is aan de waarde in cel A2 dan stop, anders :
3. Vergelijk de waarde in de cel links van de actieve cel met de waarde in cel B2
• Als deze waarde gelijk of groter is aan de waarde in cel B2 dan
- Selecteer de kolom C en het (rijnummer aangegeven in cel D2) - 1
** Plaats de formule (= de waarde van de cel 2 rijen boven de actieve cel + 1)
- Selecteer de cellen van kolommen A tot B op de rij aangegeven in cel D2
** Kleur deze cellen in het rood
** Kopieer deze cellen en plak de vaste waarde op dezelfde plaats
- Voer de macro (Ctrl c) uit, deze macro bestaat reeds en werkt naar behoren en :
** geeft de cellen in kolommen C EN D de waarde nul
** geeft de cel in kolom E de waarde A2 + 1
** wist een aantal rijen in het bereik van alle rijen
** hersorteert al rijen zodat de actieve rij bovenaan komt te staan
- begin het programma terug bij regel 1
• Anders
- Selecteer de kolom C en het (rijnummer aangegeven in cel D2) + 1
** Plaats in deze cel de formule (= de waarde van de cel boven de actieve cel + 1)
- Selecteer de kolom C en het (rijnummer aangegeven in cel D2) - 1
** Plaats in deze cel de formule (= de waarde van de cel boven de actieve cel)
- Selecteer de kolom C en het (rijnummer aangegeven in cel D2)
- Begin het programma terug bij regel 1
 

Bijlagen

Vertel eens waar deze exercitie goed voor is. Het genereren van randomgetallen kun je beter realiseren in VBA zonder gebruik te maken van een werkblad.
 
Laatst bewerkt:
Vba

Hallo,

Die random heeft in feite niets mee te maken met mijn probleem. Ik heb Aselect() maar gebruikt omdat in die cel in mijn originele Excelblad het resultaat komt van een120-tal berekeningen. Dit om het werkblad niet te groot en te ingewilkkeld te maken die anders te veel de aandacht zouden afleiden van mijn probleem. Mijn probleem als leek in VBA bestaat erin dat ik er niet in slaag te commanderen om naar een bepaalde cel te gaan en daar een bepaalde aktie uit te voeren en daarna naar een andere cel te gaan enz...
Het plaatsen van de opeenvolgende getallen in kolom C zijn in feite de trigger om op die lijn alle berekeningen uit te voeren en als aan de voorwaarde wordt voldaan dan het resultaat te bevriezen (kopie/plakken-speciaal-waarde en verplaatsen naar boven). Het origineel werkblad bestaat uit ca 16.000 lijnen en ik moet die nu manueel één voor één aflopen om dat getal te plaatsen, te kijken of aan de voorwaarde wordt voldaan en dan het resultaat te bewaren om vervolgens naar de volgende rij te gaan om opnieuw te beginnen.
Ik ben altijd bereid om meer uitleg te geven mocht dit niet volstaan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan