• 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 waarde cel zoeken en plaatsen

Status
Niet open voor verdere reacties.

arnoderuig

Gebruiker
Lid geworden
8 sep 2000
Berichten
574
Ik hoop dat de titel van mijn vraag niet al teveel verwart. Onderstaand probeer ik uit te leggen wat ik zoek.

In een Excelsheet wil ik dat VBA mij helpt om waarden uit een te bepalen cel op te halen en te plaatsen op een andere te bepalen cel. Ik wil hiervoor gebruik maken van een for...next constructie ( For Maand = 1 to 12). Elke keer als een waarde is opgehaald en geplaatst wordt een formulier afgedrukt en wordt een nieuwe Next uitgevoerd, enzovoorts.

Het gaat nu alleen om de instructies die de waarde ophaalt en plaatst. Het gegeven moet worden gehaald uit een kolom die aantal Maand rechts ligt gerekend vanaf cel G6 op werkblad DATA en moet worden geplaatst in een regel die aantal Maand ligt onder de cel gerekend vanaf cel B7 op werkblad FORMULIER.

Een voorbeeld:
Stel dat Maand de waarde 2 heeft dan dient het gegeven te worden gehaald 2 kolommen na cel G6 dus wordt dat I6. De waarde moet worden geplaatst 2 regels onder cel B7 dus B9.

Wie wil me helpen bij het samenstellen van deze instructies?
 
arnoderuig, Plaats ff een voorbeeldbestandje (zonder privé informatie!) waardoor het voor de helpers makkelijker wordt om je snel te helpen.

Groet, Leo
 
Bijgaand het voorbeeldbestand (eerder opgegevens posities wijken daarin af).

Op het blad DATA linksboven heb ik vermeld wat de bedoeling is. Ik heb het probleempje meteen uitgebreid door ook de code te vragen om de uren van een project van een bepaalde maand op een juist plek in het FORMULIER te krijgen.

Dank vast voor een oplossing.
 

Bijlagen

  • Projectformulier.xls
    44,5 KB · Weergaven: 325
Laatst bewerkt:
Code:
for j= 1 to 12
 [B7].offset(j)=[C6].offset(,j)
Next

Overigens bestaat hiervoor de ingebouwde funktie Transpose
Code:
 [B7].resize(12)=worksheetfunction.transpose(worksheetfunction.transpose([C6].resize(,12)))
 
Laatst bewerkt:
SNB, dank voor je reactie. Een paar opmerkingen waarmee ik hoop één en ander ook te kunnen begrijpen:

1. Begrijp ik goed dat het verschil tussen (j) en (,j) is dat een getal vóór de komma (of gebruik van geen komma) betekent "zoveel posities naar beneden" en dat het getal achter de komma betekent "zoveel posities naar rechts"? Begrijp ik goed dat je dit dus ook kan combineren zodat (25,30) betekent EN 25 posities naar beneden EN 30 posities naar RECHTS? En naar ik verwacht kun je voor de getallen tussen haakjes ook een minteken plaatsen zodat je ook NAAR BOVEN en NAAR LINKS kan gaan? Ik moet nog wel even kijken op welke wijze ik de verwijzing naar het juiste werkblad maak. De gegevens zijn afkomstig van het werkblad DATA en worden geplaatst op het werkblad FORMULIER.

2. Je opmerking over Transpose gaat waarschijnlijk in mijn geval niet op. Wat ik van Transpose weet is dat in dat geval een hele reeks horizontale cellen in één keer worden omgezet in een reeks verticale cellen. Dat is hier beslist niet de bedoeling.
 
Code:
for j= 1 to 12
 [formulier!B7].offset(j)=[data!C6].offset(,j)
Next

Kijk in de hulpfunktie van de VBEditor bij Offset en je vindt een bevestiging van je vermoedens.

Deze bewerking is overigens wel een omzetting van een aaneengesloten range in 1 regel naar een aaneengesloten range in een kolom. Transpose is dus van toepassing.
 
SNB, Dank voor je waardevolle aanvullingen; ik zal de offset-help zeker eens bekijken.

Volgens mij is de Transpose in mijn situatie niet mogelijk. In mijn oorspronkelijke vraagstelling heb ik aangegeven dat binnen de for..next een formulier moet worden geprint nadat de gegevens van een maand (lees: één maand) zijn opgehaald en geplaatst. Wellicht was dat nog iets onduidelijk. Bij een transpose worden alle velden in één keer gevuld en dat is niet de bedoeling.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan