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

Lastige formule of toch VBA.

Status
Niet open voor verdere reacties.

Abel Visscher

Gebruiker
Lid geworden
28 mei 2007
Berichten
171
Geachte mede forumers,

Ik ben ergens aan begonnen en loop nu ergens tegenaan waar ik niet uitkom.
Het is een vrij complex verhaal die ik in dit bericht niet geheel uit de doeken doe daar het anders denk ik een heel verhaal word.
Wat ik graag wil is een getal in kolom B aftrekken van een getal in kolom A, en die neer zetten in kolom C. Ja duh, hoor ik je denken dat is niet moeilijk. Nee, dat klopt maar dan komt het ...............
Ik heb een bestandje bijgevoegd met daarin wat meer tekst en uitleg waardoor het (hoop ik) wat meer duidelijkheid schept.
Ik hoop dat we eruit komen.

Bekijk bijlage Lastige formule of VBA.xlsx

Groeten,
Abel Visscher
 
Je kan eens nadenken over een gestructureerde invoer van de data. In jouw vorige vraag was dit ook al 'een puinhoop'. Leg het gewoon in een tabel vast. Het heeft dus niets met lastige formules of VBA te maken alleen met het correct vastleggen van de kilomerregistratie. Door wie of wat worden de waarden in jouw bestand gezet?
 
Of in oplossingen denken.
Zowel in formule als Vba.

De formule is ook goed, maar komt niet overeen met de juiste rij.
De Vba oplossing wel.
 

Bijlagen

  • Lastige formule of VBA.xlsb
    15,2 KB · Weergaven: 57
Harry, heel mooi die VBA met die Areas

Ik heb er een oplossing met een vba function: zie grijze cellen.
 

Bijlagen

  • Lastige formule of VBA met function.xlsb
    16 KB · Weergaven: 60
Dank Sylvester,

Ik zal vanavond eens kijken of ik het in een array kan zetten (als er geen reacties meer zijn).
Nog niet aan gedacht.

Dacht in eerste instantie aan een oplossing.
Daarna volgen de verbeteringen vanzelf.
 
Beste mensen,

Allereerst dank voor de aangeboden opmerkingen, ideeën en oplossingen. Ik ga er vanavond (hoop ik) wat uitgebreider naar kijken en het een en ander vergelijken. Ik heb al snel even tussen de werkzaamheden door wat gezien en dat oogt goed.

Groeten,
Abel Visscher
 
@Sylvester,

Helaas zit er een foutieve berekening in op rij 12 van je bestand.
Misschien moet je het nog eens nakijken.

Ik heb het eens in een array gezet, maar of we daar nu iets mee opschieten?
Code:
Sub hsv()
Dim sn, area, y As Long, i As Long
sn = Cells(1).CurrentRegion.Resize(, 3)
Set area = Columns(2).SpecialCells(2).Areas
 For i = 2 To UBound(sn)
  If sn(i, 1) <> "" And IsNumeric(sn(i - 1, 2)) And sn(i - 1, 2) <> "" Then
     y = y + 1
     sn(i - 1, 3) = sn(i, 1) - Application.Sum(area(y))
    Else
     sn(i - 1, 3) = IIf(Not IsNumeric(sn(i - 1, 3)), sn(i - 1, 3), sn(i, 1))
  End If
 Next i
 Cells(1).Resize(UBound(sn), 3) = sn
End Sub
 
Geachte heren,

Even een update. Ik heb de door jullie voorgedragen voorbeelden bekeken en zo ook geprobeerd deze te begrijpen. Ik kom een heel eind maar ik ben nou eenmaal geen expert op dit gebied, dat laat ik graag aan mensen zoals jullie over.
De oplossingen die HSV onder #3 aangaf doen volgens mij wel hun werk, waarbij de VBA optie mijn voorkeur heeft. De oplossing van Sylvester is ook prima, sterker nog deze heeft mijn voorkeur omdat deze makkelijker in gebruik is. Je kunt hem makkelijk overal toepassen. Echter HSV zag dat daar een fout in zit, had ikzelf nog niet gezien. Nu komt HSV met een nieuw voorstel die heb ik in mijn bestand geplakt maar geeft een foutmelding nr. 9 (het subscript valt buiten het bereik) in de volgende lijn.

sn(i - 1, 10) = IIf(Not IsNumeric(sn(i - 1, 3)), sn(i - 1, 3), sn(i, 1))

Bekijk bijlage Lastige formule of VBA met function3.xlsb

ik voeg maar weer een bestandje bij met Sub HSV2() erin verwerkt.
 
Laatst bewerkt:
sn(i,3) is de max bij
Code:
 sn = Cells(1).CurrentRegion.Resize(, [COLOR=#ff0000]3[/COLOR])

sn(i,9) valt dus buiten het bereik. ;)

Als je voorkeur uitgaat naar de UDF:

Code:
Function MijnVerrekening(RekenKolommen As Range)
    Dim R As Range
    Set R = Intersect(Application.Caller.EntireRow, RekenKolommen.Columns(1))
    If R(2) = "" Then MijnVerrekening = "": Exit Function
    MijnVerrekening = R(2)
    If R(, 2) <> "" Then
      Do
        MijnVerrekening = MijnVerrekening - R(, 2)
        Set R = R(0)
      Loop Until R <> ""
   End If
End Function
 
Laatst bewerkt:
Dan begrijp ik het nog niet helemaal. Ik wilde namelijk de waarden in kolom "J" projecteren.
Wat moet ik dan aanpassen?
 
Code:
Cells(1[COLOR=#ff0000], 10[/COLOR]).Resize(UBound(sn), 3) = sn

Heb je de aangepaste UDF van Sylvester in mijn vorig schrijven nog getest?
 
Hallo Harry,

Ik ga daar morgen naar kijken, ga zo in mijn mandje. Iig dank voor je hulp.
Je hoort van mij.
 
Goedemorgen,

Ik heb de nieuwe functie ook getest, maar dat gaat nog niet helemaal goed. Zie bijgevoegd bestand.
Zo moet er in A2 een getal staan (0 is goed) anders gaat de eerste berekening fout.
 

Bijlagen

  • TestFunctie3.xlsm
    15,4 KB · Weergaven: 37
de function is verbeterd: :eek: sorry ik had hem beter moeten testen
 

Bijlagen

  • Lastige formule of VBA met function 2.xlsb
    16,2 KB · Weergaven: 43
Laatst bewerkt:
Hallo Sylvester,

Wederom dank voor je reactie. Dat met die "0" is opgelost echter de berekening klopt nog niet helemaal.
Ik voeg een nieuw bestand bij met de aanpassingen die door jou gemaakt zijn. Ik heb beide functies laten staan onder MijnVerrekening1 (oud) en MijnVerrekening2 (nieuw). Zo kun je de verschillen direct zien. Ik hoop dat het zo wat duidelijker word. In kolom "C" staan de uitkomsten zoals het zou moeten worden.

Bekijk bijlage TestFunctie4.xlsm
 
Sylvester, mijn dank is groot. Bedankt voor de oplossing, dit is wat ik bedoel.
Je hebt mij enorm geholpen

Ook de andere mensen bedankt voor het meedenken en het aandragen van oplossingen.

Groeten uut Grunn.
 
@sylvester-ponte, :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan