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

excel VBA

Status
Niet open voor verdere reacties.

paulebal

Gebruiker
Lid geworden
16 sep 2008
Berichten
17
ik zit met een probleem, als ik een reeks getallen in hebt gevuld . dan moet er daarna op een of andere manier bepaald worden hoeveel getallen er positief zijn en hoeveel negatief. wie kan mij hierbij helpen. het volgende heb ik al gedaan.

Sub positiefofnegatief()
Dim f As integer, sompositief, somnegatief As integer

f = InputBox("geef getal")
f = InputBox("geef getal")
f = InputBox("geef getal")
f = InputBox("geef getal")
f = InputBox("geef getal")

sompositief = 0
somnegatief = 0
If f > 0 Then
sompositief = sompositief + 1
End If
If f < 0 Then
somnegatief = somnegatief + 1
End If

MsgBox somnegatief
msgbox sompositief
End Sub
 
Laatst bewerkt:
Als ik van jou was, zou ik eerst beginnen met een basiscursus VBA, meer bepaald hoe je met variabelen werkt. En wat de verschillende types van variabelen zijn: String, Long, Integer, ...

Dat gaat veel meer plezier opleveren dan dat iemand nu gewoon een oplossing geeft.
 
excel

ik heb hier een boek voor me neus, ik ben een beginner, ik heb al heel wat vragen opgelost maar hier kom ik gewoon niet uit
 
Dit kan toch niet goed gaan:

Code:
Dim f As Integer, sompositief, somnegatief As String

sompositief is niet expliciet gedeclareerd, dus wordt het een Variant. Op zich kan dat, maar als het een getal is, is String of Long beter.

En somnegatief is tekst?
 
Op zich kan dat, maar als het een getal is, is String of Long beter.
Ik neem aan dat je bedoelt Integer of Long.

@Paulebal.
Waarom geen verscheidene tellers in de code die bijhoudt hoeveel getallen zijn ingevoerd en hoeveel daarvan positief dan wel negatief zijn?

Code:
Dim lTeller As Long
Dim lPos As Long
Dim lNeg As Long
Dim lGetal As Long
    lGetal = InputBox("Geef een getal")
    If IsNumeric(lGetal) Then
    
'... Je code
    
    End If

Aangezien het huiswerk is, mag je de rest zelf afmaken.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
die code is juiste het probleem
Daar is het ook huiswerk voor:thumb:
Probeer eens wat te maken. Het heeft totaal geen nut als wij de code gaan voor kauwen.

Wat je nog moet doen is:
  1. Lus om de getallen in te kunnen voeren
  2. De tellers op laten tellen
  3. Een bericht laten zien van het aantal ingevoerde getallen en het aantal positieve en negatieve getallen.

Vragen die je voor jezelf moet stellen:
Ad 1, Welke soort lus zou je gebruiken (onvoorwaardelijke lus zoals For ... Next, voorwaardelijke lus zoals While ... Wend)?
Ad 2. Hoe tel je tellers op?
Ad 3. Waarmee toon je een informatiebericht?

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
tellers op tellen?

ik zou als lus if and then gebruiken

als resultaat zou ik
dim antwoord as vbmsgboxresult gebruiken,

maar het probleem is de positieve en negatieve getallen apart op tellen
 
De MsgBox'en die je al hebt zijn goed.

De IF...THEN...ELSE is niet echt een lus. Maar je kan het wel gebruiken om uit een lus te gaan. En je zal dit moeten gebruiken als je niet weet hoeveel getallen de gebruiker zal ingeven. Weet je dat aantal wel, dan is een IF om uit de lus te gaan, niet echt nodig (tenzij evt. als je de gebruiker de mogelijkheid laat om minder dan het opgelegde aantal getallen in te vullen).

Wigi
 
ik zou als lus if and then gebruiken

als resultaat zou ik
dim antwoord as vbmsgboxresult gebruiken,

maar het probleem is de positieve en negatieve getallen apart op tellen

Ik neem aan dat het niet zeker is hoeveel getallen de gebruiker in gaat voeren dus je kunt de IF gebruiken om de vragen of de gebruiker klaar is met invoeren of dat hij/zij nog meer getallen in gaat voeren.
Ik heb de positieve en negatieve tellers al gedefinieerd. Je kunt dus wéér de IF functie gebruiken om te bepalen of een getal positief danwel negatief is. Die uitkomst kan je gebruiken om de teller te verhogen.

Met vriendelijke groet,


Roncancio
 
bijna

ik heb nu dit, de reeks moet stoppen als ik het getal 0 heb ingevuld. ik krijg alleen geen goed antwoord eruit. kan iemand me vertellen dat ik op de goede weg zit.

Sub negenpos()

Dim Teller As Long
Dim Nteller As Long
Dim Pos As Long
Dim Neg As Long
Dim Getal As Long
Dim antwoord As VbMsgBoxResult

Do
Getal = InputBox("Geef een getal")
Loop While Getal <> "0"

Teller = 0
If Getal > 0 Then
Teller = Teller + 1
End If

If Getal < 0 Then
Nteller = Nteller + 1
End If

antwoord = Teller
MsgBox antwoord

antwoord = Nteller
MsgBox antwoord

End Sub
 
Jouw lus stopt veel te snel.

Code:
Sub negenpos()

    Dim Teller As Long
    Dim Nteller As Long
    Dim Getal As Long

    Do
        
        Getal = InputBox("Geef een getal")
        
        If Getal > 0 Then
            Teller = Teller + 1
        ElseIf Getal < 0 Then
            Nteller = Nteller + 1
        Else
            Exit Do
        End If
        
    Loop
    
    MsgBox "Je gaf " & Teller & " keer een positief getal in, " & Nteller & " keer een negatief getal.", vbInformation

End Sub

Wigi
 
loop

dus loop ( de lus) moet dus helemaal onderaan komen te staan, zodat de lus de gehele tekst omvat.

ik hoop dat ik op een dag ook zo goed in excel wordt

bedankt
 
ik heb nu dit, de reeks moet stoppen als ik het getal 0 heb ingevuld. ik krijg alleen geen goed antwoord eruit. kan iemand me vertellen dat ik op de goede weg zit.

Sub negenpos()

Dim Teller As Long
Dim Nteller As Long
Dim Pos As Long
Dim Neg As Long
Dim Getal As Long
Dim antwoord As VbMsgBoxResult

Do
Getal = InputBox("Geef een getal")
Loop While Getal <> "0"

Teller = 0
If Getal > 0 Then
Teller = Teller + 1
End If

If Getal < 0 Then
Nteller = Nteller + 1
End If

antwoord = Teller
MsgBox antwoord

antwoord = Nteller
MsgBox antwoord

End Sub

De loop staat verkeerd. Je moet de loop gebruiken om de tellers op te tellen.
Bovendien moet je nagaan of men wel een getal invoert. ICT-docenten typen vaak als eerste een letter in als een getal gevraagd wordt.
Tevens zou ik de Teller = 0 weghalen omdat je dan altijd op 0 uitkomt.
Ik neem aan dat je het programma ook zelf gedraaid hebt. Als je een letter invoert krijg je een foutmelding.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
teller

ik dacht dat als ik teller = 0 schrijf , begint ie te tellen vanaf nu maar dat gebeurt dus automatisch
 
ik dacht dat als ik teller = 0 schrijf , begint ie te tellen vanaf nu maar dat gebeurt dus automatisch

Inderdaad. Als je Teller = 0 verwijdert, begint Teller alsnog vanaf 0 te tellen.

Met vriendelijke groet,


Roncancio
 
Binnen jouw lus (Do...Loop) worden er getallen gevraagd, maar daar gebeurt niets mee.

Excel slaat die nergens op als die niet in een variabele of in een array of ergens op het werkblad ... komen. Daarom moet er dus veel meer BINNEN je lus staan.
 
Laatst bewerkt:
Of
Code:
Sub test()
  On Error GoTo XL0
  Do
    pos = pos & IIf(InputBox("Geef een getal") < 0, 0, 1)
  Loop
XL0:
  MsgBox "aantal positief : " & Len(pos) - Len(Replace(pos, "1", "")) & vbCr & "aantal negatief : " & Len(pos) - Len(Replace(pos, "0", ""))
End Sub
De lus stop als je niets invoert, op annuleren klikt of de inputbox sluit zonder iets in te voeren.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan