Numeriek cellen aanwijzen (met behulp van i)

Status
Niet open voor verdere reacties.

BartFr

Gebruiker
Lid geworden
18 jan 2012
Berichten
37
Hallo allemaal,

Ik probeer om met VBA op een numerieke wijze cellen aan te wijzen.
Ik zoek data op in een cel. Voldoet die ergens aan, dan maak ik (voor nu) range("J27") gelijk aan 1 (dit is puur om te testen).
De eerste data staat dus in F11. De volgende data staat in F12. etc. Dit moet voor een hele reeks, en ook staat niet alle data +1 van elkaar af, dus dan gebruik ik i+3 bijvoorbeeld. Maar omdat deze lijst aangevuld kan worden in de toekomst, moet ik het nu op deze manier proberen te programmeren.

Wat ik nu heb:

Code:
For i = 11 To 20

    If Sheets("Configuration generator").Range("F" & i) = "=No Jib" Then
        Range("J27") = 1
    ElseIf Sheets("Configuration generator").Range("F" & i) = "=Extended" Then
        Range("J27") = 1
    ElseIf Sheets("Configuration generator").Range("F" & i) = "=Retracted" Then
        Range("J27") = 1
    End If

 Next i

Alleen hier gebeurt niks mee.
Ik vermoed dat ik of i moet definieren, of dat er fundamenteel iets fout zit.
Ik hoop dat mijn verhaal duidelijk is.
Alvast bedankt voor de hulp!

Bart
 
Laatst bewerkt door een moderator:
Wat zijn dat voor een waarden waarmee je aan het vergelijken bent? "=No Jib" kan bijvoorbeeld geen formule zijn omdat er een spatie in zit en als het een waarde in het veld is hoort dat = teken er niet in thuis, tenzij er in de cel nog een ' teken voor staat.
 
Hallo,

Ik heb een bijlage gemaakt waarin beter staat uitgelegd wat ik wil.

Bijbehorende code:

Code:
For i = 4 To 30

If Sheets("Sheet1").Range("D" & i) = "=Wheels" Then
Range("F4") = 1
ElseIf Sheets("Sheet1").Range("D" & i) = "=Trunk" Then
Range("F4") = 1
ElseIf Sheets("Sheet1").Range("D" & i) = "=Lights" Then
Range("F4") = 1
End If

i = i+1

If Sheets("Sheet1").Range("D" & i) = "=Wheels" Then
Range("F5") = 1
ElseIf Sheets("Sheet1").Range("D" & i) = "=Frame" Then
Range("F5") = 1
ElseIf Sheets("Sheet1").Range("D" & i) = "=Seat" Then
Range("F5") = 1
End If

Next i
Bekijk bijlage Test for forum.xlsx
 
Dan moet je dus inderdaad die = tekens verwijderen. Dus niet = "=Wheels" maar = "Wheels".

De controle zou ik trouwens zo doen:

Code:
Select Case Sheets("Sheet1").Range("D" & i)
    Case "Wheels", "Trunk", "Lights", "Frame", "Seat"
	Range("F4") = 1
End Select

Dan moet je alleen nog even bepalen of het F4 of F5 moet zijn die op 1 moet worden gezet.
De voorwaarde ervoor kan ik zo niet ontdekken.
 
Laatst bewerkt:
Dat was wel heel simpel.... heel erg bedankt!

Meteen een volgende vraag:

VBA verwacht dat ik "afsluit" met next.

Ik heb daar nu next i staan.

Maar eigenlijk wil ik dat hij aan het einde van de rit de i weer reset naar 4 (de begin i).

Hoe kan ik dat er in verwerken?

Bedankt nogmaals!

Bart
 
Zie de aanvulling op mijn vorige post.
 
Met deze macro zou het moeten werken. Gebruik bij voorkeur Select Case als je meerdere voorwaarden wilt checken, dat houdt je code een stuk overzichtelijker.
Code:
Sub test()
Dim sht As Worksheet

    Set sht = ActiveSheet
    For i = 4 To 30
        Select Case sht.Range("D" & i)
            Case "Wheels", "Trunk", "Lights"
                [F4] = [F4] + 1
        End Select
        Select Case sht.Range("D" & i + 1)
            Case "Wheels", "Frame", "Seat"
                [F5] = [F5] + 1
        End Select
    Next i
    
End Sub
Ik heb van F4 en F5 overigens een tellertje gemaakt :).
 
Laatst bewerkt:
Hier snap ik niet helemaal wat er gebeurt..

is dit iets wat ik achter Next zou moeten plakken o.i.d.?

Dat ik nu F4 op 1 zet is puur even ter controle. Hier komt een hele berekening achter, maar daar staat e.e.a. in wat niet openbaar hoor te zijn, vandaar dus even zo.

Bart
 
Ik kan natuurlijk niet zien wat je bedoeling dan wél is :). Kan alleen op basis van wat jij aanlevert een oplossing geven. En dat geldt voor de anderen ook.
Ik heb de procedure naar een nieuwe module verplaatst, en verder (net als edmoor) de Select case gemaakt. Hij was nét iets sneller als ik :).
Maar je zult toch even moeten uitleggen wat dan wél de bedoeling is...
 
Met deze macro zou het moeten werken. Gebruik bij voorkeur Select Case als je meerdere voorwaarden wilt checken, dat houdt je code een stuk overzichtelijker.
Code:
Sub test()
Dim sht As Worksheet

    Set sht = ActiveSheet
    For i = 4 To 30
        Select Case sht.Range("D" & i)
            Case "Wheels", "Trunk", "Lights"
                [F4] = [F4] + 1
        End Select
        Select Case sht.Range("D" & i + 1)
            Case "Wheels", "Frame", "Seat"
                [F5] = [F5] + 1
        End Select
    Next i
    
End Sub
Ik heb van F4 en F5 overigens een tellertje gemaakt :).

Bedankt voor je reactie!!

Om met Select Case te werken, wordt het inderdaad overzichtelijker.
Maar in mijn geval: Als D4 Wheels is, dan moet er een berekening plaatsvinden, als D4 Trunk is, komt er een hele andere berekening etc.
Dat kan ik hieruit niet halen toch? Dan krijg je alsnog een If statement volgens mij?

Bart
 
Ik zal een poging doen het iets beter uit te leggen.

In mijn originele Excel file heb ik een tabel, soortgelijk als in het voorbeeld, maar dan uitgebreider. Iemand anders kan via de dropdowns in de C kolom keuzes maken. In mijn originele Excel file heb ik bijvoorbeeld ook boxes om aan te vinken.

Vervolgens komt in de kolom Quantity een waarde te staat. (in dit voorbeeld alleen tekst, maar in het geval van vink boxes, ook 1 of 0).
Hiermee ga ik werken.

Als quantity Trunk aangeeft, komt berekening A. Als Quantity Wheels aangeeft, komt berekening B etc.

Wat ik wil is dat ik een code schrijf, die werkt met een waarde i (bijvoorbeeld). Omdat ik heel veel tabellen heb, en deze ook verder uitgebreid gaan worden (meer tabellen), zou ik in de toekomst alleen de i aan moeten passen. De tabellen zullen qua omvang identiek zijn. Alleen de waardes in de tabel kunnen veranderd worden.

Dus afhankelijk van de keuzes die iemand maakt in de drop down, of met een vink box, gaat er een berekening plaatsvinden.

Omdat de gebruiker een tabel kan veranderen, vervolgens de code kan laten lopen (dus de berekening zien), daar niet tevreden mee zijn, zijn keuzes aanpast en nog eens de code laat lopen, moet i ook weer terug worden gezet naar zijn begintoestand. Anders dan staat i inmiddels op i+8 bijvoorbeeld.

Ik hoop dat ik hiermee meer duidelijk maak. Mocht dat niet zo zijn, ga ik proberen het anders uit te leggen!

Bart
 
Dan pas je daar de select case op aan:

Code:
Select Case sht.Range("D" & i)
    Case "Wheels"
        [F4] = [F4] + 1
    Case "Trunk"
        '....
    Case "Lights"
        Call MijnRoutine
End Select

Enz.
 
Laatst bewerkt:
Ik heb dit geprobeerd, alleen krijg ik altijd de waarde 2 voor F4 en de waarde 5 voor F5. Wat ik ook selecteer...

Code:
Sub test2()

Application.ScreenUpdating = False

Dim sht As Worksheet
Set sht = ActiveSheet

For i = 4 To 30

Select Case sht.Range("D" & i)
    Case "Wheels"
        Range("F4") = 1
    Case "Trunk"
        Range("F4") = 2
    Case "Lights"
        Range("F4") = 3
End Select

i = i + 1

Select Case sht.Range("D" & i)
    Case "Wheels"
        Range("F5") = 4
    Case "Seat"
        Range("F5") = 5
    Case "Frame"
        Range("F5") = 6
End Select

Next i

Application.ScreenUpdating = True

End Sub


Ik snap ook nog niet precies wat er gebeurt bij "next i"...

Bedankt voor alle hulp! Ik kom steeds verder. Bedankt.

Bart
 
Je controleert 2x op "Wheels". Verder hoort die i = i + 1 er niet in thuis omdat je daarmee de For loop beïnvloed.
Zoals ik al zei zul je zelf moet bepalen wanneer F4 dan wel F5 moet worden aangepast.

Next i betekend: Ga naar de de volgende iteratie van de For loop.
 
Bedankt weer voor de snelle reactie!

Ik moet nu helaas stoppen, maar woensdag ga ik weer verder en kom ik er op terug.

Heel erg bedankt voor de hulp en ik hoop tot woensdag!

Bart
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan