[VBA] gebruik van "lege" cellen met formule achter

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
Wat moet er gebeuren:
Controleer of cell (65+j,2) leeg is of niet
indien leeg ---> j+1
indien niet leeg --> bereken value

Probleem: in de cellen die "leeg of vol" zijn staat dit als code
code:
1
=IF($F$11>=A65;IF($F$11-A65<=$F$8;A65;"");"")

Ze zijn dus eigenlijk niet leeg maar met "" (als ik ze volledig wis dan werkt het wel maar dit is uitgesloten aangezien die functionaliteit moet blijven)

een tweede probleem situeert zich bij de combin functie
als j toeneemt wordt j op een bepaald moment groter dan (pickfaces-k)
echter het moment dat j groter wordt dan (pickfaces -k) is ook het moment dat de cellen uit (65+j,2) terug leeg zijn. Het wissen van de bovenstaande formule uit deze cellen (dus vanaf 65+j) verhielp dit echter niet.

Hopelijk heb ik het duidelijk genoeg weten te verwoorden en kan er mij iemand zeggen hoe ik dit kan oplossen.

code:
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
26
27
28
29
30
Sub test()

Dim j As Double
Dim lijnenperbatch As Double
Dim pickfaces As Double
Dim k As Double
Dim Value As Double

Value = 0

lijnenperbatch = Sheets("Parts-to-picker").Cells(8, 6).Value
pickfaces = Sheets("Parts-to-picker").Cells(11, 6).Value
k = Sheets("Parts-to-picker").Cells(65, 1).Value

For j = 0 To 250

If (Sheets("Parts-to-picker").Cells(65 + j, 2).Value = "") Then

End If

If (Not (Sheets("Parts-to-picker").Cells(65 + j, 2).Value = "")) Then

Value = Value + (WorksheetFunction.Power((-1), j) * WorksheetFunction.Combin(pickfaces - k, j) * WorksheetFunction.Power((1 - ((j + k) / pickfaces)), lijnenperbatch))

End If

Sheets("Parts-to-picker").Cells(60, 2) = Value

Next j
End Sub

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
.Text ipv .Value

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 11-09 13:18

Dido

heforshe

offtopic:
Lees ik eroverheen, of kun je regels 19-21 vervangen door Else?

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
.Formula
Dido schreef op donderdag 22 april 2010 @ 00:04:
offtopic:
Lees ik eroverheen, of kun je regels 19-21 vervangen door Else?
Lijkt me ontopic. Zo kun je regel 11 ook schrijven als "lijnenperbatch = ['Parts-to-picker'!F8]". Daarnaast is wat inspringing (tabs) wel handig, 1 tab voor iedere omliggend statement (zoals sub, for en if). Dan is het allemaal een stuk beter leesbaar. :p

Ik snap eigenlijk niet waarom je hier VBA voor gebruikt, en niet gewoon een paar hulpcellen en wat formules? :?

offtopic:
Gebruik [code=vb]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
de .text zorgde ervoor dat het werkte
.formula bleef foutmelding geven
bedankt ook voor de tip over het else statement, is uiteraard beter

wat is het voordeel van lijnenperbatch = ['Parts-to-picker'!F8] ?
en heb dit ook gedaan voor pickfaces en k maar de functionaliteit lijkt mij dezelfde

@mod mijn volgende vragen komen wel bij prg office, excuses

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
jonbeton1 schreef op donderdag 22 april 2010 @ 08:45:
de .text zorgde ervoor dat het werkte
.formula bleef foutmelding geven
Vreemd, het verschil tussen .Text en .Value is dat de een readonly is en is opgemaakt, dus bijvoorbeeld het aantal decimalen kan anders zijn. Als de waarde bijvoorbeeld 11.3214 is, het formaat 2 decimalen is, dan is de .Text "11.32". Bij "" valt er vaak weinig op te maken. :p
wat is het voordeel van lijnenperbatch = ['Parts-to-picker'!F8] ?
en heb dit ook gedaan voor pickfaces en k maar de functionaliteit lijkt mij dezelfde
Er is ook alleen maar een verschil in leesbaarheid, niet in functionaliteit. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

zoals pedorus opmerkt, dit had ook zonder vba opgelost kunnen worden.

het else statement is ook overbodig, regel 17 tem 19 kan je gewoon weglaten aangezien er geen opdracht uitgevoerd hoeft als de cel leeg is.

ik raad het gebruik van de vierkante haken voor kortere cel- of bereikverwijzing af. zie onder andere Square Bracket Notation Is Less Efficient Than Tunneling. maar: http://www.ozgrid.com/forum/showthread.php?t=52372

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op donderdag 22 april 2010 @ 10:47:
ik raad het gebruik van de vierkante haken voor kortere cel- of bereikverwijzing af. zie onder andere Square Bracket Notation Is Less Efficient Than Tunneling. maar: http://www.ozgrid.com/forum/showthread.php?t=52372
Hier 4 keer gebruiken scheelt inderdaad toch zo'n <40 microseconden. Je kunt misschien ook nog wel meer besparen door "With Sheets("Parts-to-picker")" te gebruiken, maar eigenlijk lijken me dit soort performanceverschillen niet zo relevant. Zelfs rond Excel '97, waar dat eerste artikel van is, lijkt het me nog niet relevant. Het wordt ook daar pas relevant als je consequent [] gebruikt, zonder een variabele te gebruiken, in zeg een loop, en/of als je de functies waarin [] wordt gebruikt heel vaak aanroept. In het eerste geval kun je beter een variabele gebruiken zoals dat hier gebeurd, in het laatste geval is een parameter waarschijnlijk netter. Het 2e linkje raadt het gebruik juist aan. :p

Het blijft natuurlijk een kwestie van smaak. Er tussenin ligt Sheets("Parts-to-picker").Range("F8") ipv Cells(8, 6). Dat scheelt al een stuk in leesbaarheid.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

het is idd grotendeels een smaakkwestie, weliswaar is het aan te raden code te schrijven die in zoveel mogelijk situaties correct functioneert. daarom houd ik bij mijn productiecode er standaard aan de volledige objecthiërarchie uit te schrijven : application.workbooks().worksheets().range() enz.., indien je enkel sheets().range... gebruikt moet natuurlijk de juiste werkmap actief zijn of er komt een foutmelding.
het with statement is nogal buggy in office 2000, als je de vierkante haken [F8] herschrijft naar het equivalente, wat langere application.evaluate("F8") is het ook niet zo mooi meer.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 22 april 2010 @ 15:34:
daarom houd ik bij mijn productiecode er standaard aan de volledige objecthiërarchie uit te schrijven : application.workbooks().worksheets().range() enz.., indien je enkel sheets().range... gebruikt moet natuurlijk de juiste werkmap actief zijn of er komt een foutmelding.
Wat mij betreft de belangrijkste reden om de hiërarchie altijd volledig uit te schrijven. Er kunnen rare dingen gebeuren als je een macro vanuit een ander werkblad activeert, waarna de procedure lustig loshakt op het verkeerde werkblad... :P

Acties:
  • 0 Henk 'm!

Verwijderd

pedorus schreef op donderdag 22 april 2010 @ 11:17:Het 2e linkje raadt het gebruik juist aan. :p
offtopic:
ik ben natuurlijk niet te beroerd om zelf onmiddellijk een tegenargument te geven voor mijn redenering ;)

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op donderdag 22 april 2010 @ 16:06:
Wat mij betreft de belangrijkste reden om de hiërarchie altijd volledig uit te schrijven. Er kunnen rare dingen gebeuren als je een macro vanuit een ander werkblad activeert, waarna de procedure lustig loshakt op het verkeerde werkblad... :P
Het lijkt me sowieso onverstandig om op die manier vba aan te roepen. Wat is er mis met een knop? ;)
Daarnaast zullen goede macro's over het algemeen falen doordat bepaalde namen niet bestaan, want refereren naar vaste cellen is niet zo handig imo. En Sheet CodeNames lijken me handiger dan een volledig path, te zetten bij de properties van een werkblad. Dan krijg je dus Werkbladnaam.Range("celnaam") ipv [Werkbladnaam!celnaam] :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Klopt, normaal gesproken stop ik mijn macro's ook achter knoppen. Maar er zijn situaties denkbaar waarbij het aanroepen van een macro middels een sneltoets handiger is. Denk aan het ad hoc bewerken van meerdere bestanden, waarbij de macro in een ander bronbestand zit.

Acties:
  • 0 Henk 'm!

  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
bedankt voor de reacties
vba is nodig aangezien er enkele keren in één enkele formule gesommeert moet worden tot soms 10000 (i=0 to 10000) en dat ga ik niet met hulp rijen zitten oplossen
en knop wordt uiteraard nog toegevoegd maar dit maakt niets uit voor de functionaliteit
nu ik de basis ken kan ik weer verder doen

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408

Pagina: 1