Doelstelling gelijk aan 100 OF (>) OF (<)

Status
Niet open voor verdere reacties.

Royzilla

Gebruiker
Lid geworden
10 apr 2014
Berichten
187
Beste helpmij-ers,

Ik heb een vraagje, in het bijgevoegde bestandje heb ik een functie staan.
In die functie staan 2 if-statements die ik wil aanpassen. Er wordt gekeken of er een = in staat en een > of < teken.

Dit werkt niet omdat je niet kan checken of er 2 Karakters in staan.

Ik wil het liefst een select case waarmee gecheckt wordt OF er een = en > instaat OF een = en < instaat.

Mocht het wat onduidelijk zijn dan hoor ik het wel.
Bekijk bijlage testOpgave.xlsm
 
Het is iets makkelijk op te lossen, volgens mij.
 

Bijlagen

Goedemorgen,

Sorry voor mijn late reactie.

Als ik zo naar dat stukje code kijk snap ik niet echt precies wat er gedaan wordt. Maar zou die ook niet 1 of 0 in de kolom onder januari kunnen zetten? want dan zou het compleet zijn.

Alvast bedankt voor je tijd en moeite :)
 
Wat dacht je ervan om de opmaak van G3 en G4 met het opmaak kwastje te plakken naar E3 en E4? Gebruik je die ook eens :).
 
Die functie stond al in de cel.
Hij deed het gewoon goed alleen stonden die cellen op percentage ingesteld en de andere op General :)!

Zou je me een beetje kunnen uitleggen wat de functie precies voor handelingen doet? Want dit zit er wel goed uit en dit wil ik graag toepassen op meerdere sheets :) toch wel handig als ik het dan snap :D

Thanks!
 
De functie ziet er zo uit, voor de meelezers:
Code:
Public Function Opgave(Doelstelling As Range, Gehaald As Range)
Dim i As Integer
Dim tmp As Variant

    tmp = Split(Replace(Replace(Doelstelling, "(", ""), ")", ""), " ")
    Select Case tmp(UBound(tmp))
        Case ">="
            Opgave = IIf(Gehaald.Value >= (c10 / 100), 1, 0)
        Case "<="
            Opgave = IIf(Gehaald.Value <= (c10 / 100), 1, 0)
    End Select
End Function

Ik gebruik de SPLIT opdracht om de tekst van de broncel in hapklare brokken te scheiden (tmp = Split(Replace(Replace(Doelstelling, "(", ""), ")", ""), " ") ). Daarbij wil ik de () niet hebben, dus die worden er met REPLACE uitgehaald en vervangen door niks. Replace mag je nesten, dus de eerste Replace (die ( er uit haalt) zit als bron in de tweede. Het resultaat is dan een tekst met alleen spaties en dat wordt dus gesplitst in een Array variabele (tmp).
Daarvan is alleen het laatste stuk belangrijk, dus je kijkt in de Select Case alleen naar de laatste positie. tmp(UBound(tmp)) kijkt dus naar de variabele tmp, en met UBound(tmp) zoek je de hoogste waarde op. De rest van de functie had je al :).
 
Nu moet ik even nog iets melden.

als een percentage 0.53% is dan wordt die in de cel neergezet als 0% maar de functie ziet de 'punt' blijkbaar niet staan dus weet die ook niet dat het een decimaal getal is. Hij geef namelijk aan dat het een 1 is, terwijl dat die alles onder de 100 0 moet geven.

Toen ik de functie invoegde in me applicatie dacht ik dat het gewoon werkte, maar later zag ik het opeens.
Hoe zou ik dit kunnen oplossen?
 
Ik snap je vraag niet; zet hem eens in een voorbeeldje, of leg wat beter uit wat je bedoelt.
 
Wacht ik heb het werkend gekregen. Dit was wat ik had:
Code:
Public Function Opgave(Doelstelling As Range, Gehaald As Range)

Dim i As Integer
Dim tmp As Variant

    tmp = Split(Replace(Replace(Doelstelling, "(", ""), ")", ""), " ")
    
    Select Case tmp(UBound(tmp))
        Case ">="
            Opgave = IIf(Gehaald.Value >= (c10 / 100), 1, 0)
        Case "<="
            Opgave = IIf(Gehaald.Value <= (c10 / 100), 1, 0)
    End Select
    
End Function

Dit is wat ik erbij heb toegevoegd:
Code:
Public Function Opgave(Doelstelling As Range, Gehaald As Range)

Dim i As Integer
Dim tmp As Variant

    For i = 1 To Len(Doelstelling.Value)
        
        If IsNumeric(Mid(Doelstelling, i, 1)) Then c10 = c10 & Mid(Doelstelling, i, 1)
       
    Next

    tmp = Split(Replace(Replace(Doelstelling, "(", ""), ")", ""), " ")
    
    Select Case tmp(UBound(tmp))
        Case ">="
            Opgave = IIf(Gehaald.Value >= (c10 / 100), 1, 0)
        Case "<="
            Opgave = IIf(Gehaald.Value <= (c10 / 100), 1, 0)
    End Select
    
End Function

Dit werkt nu prima, dankjewel voor je tijd! :D
 
Ik snap niet wat je aan het doen bent, laat staan waarom en al helemaal niet waarom op deze manier (heb maar een klein snappie), maar als je gelukkig bent, dan ben ik het ook :).
Maar een simpele tip: c10 (die overigens nergens gedeclareerd wordt, maar daar zul je vast een goede reden voor hebben) kun je ook aanpassen vanuit tmp(LBound(tmp)), en dat lijkt mij een betere aanpak.
 
Hmm hoe zou ik dat dan kunnen doen met tmp(LBound(tmp))

Wat ik met deze functie nu kan is het volgende:
Er wordt gecontroleerd op de percentage en de symbolen in de cellen. dit bestandje is maar een heel klein voorbeeld hoor. ik heb meerdere functie die hele tabellen doorlopen.
Maar de 1 en 0 krijgen een voorwaardelijke opmaak zodat de 1 groen gekleurd wordt en de 0 rood. Dit is overzichtelijker met controleren op de data.

Het is eigenlijk allemaal om het een heel stuk overzichtelijker te maken :)
 
Ik weet nog steeds niet waar je die 0,53% neerzet; als die in de cel Doelstelling staat, dan wordt die al uitgelezen en gesplitst in de variabele tmp. Aanpassen ervan is dus simpel een kwestie van de eerste positie (tmp(LBound(tmp)) op te vragen en te bewerken. Jij loopt nu door de hele string heen op zoek naar een cijfertje dat je dan in c10 zet. Dat kan dus slimmer als je tmp uitleest.
 
De waardes onder de maanden in mijn voorbeeldje dan 0.53% komen uit een andere sheet. Er kunnen maanden geselecteerd worden uit een combobox, deze hebben een range met de bijbehorende records. Dit wordt gekopieerd als er dus een maand geselecteerd is. De doelstellingen blijven altijd hetzelfde. De records worden beoordeeld aan de hand van de doelstellingen of het goed of fout is. Ik hoop dat ik mn idee zo een beetje uitgelegd heb. :)

Ik zou dus zoals ik hieruit opmaak c10 kunnen vervangen door : (tmp(LBound(tmp))?
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan