Wellicht dat deze code sneller is:quote:Op woensdag 16 december 2009 19:16 schreef lobzorenzo het volgende:
[..]
je bent nu al m'n held, of het nou lukt of niet :D
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 'begin en eindrij zoeken van laatst toegevoegde data ActiveSheet.Range("a10000").End(xlUp).Select eindrij = ActiveCell.Row i = 0 Do While ActiveCell.Offset(-i, 0).Value <> "" i = i + 1 Loop beginrij = eindrij - i + 1 'MsgBox beginrij & ", " & eindrij 'array vullen met waarden myArray = Range("A" & beginrij & ":" & "A" & eindrij) 'kolom D leegmaken Range("D:D").Clear 'gegevens uit array plaatsen For i = 1 To UBound(myArray) Range("D" & i).Value = myArray(i, 1) Next i End Sub |
Ja dat werkt!!!quote:Op donderdag 17 december 2009 11:25 schreef Deetch het volgende:
[..]
Wellicht dat deze code sneller is:
[ code verwijderd ]
hahaha ik roeleer. Toch geen verloren dag dan zo ingeschneeuwd in Groningen.quote:Op donderdag 17 december 2009 12:19 schreef lobzorenzo het volgende:
[..]
Ja dat werkt!!!![]()
![]()
Bedankt! Echt super!
Ben druk aan het thuiswerken. Wel zo lekker trouwens. Saaie stukken doornemen met Manowar, IRon Maiden enzo op de achtergond \m/ hail and kill \m/quote:Op donderdag 17 december 2009 14:47 schreef DaFan het volgende:
Luie donder ga gewoon werken!!
Klopt. Dat had ik ook gedaan. Bedanktquote:Op donderdag 17 december 2009 23:59 schreef qu63 het volgende:
of c11 vervangen door $c$11.. $ zorgt er voor dat de cellen niet veranderen..
Deze werkt. Let ook op de afrondfunctie om rekenfouten te corrigeren. En datquote:Op zondag 20 december 2009 14:33 schreef adbeentjes het volgende:
Om maar meteen te beginnen, het volgende probleem:
Ik moet een algoritme (in Excel VBA) schrijven dat berekent hoeveel wisselgeld een kassier moet teruggeven aan een klant. Niet enkel het totaal terug te geven bedrag moet worden afgedrukt, maar het wisselgeld moet worden opgesplitst in de verschillende coupures (bijv. ¤634,33 = 1x500 + 0x200+ 1x100 +0x50 + 1x20 + 2x5+ 2x2+ 0x1+ 0x0,50 + 1x0,20 + 1x0,10 + 0x0,05 + 1x0.02+1x0,01)
Ervan uitgaande: terug te geven bedrag kleiner is dan 1000 euro.
Al wat uurtjes 'gespeeld' met VBA, maar helaas zonder resultaat. Wie helpt?
Ad
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 31 32 33 34 35 36 | Dim check, pay, diff, bedrag As Double Dim change As String Dim flappen As Integer 'te betalen = check 'geld gegeven = pay 'diff = wisselgeld (tussengetal) 'bedrag = oorspronkelijk wisselgeld (totaal) check = Range("B1").Value pay = Range("B2").Value diff = pay - check bedrag = diff 'lijst met coupures myArray = Array(500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01) change = "" 'loop door elke coupure For i = 0 To 14 'als te geven wisselgeld 0 is dan is loopje klaar If diff = 0 Then Exit For 'het aantal coupures van de betreffende waarde bepalen (int maakt er een geheel getal van) 'myArray is het i-de item van de eerder aangemaakte array flappen = Int(diff / myArray ![]() 'tekstregel maken met het aantalcoupures en het type change = change & flappen & "x" & myArray ![]() 'oevrgebleven bedrag berekenen dat nog gewisseld moet worden, afronden op 2 decimalen om rekenfouten te voorkomen diff = Round((diff - flappen * myArray ![]() Next i 'tekst box met te wisselen bedrag en hoe deze te wisselen MsgBox bedrag & ":-->" & change End Sub |
idd. mooi gemaakt! Zo zou ik het ook ongeveer doen, denk ik.quote:Op maandag 21 december 2009 11:10 schreef Deetch het volgende:
Uit een ander topic even het volgende ter informatie (misschien heeft iemand anders er nog eens wat aan)
[..]
Deze werkt. Let ook op de afrondfunctie om rekenfouten te corrigeren. En datstaat voor ( i ) (zonder spaties.
[ code verwijderd ]
watquote:Op dinsdag 22 december 2009 10:30 schreef Deetch het volgende:
dan moet je eerst alle formats vastleggen van de kolommemn vastleggen (dus niet general maar text of number)
Vervolgens gebruik je als basis die VB functie die alles tussen "" zet en voeg je daar een regel aan toe:
if activecell.numberformat = "@" then
code om "" toe te voegen
else end if
end if
1 2 3 4 5 6 | for i = 1 to 100 range("H1").value = i printen van pagina code die je had opgenomen next i |
Waarom in VBA?quote:Op maandag 21 december 2009 11:10 schreef Deetch het volgende:
Uit een ander topic even het volgende ter informatie (misschien heeft iemand anders er nog eens wat aan)
[..]
Deze werkt. Let ook op de afrondfunctie om rekenfouten te corrigeren. En datstaat voor ( i ) (zonder spaties.
[ code verwijderd ]
Dank voor je snelle respons, maar het lukt niet echtquote:Op woensdag 23 december 2009 16:37 schreef qu63 het volgende:
Bij de cel voor vraag 2:
=ALS(OF(CELMETANTWOORDVRAAG1="alleenstaand';CELMETANTWOORDVRAAG1="gehuwd");"Nee";"")
Met VBA zou je de cel ook nog kunnen blokkeren denk ik, maar op deze manier vult ie automatisch Nee in als er alleenstaand of gehuwd is ingevuld bij vraag 1, en niets als er van de andere antwoorden gekozen is.
In B3 komt dit:quote:Op woensdag 23 december 2009 18:39 schreef RoaldReurink het volgende:
[..]
Dank voor je snelle respons, maar het lukt niet echtEven een screenshot van het probleem...bij de vraagtekens dus moet 'nee' komen wanneer het gezin geen kinderen heeft. In kolom D zie je de dropdownbox en in kolom F de mogelijkheden voor die dropdownbox.
[ afbeelding ]
geen idee wat je nu precies wilt... Je wilt iets laten selecteren op basis van de selectie man of vrouw, of wat?quote:Op maandag 28 december 2009 15:03 schreef RoaldReurink het volgende:
Ik vroeg mij af of dit mogelijk is:
[ afbeelding ]
De klant kiest bijvoorbeeld 'Man', 'Premieduur 15 jaar, geboren op 12-08-2008 (dus 1 jaar oud), dan wordt er automatisch 'leeftijd 1 MAN' gekozen = 5,00
Het lastige is de geboortedatum dat als ik nu invul 21-02-1986 dat Excel weet dat ik dan 23 ben, en de goede lengte van de premieduur.
Is dit mogelijk? Zou namelijk erg mooi zijn als dat zo is
Gr,
Roald
Dan krijg je je leeftijd in dagen, wat niet altijd even handig is om mee te rekenen.quote:Op maandag 28 december 2009 15:33 schreef kingjotte het volgende:
Je hebt in excel de NOW functie (zal wel NU heten in het Nederlands ofzo, achterlijke vertalingen altijd), die de huidige tijd teruggeeft, als je daar de geboortedatum vanaf haalt krijg je de leeftijd?
dat klopt niet, het moet dit zijn:quote:Op maandag 28 december 2009 15:38 schreef Beregd het volgende:
[..]
Dan krijg je je leeftijd in dagen, wat niet altijd even handig is om mee te rekenen.
je kunt ook bijvoorbeeld year(now())-year(a1)+(month(now())-month(a1)/12+(day(now())-day(a1))/365 doen
dat zei ik tochquote:Op maandag 28 december 2009 15:50 schreef kingjotte het volgende:
[..]
dat klopt niet, het moet dit zijn:
=YEAR(NOW())-YEAR(A1)+(MONTH(NOW())-MONTH(A1))/12+(DAY(NOW())-DAY(A1))/365
ja, als je enkel jaren moet hebben is dat idd het makkelijkste maar soms is het exact nodig.quote:Op maandag 28 december 2009 15:52 schreef DaFan het volgende:
Huh doe gewoon =ROUNDDOWN((TODAY()-A1)/365;0)
waar A1 de geboortedatum is. Of ben ik nou gek
jij: YEAR(NOW())-YEAR(A1)+(MONTH(NOW())-MONTH(A1)/12+(DAY(NOW())-DAY(A1))/365quote:Op maandag 28 december 2009 15:54 schreef Beregd het volgende:
[..]
dat zei ik toch
en waarom vraag je het dan?
Dat wordt pas na 100 jaar ofzo een issue, of de dag erna. Maar goed ik snap je puntquote:Op maandag 28 december 2009 16:33 schreef Beregd het volgende:
om nog even terug te keren op de formule van dafan, die zal niet altijd werken omdat sommige jaren 366 dagen tellen, zeker als je over vele jaren rekent
Wat is het regeltje om aan die 5 euro te komen, gegeven het geslacht en de leeftijd? Moet je dan niet ook de premieduur weten?quote:Op maandag 28 december 2009 16:48 schreef RoaldReurink het volgende:
Ja ok, met leeftijd uitrekenen is gelukt.
Echter nog niet dit probleem: uit tabel (zie figuur) moet er dus automatisch worden gekozen dat iemand 'man' is en '1 jaar', en premieduur '15 jaar', dus er moet automatisch 5,00 (euro) worden geselecteerd.
Die 5, is 5 euro, dus er moet komen:
Premiekosten: 5 euro (=man, 1jaar, premieduur 15 jaar --> hier een formule voor)
Hopelijk zo goed uitgelegd
Ja de premieverdeling heb ik anders ingevoerd omdat ik niet weet of ik die mag posten. Deze verdeling is zo als ik het gekregen, leeftijd vrouw begint bij 5 jaar.quote:Op maandag 28 december 2009 17:42 schreef kingjotte het volgende:
[..]
Wat is het regeltje om aan die 5 euro te komen, gegeven het geslacht en de leeftijd? Moet je dan niet ook de premieduur weten?
Als we het in een formule moeten vatten, zullen we toch eerst moeten weten wat de spelregels zijn.
Verder, wat is nou precies het gewenste resultaat? Je hebt het over automatisch 5,00 selecteren, maar hoe wil je dat weergeven? Als een regeltje onder Geboortedatum en Geslacht?
[offtopic]
Rare premieverdeling hanteer je en wat nou als er een vrouw van 3 langskomt?
[/offtopic]
om het wat leesbaarder te maken heb ik even een extra veld "leeftijd" toegevoegd, dan ziet het er zo uit:quote:=INDEX(prijzen;IF(geslacht="man";MATCH((YEAR(NOW())-YEAR(geboortedatum)+(MONTH(NOW())-MONTH(geboortedatum))/12+(DAY(NOW())-DAY(geboortedatum))/365);leeftijden_man);MATCH((YEAR(NOW())-YEAR(geboortedatum)+(MONTH(NOW())-MONTH(geboortedatum))/12+(DAY(NOW())-DAY(geboortedatum))/365);leeftijden_vrouw));MATCH(duur;premie_lengtes))
ik heb alle relevante cellen (of cellranges) een naam gegeven, dit houdt je "code" ook wat beter onderhoudbaar.quote:=INDEX(prijzen;IF(geslacht="man";MATCH(leeftijd;leeftijden_man);MATCH(leeftijd;leeftijden_vrouw));MATCH(duur;premie_lengtes))
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | Const WeekNummerCel As String = "B1" Const DatumMaandag As String = "C2" Public NieuweAgenda As Object Sub MaakAgenda(Jaar As Long) Dim WeekNummer As Integer, DefaultSheets As Integer With Application 'Haal de flikkering weg .ScreenUpdating = False 'Zet het aantal sheets in nieuw workbook op 1 DefaultSheets = .SheetsInNewWorkbook .SheetsInNewWorkbook = 1 'Maak nieuw nieuwe agenda aan Set NieuweAgenda = .Workbooks.Add 'weken van het jaar WeekNummer = ISOweeknum(DateSerial(Jaar, 1, 1)) 'Week 52/53 If WeekNummer > 1 Then Call VulAgenda(WeekNummer, Jaar) End If 'Week 1 -> 52/53 For WeekNummer = 1 To ISOweeknum(DateSerial(Jaar, 12, 31)) Call VulAgenda(WeekNummer, Jaar) Next 'Opruimen .DisplayAlerts = False NieuweAgenda.Sheets(1).Delete NieuweAgenda.Sheets(1).Select 'ActiveWindow.ScrollWorkbookTabs Position:=xlFirst .DisplayAlerts = True Set NieuweAgenda = Nothing .SheetsInNewWorkbook = DefaultSheets .ScreenUpdating = True End With End Sub Sub VulAgenda(WeekNummer As Integer, Jaar As Long) Dim Maandag As Date, SheetName As String Maandag = ISOweeknumNaarDatum(Jaar, WeekNummer) ThisWorkbook.Sheets(SjabloonBladnaam).Copy After:=NieuweAgenda.Sheets(NieuweAgenda.Sheets.Count) With NieuweAgenda.ActiveSheet SheetName = CStr(" Week " & WeekNummer) If SheetExists(NieuweAgenda, SheetName) Then SheetName = SheetName & "-" .Name = SheetName .Range(WeekNummerCel) = WeekNummer .Range(DatumMaandag) = Maandag End With End Sub Public Function ISOweeknumNaarDatum(ByVal Jaar As Integer, ByVal Week As Integer) As Date Dim Maandag As Date, Weeknum As Integer Maandag = EersteMaandagJaar(Jaar) Weeknum = ISOweeknum(Maandag) 'If Weeknum = 53 Then Weeknum = 52 ISOweeknumNaarDatum = ((Week - Weeknum) * 7) + Maandag End Function Public Function ISOweeknum(ByVal Datum As Date) As Integer ISOweeknum = DatePart("ww", Datum, vbMonday, vbFirstFourDays) End Function Private Function EersteMaandagJaar(ByVal Jaar As Integer) As Date Const DONDERDAG = 4 Dim Nieuwjaar As Date, Weekdag As Integer Nieuwjaar = DateSerial(Jaar, 1, 1) Weekdag = DatePart("w", Nieuwjaar, vbMonday, vbFirstFourDays) - 1 EersteMaandagJaar = Nieuwjaar - Weekdag If Weekdag > DONDERDAG Then EersteMaandagJaar = EersteMaandagJaar + 7 End Function 'SheetExists Function -> Bestaat de sheet al in het workbook Private Function SheetExists(Book As Object, SheetName As String) As Boolean ' Geeft TRUE als sheet bestaat in het actieve workbook On Error Resume Next Dim x As Object SheetExists = False Set x = Book.Sheets(SheetName) If Err = 0 Then SheetExists = True On Error GoTo 0 End Function |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |