[Excel] Automatisch selecteren

Pagina: 1
Acties:

  • Da Duke
  • Registratie: Juli 2003
  • Laatst online: 09:08
Hallo,

Ik zit met het volgende probleem.

Ik heb een exel werkplad met met in kolom a verschillende producten onder elkaar bv.

a1 productnr
a2 korte product omschrijving
a3 lange product omschrijving
a4 prijs
a5 leeg
a6 productnr
a7 korte product omschrijving
a8 lange product omschrijving
a9 prijs
a10 leeg
enz

Wat ik wil is in kolom a alle pruductnrs onder elkaar, kolom b productomschrijvinge, enz.
Is het te doen om bv automatisch cellen te selecteren om deze vervolgens onder elkaar te zetten in een andre kolom. Dus als ik a1 selecteer dat dan automatisch iedere 5de cel naar beneden ook wordt geselecteerd.

Of is er een andere manier om dit snel te doen, handmatig is dit niet te doen omdat het om honderde producten gaat

  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Plaats in bijv D1 (iig in de eerste rij) de formule:
code:
1
=INDIRECT(ADRES(RIJ(A1)*5-4;1))
Die geeft de inhoud van A1 terug.
In de volgende cel (E1) plaats je de formule
code:
1
=INDIRECT(ADRES(RIJ(A1)*5-3;1))
voor de waarde van A2.

En dat doe je ook voor F1 (waarde A3) en G1 (waarde A4).
De inhoud van die vier cellen (D1:G1) trek je door naar beneden. Et voila!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je oorsponkelijke idee was te doen in VBA.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count <> 1 Then Exit Sub

    Dim all As Range
    Dim cur As Range
    
    Set all = Target
    Set cur = Target
    While (cur.Value <> "")
        Set all = Union(all, cur)
        Set cur = Cells(cur.Row + 5, cur.Column)
    Wend
    
    all.Select
End Sub



Je kon ook alles in VBA doen. Om het mooi te maken heb je een Class-module met de naam Product nodig met daarin:
Visual Basic:
1
2
3
4
Public nr As Integer
Public korteOmschrijving As String
Public langeOmschrijving As String
Public prijs As Currency


Vervolgens maak je in een gewone module zoiets als:
Visual Basic:
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
Option Explicit

Function isProductLeeg(p As Product) As Boolean
    isProductLeeg = p.nr = 0
End Function

Function leesProduct(ByRef rij As Integer) As Product
    Dim p As New Product
    
    p.nr = Sheet1.Cells(rij, 1).Value
    p.korteOmschrijving = Sheet1.Cells(rij + 1, 1)
    p.langeOmschrijving = Sheet1.Cells(rij + 2, 1)
    p.prijs = Sheet1.Cells(rij + 3, 1)
    rij = rij + 5
    
    Set leesProduct = p
End Function

Function leesProductenLijst() As Collection
    Dim producten As New Collection
    
    Dim p As Product
    Dim rij As Integer
  
    rij = 1
    Set p = leesProduct(rij)
    While (Not isProductLeeg(p))
        producten.Add p
        Set p = leesProduct(rij)
    Wend
    
    Set leesProductenLijst = producten
End Function

Sub schrijfProduct(ByRef rij As Integer, p As Product)
    Sheet2.Cells(rij, 1).Value = p.nr
    Sheet2.Cells(rij, 2).Value = p.korteOmschrijving
    Sheet2.Cells(rij, 3).Value = p.langeOmschrijving
    Sheet2.Cells(rij, 4).Value = p.prijs
    rij = rij + 1
End Sub

Sub maakProductenTabel(producten As Collection)
    Dim p As Product
    Dim rij As Integer
    
    rij = 1
    For Each p In producten
        schrijfProduct rij, p
    Next
End Sub

Sub maakVanLijstEenTabel()
    Dim producten As Collection
    
    Set producten = leesProductenLijst()
    maakProductenTabel producten
End Sub


Je hoeft dan alleen de macro maakVanLijstEenTabel te runnen.


Zelf vind ik VBA altijd beter werken dan formules in een werkblad. Het is veel beter leesbaar en het is makkelijker te onderhouden omdat alles bij elkaar staat.

  • Da Duke
  • Registratie: Juli 2003
  • Laatst online: 09:08
Te gek het werkt. Ik heb nu alles in 1 keer door deze macro.

Hartelijk dank voor jullie hulp _/-\o_