[Excel 2003] Over regels verspreide gegevens aanpassen!

Pagina: 1
Acties:
  • 639 views sinds 30-01-2008
  • Reageer

  • Vissie
  • Registratie: November 2002
  • Laatst online: 26-01 12:32

Vissie

...mine, mine, mine

Topicstarter
Ik heb een probleem waar ik al een lange tijd mijn tanden op stukbijt.

Het makkelijkst is het om het probleem niet te omschrijven maar simpelweg een afbeelding
te gebruiken, daar staat precies wat er moet gebeuren.

Deze bewerking moet voor ongeveer 20000 producten gebeuren, dus handmatig doorvoeren is geen optie. Er kan overigens sprake zijn van 1 eigenschap, maar ook van 18. De drie die ik nu consequent hebt gebruikt is dus niet noodzakelijk.

Als iemand mij hiermee kan helpen dan zou ik dat zéér waarderen! :)

[ Voor 5% gewijzigd door Vissie op 31-03-2016 13:40 ]


Verwijderd

Hieronder volgen wat regels voor een macro. De macro gaat er vanuit dat je gegevens in de kolommen A en B staan zoals je voorbeeld. Als dat niet zo is moet je de waarde A1 in Range.Select("A1) vervangen door de juiste cel.

Als je de nederlandse versie van Excel hebt hoop ik dat iemand je kan helpen aan de juiste vertaling.

Sub Macro1()
Dim row1, row2, i As Long
Dim text As String
Dim laatste_product As Long
laatste_product = 8
Range("a1").Select
While Selection.Row() < laatste_product
Selection.End(xlDown).Select
row1 = Selection.Row()
Selection.End(xlDown).Select
row2 = Selection.Row()
Selection.Offset(-1, 1).Select
text = Selection.Value
For i = row2 - 2 To row1 Step -1
Selection.Offset(-1, 0).Select
text = Selection.Value & Chr$(10) & text
Next i
Selection.Value = text
Selection.Offset(0, -1).Select
Wend
MsgBox ("Klaar")
End Sub


Voordat je de macro laat lopen moet je twee dingen doen:
  1. De waarde de variabele laatste_product aanpassen naar de echte waarde van de rij waarin de naam van je laatste product staat (in je voorbeeld zou dat dus 6 zijn)
  2. In de eerste lege regel na alle producten en eigenschappen een willekeurige tekst in de cel in kolom A zetten (in je voorbeeld zou dat in cel A9 zijn)
Deze twee aanpassingen zijn nodig om de macro ook het laatste product te laten verwerken en te stoppen als alles gedaan is.

In het kort doet de macro het volgende:
- Zoek de naam van een product en onthoud het rijnummer
- Zoek het volgende product en onthoud het rijnummer
- Ga een voor een terug naar de eerste onthouden rij en voeg ondertussen de cellen samen
- Zet de samengestelde tekst in de cel achter de productnaam
- Herhaal tot het einde

Het verwijderen van de overbodige regels laat ik aan je zelf over (tip: sorteer de rijen op kolom A en alle Product rijen komen bij elkaar te staan)

Maak voordat je de macro laat lopen een backup van je bestand; er is geen weg terug!!

  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 02-06 20:28

CoRrRan

Don't Panic!!!

Verwijderd schreef op vrijdag 15 juli 2005 @ 05:44:
[...knip...]
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Macro1()
Dim row1, row2, i As Long
Dim text As String
Dim laatste_product As Long
laatste_product = 8
    Range("a1").Select
    While Selection.Row() < laatste_product
        Selection.End(xlDown).Select
        row1 = Selection.Row()
        Selection.End(xlDown).Select
        row2 = Selection.Row()
        Selection.Offset(-1, 1).Select
        text = Selection.Value
        For i = row2 - 2 To row1 Step -1
            Selection.Offset(-1, 0).Select
            text = Selection.Value & Chr$(10) & text
        Next i
        Selection.Value = text
        Selection.Offset(0, -1).Select
    Wend
    MsgBox ("Klaar")
End Sub
[...knip...]
[...offtopic...]
Mag ik je erop wijzen dat de manier waarop je de variabelen row1, row2 en i definieert niet de juiste is? Ik denk dat je deze 3 variabelen wilt definieren als Long, echter als je op jouw manier van definieren gebruikt, doe je in feite hetvolgende:
Visual Basic:
1
Dim row1 as Variant, row2 as Variant, i as Long
Dit zou dus moeten worden:
Visual Basic:
1
Dim row1 as Long, row2 as Long, i as Long
Aangezien het maar een klein stukje code is, is het absoluut niet relevant, maar ik vind het wel even het vermelden waard.
[...offtopic...]

En dan nog wat: VB code hoef je niet te vertalen... dat is voor elke versie van Excel (Nederlands, Engels, 2000, XP, 2003) hetzelfde.

[ Voor 7% gewijzigd door CoRrRan op 15-07-2005 10:32 ]

-- == Alta Alatis Patent == --


Verwijderd

Geweldig, Moosehead leert graag nieuwe dingen. _/-\o_

Nou nog benieuwd of het werkt voor Vissie.... :?

  • Vissie
  • Registratie: November 2002
  • Laatst online: 26-01 12:32

Vissie

...mine, mine, mine

Topicstarter
Super moosehead: je oplossing lijkt veelbelovend.

Momenteel kan ik het helaas niet proberen: zit nu op een andere pc dan degene met de data, maar ik laat het zeker nog even weten dmv dit topic! :)

  • Vissie
  • Registratie: November 2002
  • Laatst online: 26-01 12:32

Vissie

...mine, mine, mine

Topicstarter
Bedankt voor jullie hulp. Het werk inderdaad, maar een klein, maar wel essentieel dingetje ontbreekt/ De <br> tag tussen de regels. Ik heb vele dingen geprobeerd om dit voor elkaar te krijgen, maar helaas lukt het me niet. Is er iemand die de macro aan kan passen zodat dit automatisch gebeurd?

Bij voorbaat dank! :)

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 14:56
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Macro1()
Dim row1, row2, i As Long
Dim text As String
Dim laatste_product As Long
laatste_product = 8
    Range("a1").Select
    While Selection.Row() < laatste_product
        Selection.End(xlDown).Select
        row1 = Selection.Row()
        Selection.End(xlDown).Select
        row2 = Selection.Row()
        Selection.Offset(-1, 1).Select
        text = Selection.Value
        For i = row2 - 2 To row1 Step -1
            Selection.Offset(-1, 0).Select
            text = Selection.Value & "<br>"& text
        Next i
        Selection.Value = text
        Selection.Offset(0, -1).Select
    Wend
    MsgBox ("Klaar")
End Sub
Pagina: 1