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

Automatisch cel-inhoud plakken met VB

Status
Niet open voor verdere reacties.

TimExcel

Gebruiker
Lid geworden
8 jul 2016
Berichten
21
Zoals in de afbeelding te zien heeft elk niveau een bijbehorend component. Ik probeer de component van niveau 0 in de parent van alle niveau's 1 te plakken. Dit lukt nu alleen nog maar bij de eerste niveau 1 (zie afbeelding), maar ik wil het dus laten gebeuren bij alle niveau's 1. Uiteindelijk moet dan de parent van elk niveau 1 '1000' worden in dit geval. Iemand een idee hoe ik dit automatisch kan laten gebeuren met VB?

Alvast bedankt
 

Bijlagen

  • excel.png
    excel.png
    96,7 KB · Weergaven: 47
Tim,

Men is hier niet zo blij met een plaatje, je kunt beter een voorbeeld plaatsen.
Maar probeer het eens met deze code;
Code:
Sub Macro5()
  For Each cl In Range("B2:B9")
    If cl.Value = 0 Then
      cl.Offset(0, 1).Copy cl.Offset(1, 2)
    End If
  Next
End Sub
 
Laatst bewerkt:
Tim,

Men is hier niet zo blij met een plaatje, je kunt beter een voorbeeld plaatsen.
Maar probeer het eens met deze code;
Code:
Sub Macro5()
  For Each cl In Range("B2:B9")
    If cl.Value = 0 Then
      cl.Offset(0, 1).Copy cl.Offset(1, 2)
    End If
  Next
End Sub

Bedankt voor de snelle reactie.
Deze code verandert vooralsnog slechts 1 niveau 1, en niet alle niveau 1's in de sheet.
Misschien een simpele versie hierop is
Code:
Sub Macro6()
niveau = Range("B2").Value
     If niveau = 0 Then
     
Range("D3").Value = Range("C2").Value
End If
End Sub

Maar alsnog, deze code verandert niet alle parents behorend bij alle niveau 1's. Hoe zorg ik dat alle parents veranderen?
 
Laatst bewerkt:
Quoten is niet nodig.

Ik denk dat ik je dan verkeerd begrepen heb.
Zet een voorbeeld met, zoals de uitkomst moet zijn.
Ben geen VBA specialist, dus denk niet dat ik je verder kan helpen.
 
Dit is wat ik uiteindelijk wil hebben:

[table="width: 500, class: grid"]
[tr]
[td]Niveau[/td]
[td]Component[/td]
[td]Parent[/td]
[/tr]
[tr]
[td]0[/td]
[td]1000[/td]
[td][/td]
[/tr]
[tr]
[td]1[/td]
[td]1001[/td]
[td]1000[/td]
[/tr]
[tr]
[td]2[/td]
[td]1002[/td]
[td][/td]
[/tr]
[tr]
[td]3[/td]
[td]1003[/td]
[td][/td]
[/tr]
[tr]
[td]1[/td]
[td]1004[/td]
[td]1000[/td]
[/tr]
[/table]

De parent van een niveau 1 wordt automatisch hetzelfde als de component van niveau 0.
 
Met een excel-voorbeeldbestandje wordt je sneller en beter geholpen.

Wie is de parent van nivo 2 en 3?
Waarom heeft de tweede nivo 1 wel weer een parent? om de de tweede nivo 1 weer lager is dan de voorgaande nivo 3?

Een iets uitgebreider voorbeeld (3 boompjes/trees) maakt veel duidelijker.
 
Laatst bewerkt:
De Parent van niveau 2 is weer de component van niveau 1, enz. Dit zit echter wat ingewikkelder in elkaar, dus dat laat ik nu even buiten beeld.

Het enige wat ik nu wil is dat elke parent van niveau 1 dezelfde waarde krijgt als de component van niveau 0. Dus waar niveau 1 ook staat en hoe veel het er ook zijn, elke niveau 1 krijgt een parent met dezelfde waarde als de component van niveau 0.
 
Is het zo beter?
Code:
Sub Macro5()

  If [B2] = 0 Then
    A = [C2]
  End If
  
    For Each cl In Range("B3:B9") 'Bereik aanpassen
      If cl.Value = 1 Then
        cl.Offset(0, 2) = A
      End If
    Next
    
End Sub
 
ExcelAmateur, bedankt! Deze werkt perfect.

Zou je willen uitleggen wat de code doet, zodat ik er zelf mee verder kan voor de volgende parents?
 
Hij kijkt of B2 0(nul) is, zo ja dan kopieert hij C2 naar de variabele A
Het 2e stukje gaat hij in de cellen van kolom B (de Range) kijken of er een 1 staat, zo ja dan plakt hij daar de inhoud van variabele A in.

Ik hoop dat ik het een beetje te begrijpen heb geschreven.
Er zijn hier helpers die de code veel beter kunnen schrijven dan ik. (bedoel dus de code korter)

Moet nu weg en wens je suc6
 
Ik ben weer thuis en heb onderweg over nagedacht.
De macro heb ik dus iets korter kunnen maken.
Dit doe ik meestal als de Macro werkt, met uitproberen.

Code:
Sub Macro5()

  If [B2] = 0 Then
    For Each cl In Range("B3:B9") 'Bereik aanpassen
      If cl.Value = 1 Then
        cl.Offset(0, 2) = [C2] 'is Range("C2") verkort
      End If
    Next
  End If
  
End Sub
 
Laatst bewerkt:
Ik heb hem nog algemener geschreven.
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
Hiermee kan ik ook met andere waarden werken en ben ik niet gelimiteerd tot een bepaalde cel, maar neem ik de hele kolom mee. Loop nu alleen tegen een ander probleem aan, zie mijn andere post
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan