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

Variabele waarde in macro gebruiken

Status
Niet open voor verdere reacties.

ronald1986

Gebruiker
Lid geworden
2 apr 2010
Berichten
296
Mensen, heb heb een vraagje over het gebruiken van variable waarden in een macro. Het gaat over het volgende:

Uit een systeem haal ik een lijst met orders. Laten we zeggen order nummer 50 tot 200.
Nou wil ik met een macro een bepaald deel van de orders selecteren om deze daarna te kopieeren. Laten we zeggen order nummer 70 tot 110.
Ik heb twee invoer velden, één voor het eerste order nummer waar de selectie moet beginnen en één voor het laatste order nummer waar de selectie moet eindigen.
Weet iemand hoe ik dit in een macro kan opnemen?

Mvg,

Ronald Buikema
 
Mensen, heb heb een vraagje over het gebruiken van variable waarden in een macro. Het gaat over het volgende:

Uit een systeem haal ik een lijst met orders. Laten we zeggen order nummer 50 tot 200.
Nou wil ik met een macro een bepaald deel van de orders selecteren om deze daarna te kopieeren. Laten we zeggen order nummer 70 tot 110.
Ik heb twee invoer velden, één voor het eerste order nummer waar de selectie moet beginnen en één voor het laatste order nummer waar de selectie moet eindigen.
Weet iemand hoe ik dit in een macro kan opnemen?

Mvg,

Ronald Buikema

Simpel voorbeeld:

Code:
Sub Bereik()
Range("B" & Begin & ":B" & Eind).Value = Range("A" & Begin & ":A" & Eind).Value

End Sub

In plaats van Begin en Eind kan je de naam van de invoervelden nemen.
Bovenstaande code zet de gegevens in de B-kolom vanaf Begin tot Eind in de A-kolom vanaf Begin tot Eind.

Met vriendelijke groet,


Roncancio
 
OK, thnx, dit is een begin...
De situatie is namelijk nog een klein beetje anders.
Het is zo dat er meerdere kolommen gekopieerd moeten worden die voldoen aan de voorwaarde dat er in kolom A een ordernummer staat die tussen het start en eind ordernummer van de selctie valt.
Ander vraagje, je zegt dat ik de naam van de invoervelden kan ingeven. Hoe kan ik een cel een naam geven?

Mvg
Ronald Buikema
 
Code:
Sub tst()
    With Sheets("Blad1").Columns(1)
        .Find([B1], , xlValues, xlWhole).Resize(([C1]+1) - [B1],[COLOR="red"]zet hier het aantal kolommen[/COLOR]).Copy
    End With
End Sub
Stel: Je ordernummers staan in Kolom A, je beginzoekwaarde in B1 en eindzoekwaarde in C1
 
Laatst bewerkt:
OK, thnx, dit is een begin...
De situatie is namelijk nog een klein beetje anders.
Het is zo dat er meerdere kolommen gekopieerd moeten worden die voldoen aan de voorwaarde dat er in kolom A een ordernummer staat die tussen het start en eind ordernummer van de selctie valt.
Ander vraagje, je zegt dat ik de naam van de invoervelden kan ingeven. Hoe kan ik een cel een naam geven?

Mvg
Ronald Buikema

Zo te horen wil je een zoekfunctie gebruiken ipv een vaststaand bereik.

Stel dat je wilt verwijzen naar cel D3:
- Range("D3")
- Cells(3,"D")
- Cells(3,4)
- [D3]
Je kunt ook een naam geven aan een cel:
- Selecteer de cel.
- Ga naar het tekstvak linksboven de kolomletter A en toets daar een naam in.

Deze naam kan je als volgt gebruiken:
- Range("Gekozen naam")

Met vriendelijke groet,


Roncancio
 
Ok dan! dit werkt behoorlijk mooi!
Alleen nog één kleine vraag...
Het komt ook voor dat een order nummer meerdere malen voorkomt.
Dat er dus meerdere regels zijn voor één ordernummer.
Met deze macro wordt er geselecteert tot de eerste keer dat de macro het eind order nummer tegenkomt.
Nu wil ik eigenlijk wel dat de macro alle regels van het laatste order nummer selecteert, dus tot de laatste keer dat het eind ordernummer voorkomt.
Is de macro zo aan te passen dat dit meegenomen wordt?
Misschien iets met het tellen van het aantal malen dat het eind order nummer voorkomt, en dan dit aantal rijen bij de huidige macro optellen...??
Alleen geen idee hoe ik dit in een macro zet...

Mvg
Ronald Buikema
 
Misschien iets met het tellen van het aantal malen dat het eind order nummer voorkomt, en dan dit aantal rijen bij de huidige macro optellen...??

Dat kan, maar dan moeten de betreffende regels wel bij elkaar staan, anders kan je een zoekfunctie gebruiken die steeds opnieuw naar een ordernummer zoekt.

Met vriendelijke groet,


Roncancio
 
Dat komt dan mooi uit want wanneer een ordernummer meerdere keren voorkomt staan deze altijd onder elkaar zonder dat er andere order nummers tussendoor komen.
 
Maar weten jullie dan ook hoe ik dit in de macro kan opnemen want zover ben ik nog niet in macro's verdiept...??
 
Maar weten jullie dan ook hoe ik dit in de macro kan opnemen want zover ben ik nog niet in macro's verdiept...??

Code:
Sub tst()
    With Sheets(1)
        Sheets(2).Range("A1:C" & WorksheetFunction.CountIf(.Columns(1), [b1])).Value = .Columns(1).Find([b1], , xlValues, xlWhole).Resize(WorksheetFunction.CountIf(.Columns(1), [b1]), 3).Value
    End With
End Sub

In de A-kolom van Blad 1 wordt gezocht naar de waarde van B1.
Vervolgens wordt in cel A1 t/m C [aantal waardes van b1] van Blad2 de waardes geplaatst.

Dus stel:

* 5
3 3 3
3 3 3
3 3 3
4 4 4
4 4 4
4 4 4
4 4 4
4 4 4
5 5 5
5 5 5
5 5 5
5 5 5
5 5 5
6 6 6
6 6 6
7 7 7
7 7 7
7 7 7
7 7 7

In cel B1 staat 5.
Deze 5 wordt gezocht in de A-kolom en inclusief de kolommen ernaast worden de gevonden rijen in Blad2 geplaatst.
In dit geval:

5 5 5
5 5 5
5 5 5
5 5 5
5 5 5

Met vriendelijke groet,


Roncancio
 
Ok dit werkt inderdaad, maar alleen voor een enkele zoekwaarde.
Ik zou dit graag willen doen met een range aan order nummers.
De code die jij gaf geld dan denk ik voor de eind zoekwaarde, maar nou moet er dus ook nog een begin zoekwaarde bij.
Dus bijvoorbeeld vanaf 3 tot 5 waarbij het resultaat de eerste waarde 3 is tot en met de laatste waarde 5.
Zou dat ook kunnen in de macro hierboven?

Met vriendelijke groet,

Ronald Buikema
 
Ok dit werkt inderdaad, maar alleen voor een enkele zoekwaarde.
Ik zou dit graag willen doen met een range aan order nummers.
De code die jij gaf geld dan denk ik voor de eind zoekwaarde, maar nou moet er dus ook nog een begin zoekwaarde bij.
Dus bijvoorbeeld vanaf 3 tot 5 waarbij het resultaat de eerste waarde 3 is tot en met de laatste waarde 5.
Zou dat ook kunnen in de macro hierboven?

Met vriendelijke groet,

Ronald Buikema

Code:
Sub VanNaar()
Dim lAantEind As Long
    With Sheets(1)
        Set Begin = .Columns(1).Find([b1], , xlValues, xlWhole)
        Set Eind = .Columns(1).Find([C1], , xlValues, xlWhole)
        lAantEind = WorksheetFunction.CountIf(.Columns(1), [C1])
        Sheets(2).Range("A1:C" & Eind.Row + lAantEind - Begin.Row).Value = .Columns(1).Range("A" & Begin.Row & ":C" & Eind.Row + lAantEind).Value
    End With
End Sub

Het verschil tussen bovenstaande code en vorige code is dat hier gekeken wordt naar Van (B1) Naar (C1)
Terugkerend naar mijn eerdere voorbeeld:

* 5 7
3 3 3
3 3 3
3 3 3
4 4 4
4 4 4
4 4 4
4 4 4
4 4 4
5 5 5
5 5 5
5 5 5
5 5 5
5 5 5
6 6 6
6 6 6
7 7 7
7 7 7
7 7 7
7 7 7

wordt dus:
5 5 5
5 5 5
5 5 5
5 5 5
5 5 5
6 6 6
6 6 6
7 7 7
7 7 7
7 7 7
7 7 7

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Werkt perfect Roncancio!!
Alleen nog een laatste vraagje, kun je je geselecteerde gegevens ook wegschrijven in een ander excel bestand dat open staat?
En zou je me de regel die er voor zorgt dat de geselecteerde gegevens op een andere plek worden geplakt uit kunnen leggen zodat ik hem zelf kan aanpassen naar de situatie hier?

Met vriendelijke groet,

Ronald Buikema.
 
Werkt perfect Roncancio!!
Alleen nog een laatste vraagje, kun je je geselecteerde gegevens ook wegschrijven in een ander excel bestand dat open staat?
En zou je me de regel die er voor zorgt dat de geselecteerde gegevens op een andere plek worden geplakt uit kunnen leggen zodat ik hem zelf kan aanpassen naar de situatie hier?

Met vriendelijke groet,

Ronald Buikema.

Code:
Sub VanNaar()
Dim lAantEind As Long
    With Sheets(1)
        Set Begin = .Columns(1).Find([B1], , xlValues, xlWhole)
        Set Eind = .Columns(1).Find([C1], , xlValues, xlWhole)
        lAantEind = WorksheetFunction.CountIf(.Columns(1), [C1])
        Workbooks("[COLOR="red"]Naam Ander Bestand[/COLOR]").Sheets(2).Range("A1:C" & Eind.Row + lAantEind - Begin.Row).Value = .Columns(1).Range("A" & Begin.Row & ":C" & Eind.Row + lAantEind).Value
    End With
End Sub

Begin - zoekt de waarde van cel B1.
Eind - zoekt de waarde van cel C1
lAantEind - aantal waardes van Eind in het bereik
Vervolgens worden rijnummers van Begin en Eind gebruikt om het bereik te bepalen.

Met vriendelijke groet,


Roncancio
 
Ok, maar ik snap nog steeds niet helemaal waar nou bepaald wordt op welke plaats de geselcteerde gegevens terugkomen. Ze moeten namelijk in een ander bestand, op een bepaald tabblad en in een bepaalde cel komen. Kun je me dit uitleggen waar ik dit in de macro aan kan passen?

Met vriendelijke groet,

Ronald Buikema
 
Ok, maar ik snap nog steeds niet helemaal waar nou bepaald wordt op welke plaats de geselcteerde gegevens terugkomen. Ze moeten namelijk in een ander bestand, op een bepaald tabblad en in een bepaalde cel komen. Kun je me dit uitleggen waar ik dit in de macro aan kan passen?

Met vriendelijke groet,

Ronald Buikema

Code:
Workbooks("[COLOR="red"]Naam Ander Bestand[/COLOR]").Sheets([COLOR="red"]Naam of indexnummer van werkblad[/COLOR]).Range("[COLOR="red"]A1[/COLOR]:[COLOR="red"]C[/COLOR]" & Eind.Row + lAantEind - Begin.Row).Value

A1 - het celadres waar de gegevens worden ingevuld.

Bijvoorbeeld: A1 t/m C7

Geef anders aan vanaf welke cel moet worden weggeschreven.

Met vriendelijke groet,


Roncancio
 
Code:
Sub VanNaar()
Dim lAantEind As Long
    With Sheets(1)
        Set Begin = .Columns(1).Find([B1], , xlValues, xlWhole)
        Set Eind = .Columns(1).Find([C1], , xlValues, xlWhole)
        lAantEind = WorksheetFunction.CountIf[COLOR="red"](.Columns(1)[/COLOR], [C1])
        Workbooks("Naam Ander Bestand").Sheets(2).Range("A1:C" & Eind.Row + lAantEind - Begin.Row).Value = .Columns(1).Range("A" & Begin.Row & ":C" & Eind.Row + lAantEind).Value
    End With
End Sub

Ik neem trouwens aan dat het rode gedeelte aangeeft hoeveel kolommen (waarbij kolom a aan de voorwaarde moet voldoen) er moeten worden geselcteerd??

Met vriendelijke groet,

Ronald Buikema
 
Ik neem trouwens aan dat het rode gedeelte aangeeft hoeveel kolommen (waarbij kolom a aan de voorwaarde moet voldoen) er moeten worden geselcteerd??

Nope.
Het geeft aan dat er in de 1e kolom (dus A-kolom) gezocht moet worden.

Met vriendelijke groet,


Roncancio
 
Ok, dan heb ik het verkeerd begrepen.
Is het dan misschien ook mogelijk om meerdere kolommen mee te nemen in plaats van alleen kolom A?
Het blijft wel zo dat er alleen aan de voorwaarde in kolom A voldaan moet worden...

Met vriendelijke groet,

Ronald Buikema
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan