501. Schrijf de functie converteer(getal, van, naar). De parameters 'van' en 'naar' kunnen zijn : centimeters, meters, inches. Dus, de functie converteer(100,"centimeter","meter") moet als waarde 1 teruggeven (een inch is gelijk aan 2.54 centimeter).

Analyse van de opgave: De opgave zegt niets over de mogelijke waarden van het te converteren getal. Aangezien het kan uitgedrukt worden in centimeters is het aangeraden om een variabele met een groot bereik te nemen. We gaan ervan uit dat het een geheel getal moet zijn, dus opteren we voor het Long datatype. De functie kan wel een decimaal getal als resultaat teruggeven.

De gebruiker kan kiezen tussen meter, centimeter en inch als eenheid. Wat moet er echter gebeuren als de gebruiker een typfout maakt. We veronderstellen dat de functie dan de waarde 0 teruggeeft. Een uitbreiding zou kunnen zijn dat de functie in het werkblad de foutboodschap #waarde! teruggeeft.

De omzetting naar dezelfde eenheid moet mogelijk zijn (alhoewel nutteloos). Dus, de functie converteer(100,"meter","meter") moet het resultaat 100 opleveren.

De opgave vermeldt alleen dat een functie moet geschreven worden. Om de functie uit te testen zullen we ook een testprocedure voorzien. Bovendien stellen we de bijkomende eis dat de functie ook moet kunnen opgeroepen worden vanuit het werkblad.

Oplossing: U kunt het programma in werking zien aan de hand van dit Excel werkboek. Het PSD en de code is hieronder gegeven. De tekening met Easycode is zeer uitgebreid. Merk op dat u in EasyCode met het menu File Properties een andere layout kunt kiezen voor de selectiestructuur.

Function convert(lengte As Single, bron As String, doel As String) As Single
    Dim resultaat As Single
    convert = 0
    If bron = "meter" Then
        If doel = "centimeter" Then
            resultaat = lengte * 100
        Else
            If doel = "inch" Then
                resultaat = lengte / 2.54
            Else
                If doel = "meter" Then
                    resultaat = lengte
                Else
                  resultaat = 0
                End If
            End If
        End If
    Else
        If bron = "centimeter" Then
            If doel = "meter" Then
                resultaat = lengte / 100
            Else
                If doel = "inch" Then
                    resultaat = lengte / 2.54
                Else
                    If doel = "centimeter" Then
                        resultaat = lengte
                    Else
                         resultaat = 0
                    End If
                End If
            End If
        Else
            If bron = "inch" Then
                If doel = "meter" Then
                    resultaat = lengte * 2.54 / 100
                Else
                    If doel = "centimeter" Then
                        resultaat = lengte * 2.54
                    Else
                        If doel = "inch" Then
                            resultaat = lengte
                        Else
                             resultaat = 0
                        End If
                    End If
                End If
            Else
                 resultaat = 0
            End If
        End If
    End If
    convert = resultaat
End Function

Sub oef501()
    Dim lengte As Single, bron As String, doel As String
    lengte = InputBox("Geef te converteren lengte (getal)")
    bron = InputBox("Geef parameter 1 (meter, centimeter, inch)")
    doel = InputBox("Geef parameter 2 (meter, centimeter, inch)")
    MsgBox convert(lengte, bron, doel)
End Sub

Analyse van de oplossing: men kan de functie zowel oproepen vanuit de VBA testprocedure als vanuit het werkblad. Indien men met 'functie invoegen' werkt, kan de gebruiker zowel een celreferentie als een constante invoeren. Bijvoorbeeld, bij de parameter lengte kan de gebruiker zowel de cel E20 intypen als het getal 100. Voor de eenheden kan dit eveneens. Bij de constante zou men eigenlijk de string "meter" (met aanhalingstekens) moeten ingeven. Indien men dat niet doet, corrigeert Excel de input. Dit gebeurt echter niet als men zelf de functie volledig intypt in het werkblad. Het volgende levert dus een fout: =convert(100;meter; inch). De correcte syntax is: =convert(100; "meter";"inch").

©  H. Schouppe
Laatste wijziging: 2004-05-12