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

Celwaarde plus 1 in andere cel

Status
Niet open voor verdere reacties.

TimExcel

Gebruiker
Lid geworden
8 jul 2016
Berichten
21
Hallo,

Mijn vraag is lastig uit te leggen, vandaar voorbeelden:
Code:
   For Each cl In Range("B:B")
      If cl.Value = 1 Then
        b = cl.Offset(0, 1)
  End If
         If cl.Value = 2 Then
        cl.Offset(0, 2) = b
      End If
    Next
Deze code zorgt ervoor dat als er een waarde '1' in kolom B gevonden wordt, de waarde van de cel hiernaast wordt geplakt in een cel naast een waarde '2' in kolom B.
Ik wil dat VBA zorgt dat dit automatisch voor alle waarden gebeurt, dus in andere woorden: als er een 7 in kolom B staat, wordt de waarde van de cel ernaast gekopiëerd en geplakt in een cel naast de waarde 8.
Hiervoor heb ik een theoretische code opgesteld:
Code:
Sub algemeen()
   For Each cl In Range("B:B")
      If cl.Value = a Then
        b = cl.Offset(0, 1)
  End If
         If cl.Value = a + 1 Then
        cl.Offset(0, 2) = b
      End If
    Next
End Sub
De code werkt alleen niet, omdat de 'a' niet wordt herkend als willekeurige waarde en dus automatisch a+1 niet wordt gezien als deze waarde +1.

Weet iemand hoe ik dit wel kan laten werken?

EDIT:
Dit is wat ik uiteindelijk wil hebben:
Code:
Niveau             Component              Parent
0                  0000
1                  1000                    0000
  2                1001                    1000
     3             1002                    1001
1                  1003                    0000
  2                1004                    1003
    3              1005                    1004 
  2                1006                    1003
    3              1007                    1006
      4            1008                    1007


Alvast bedankt
 

Bijlagen

Laatst bewerkt:
Kijk eens wat dit doet.
Doe het wel op een test bestandje, voordat je echte bestandje de mist in gaat.
Code:
Sub algemeen()
teller = 0
  For i = 2 To 8
    For Each cl In Range("B2:B20")
      If Range("B" & i).Value = teller Then
        b = cl.Offset(0, 1)
      End If
        If cl.Value = Range("B" & i) Then
          cl.Offset(1, 2) = b
        End If
    teller = teller + 1
    Next
  Next
End Sub
 
excel.png
Dit is de output die het geeft. Gaat al de goede kant op, maar ik krijg te veel cijfers, 1 cel blijft overgeslagen en tevens zijn alle nieuwe waarden 1000. Zou je de code uit willen leggen?
Dan ga ik er ook meteen mee aan de slag
 
Als ik het zo lees lijkt het probleem te liggen bij
Code:
teller = 0
Hierdoor neemt ie de waarde van de cel achter 0, wat 1000 is.
 
Denk dat het nu klopt.
Code:
Sub algemeen()
teller = 0
  For Each cl In Range("B2:B20")
    For i = 2 To 8
      If Range("B" & i).Value = teller Then
        b = Range("B" & i).Offset(0, 1)
      End If
      For Each cl1 In Range("B3:B20")
        If cl1.Value = teller + 1 Then
          cl1.Offset(0, 2) = b
        End If
      Next
      teller = teller + 1
    Next
  Next
End Sub
 

Bijlagen

Laatst bewerkt:
Ik heb de code iets aangepast
Code:
Sub test2()

teller = 0
  For Each cl In Range("B2:B20")
    For i = 2 To 50
      If Range("B" & i).Value = teller Then
        b = Range("B" & i).Offset(0, 1)
      End If
      For Each cl1 In Range("B3:B20")
        If cl1.Value = teller + 1 Then
          cl1.Offset(0, 2) = b
        End If
      Next
      teller = teller + 1
    Next
  Next
End Sub

Maar ik krijg nog niet helemaal de juiste waarden:
excel.png
Dit komt omdat bijvoorbeeld de waarde bij de eerste 2 wordt gekozen, en niet die waaronder het niveau valt.
Bijvoorbeeld:
0-1-2-3-1-2-3-2-3
In dit rijtje valt niveau 3 onder niveau 2, en valt de 2e niveau 3 weer onder de tweede niveau 2.
 
Ik zal het even uitleggen hoe het komt.

Je vertelde eerst dat bij de 1 het getal van 0 moest komen en dat gebeurd.
Bij de 2 komt dan het getal van 1.
De macro gaat het bereik controleren op een getal en plaats daar de inhoud van b in.

Je laat nu zien in je voorbeeld dat je na de 9 weer opnieuw wil beginnen, dus na de 9 klopt het niet meer.
Dus zal je daar wat aan moeten doen.
 
Kan hier niet een makkelijkere oplossing voor zijn? In principe heb ik alleen een term nodig die een nog onbekende waarde beschrijft.
Code:
Sub algemeen()
   For Each cl In Range("B:B")
      If cl.Value = [EEN WAARDE DIE IN DE CEL STAAT] Then
        b = cl.Offset(0, 1)
  End If
         If cl.Value = [EEN WAARDE DIE IN DE CEL STAAT] + 1 Then
        cl.Offset(0, 2) = b
      End If
    Next
End Sub
 
Ik heb je al verteld dat ik geen VBA specialist ben en weet hier dus even geen oplossing voor.
Kan je niet doortellen, dan is het probleem ook opgelost.

Heb je trouwens de gehele kolom als range nodig?
Het duurd natuurlijk erg lang voordat hij alle cellen heeft gehad.

Ik wens je veel suc6 met het vinden van een oplossing.
 
Laatst bewerkt:
Ik heb een nu een code opgesteld die bijna moet werken. Loop alleen op een klein punt vast
Code:
Sub test3()
getal = [COLOR="#FF0000"]hier moet een getallenreeks van 0 tot 100 komen[/COLOR][B][/B]
    For Each cell In Range("B:B")
    If cell.Value = waarde Then
    b = cell.Offset(0, 1)
End If
    If cell.Value = getal + 1 Then
     cell.Offset(0, 2) = b
 End If
 Next
 End Sub
nu kan ik wel opschrijven
Code:
getal = 0 AND1 AND 2 ... AND 100
Maar dat is gewoon veel werk. Hoe kan ik een range korter opschrijven? 0 To 100 werkt helaas niet.
 
Laatst bewerkt:
Met een voorbeeldbestandje (dat uit je laatste plaatje, helpers houden niet van nabouwen) wordt je sneller en beter geholpen.
 
En waar haal je in #11 de inhoud voor de variabele waarde vandaan?
 
Je gebruikt een variabele met de naam "waarde". Daar was ik benieuwd naar.
 
zie het nu ook ja, sorry. zijn dezelfde variabelen, is een typfout van mij

Code:
Sub test3()
waarde= hier moet een getallenreeks van 0 tot 100 komen
    For Each cell In Range("B:B")
    If cell.Value = waarde Then
    b = cell.Offset(0, 1)
End If
    If cell.Value = waarde+ 1 Then
     cell.Offset(0, 2) = b
 End If
 Next
 End Sub
 
En hoe ziet de inhoud van de "waarde" er dan uit?
Zo?
"1,2,3,4,5,6,7,8,9,10" maar dan t/m 100?
 
ja, in principe moet elke waarde mogelijk zijn voor deze variabele, maar omdat dit getal nooit hoger zal zijn dan 100 is een range tot en met 100 meer dan zat
 
Dan kan je die eenvoudig zo vullen:
Code:
For i = 0 To 100
    waarde = waarde & "," & i
Next i

Dan ziet waarde er zo uit:
Code:
,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan