[Excel+VBA]Rij van rechts naar links afzoeken

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

  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
Ik ben voor m'n werk een sheet aan het maken waarin een matrix staat. De eerste kolom is een kolom met namen, de eerste rij is een rij met alle dagen van de maand.
Nou komt er achter iedere naam een "a" of een "b" te staan. Niet op iedere dag en vrij willekeurig. Het vullen gaat van links naar rechts.
Ik wil nou in de laatste kolom van de matrix hebben staan wat er als laatste is ingevoerd, een "a" of een "b". Het moet dus een macro zijn (tenminste, ik ga er vanuit dat dit alleen maar met een macro kan, andere suggesties zijn welkom ;) ), die een rij van de matrix van rechts naar links afspeurd totdat hij een cel tegenkomt die niet leeg is. De waarde van die cel moet in de laatste kolom.
Ik ben een onwijze n00b op VBA gebied, maar dit is wat ik zelf al een beetje gepriegeld heb en wat niet werkt:

code:
1
2
3
4
5
6
7
8
9
Sub Update()

For k = 26 To 2
    If Not IsEmpty(Worksheets("Blad1").Cells(101, k).Value) Then
        Worksheets("Blad1").Cells(101, 27).Value = Worksheets("Blad1").Cells(101, k).Value
    End If
Next k

End Sub


Hierin gaat het om rij 101. Kolom 1 is de kolom met namen en kolom 27 is de kolom waar de laatst ingevulde waarde in moet verschijnen.

Dit is natuurlijk maar voor 1 rij, maar als ik dit werkend krijg, dan is de hele matrix niet zo'n probleem dunkt me.

Nogmaals, als dit zonder macro's kan dan hoor ik het graag!

Blasphemy is a victimless crime


Verwijderd

Dit zal beter werken:

For k = 26 To 2 Step -1

Succes!

  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
Verwijderd schreef op woensdag 19 januari 2005 @ 14:52:
Dit zal beter werken:

For k = 26 To 2 Step -1

Succes!
Ik zie nu in de doelcel heel even een flits van de goede waarde, maar het lijkt wel dat als de macro afgelopen is, de waarde van de cel ook vergaat. De cel blijft dus uiteindelijk leeg.
Ook als ik, voordat ik de macro uitvoer, een waarde in de cel zet, bijvoorbeeld "blaat", dan is de cel na het uitvoeren van de macro leeg.

Hoe zorg ik ervoor dat de waarde blijft staan?

Blasphemy is a victimless crime


Verwijderd

:? Bij mij blijft de waarde gewoon staan. Je moet bovendien wel even 'Exit For' in de If statement zetten, om er uit te springen zodra de macro een waarde heeft gevonden (ik neem aan dat dat de bedoeling is).

  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
Verwijderd schreef op woensdag 19 januari 2005 @ 15:13:
:? Bij mij blijft de waarde gewoon staan. Je moet bovendien wel even 'Exit For' in de If statement zetten, om er uit te springen zodra de macro een waarde heeft gevonden (ik neem aan dat dat de bedoeling is).
Idd, dat moet er sowieso in.

Ik heb nu dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
Sub Update()

For k = 26 To 2 Step -1
    If Not IsEmpty(Worksheets("Blad1").Cells(101, k).Value) Then
        Worksheets("Blad1").Cells(101, 27).Value = Worksheets("Blad1").Cells(101, k).Value
        Exit For
    Else
        Worksheets("Blad1").Cells(101, k).Value = "blaat"
    End If
Next k

End Sub


Maar ook dit geeft geen kick. Ook het debug statement (na de else) werkt niet. Haal ik misschien rijen en kolommen door elkaar ofzo?

Ff voor de duidelijkheid: Als ik aanpassingen maak in de editor en ik save die, dan kan ik daarna gewoon in de sheet met ALT+F8 de macro uitvoeren? Ik hoef toch niet het document opnieuw te openen ofzo (er is geen cache ofzo)?

Blasphemy is a victimless crime


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Kan je mss stap / puntsgewijs vertellen wat je precies wilt bereiken. Heb nl. het idee dat je iets teveel 'bloated' code schrijft voor iets simpels :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Sterker nog: je hoeft niet te saven daarvoor: de macro die je aanroept loopt de code langs zoals die op het scherm staat. De kolommen en rijen staan goed, ik snap niet helemaal wat er bij jou verkeerd gaat, aangezien de code bij mij wel goed loopt.

En natuurlijk kan de code efficienter en mooier, maar je leert het beste door gewoon je eigen dingen te proberen imo.

  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
BtM909 schreef op woensdag 19 januari 2005 @ 15:30:
Kan je mss stap / puntsgewijs vertellen wat je precies wilt bereiken. Heb nl. het idee dat je iets teveel 'bloated' code schrijft voor iets simpels :)
Dat idee heb ik zelf ook :)


Goed stel:
code:
1
2
3
4
          1        2       3       4         5       Laatst?
Piet    a                 a       b                      b
Jan               b                          a           a
Kees    a                 a        a                     a


Er moet dus per rij (dus per naam) van rechts naar links gekeken worden wat er als laatste is ingevoerd (er wordt namelijk van links naar rechts ingevoerd).
Die waarde moet in de kolom "Laatst?". Dat is voor Piet, Jan en Kees respectievelijk 'b', 'a' en 'a'.

Snappie? :)

[ Voor 5% gewijzigd door Boondock_Saint op 19-01-2005 15:41 ]

Blasphemy is a victimless crime


Verwijderd

dit kan met een matrixformule:
code:
1
{=INDIRECT("R" & RIJ(A1) & "K" & MAX(KOLOM(B1:H1)*(B1:H1<>""));ONWAAR)}

in bovenstaand voorbeeld houdt de formule rekening met namen in de kolom b tot en met h (dit zal je dienen aan te passen) de accolades ({}) rond de formule worden niet getypt, maar komen er automatisch te staan als je inbreng van de formule bevestigt met ctrl+shift+enter, ipv gewoon enter voor een reguliere formule.
belangrijk: nadat je formule werkend hebt, kopiëren met ctrl+c & ctrl+v naar de overige rijen, anders bestaat de kans dat ze niet werken (dus niet doorslepen of dubbelklikken op het kopieerkruisje)

  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
Verwijderd schreef op woensdag 19 januari 2005 @ 15:41:
dit kan met een matrixformule:
code:
1
{=INDIRECT("R" & RIJ(A1) & "K" & MAX(KOLOM(B1:H1)*(B1:H1<>""));ONWAAR)}

in bovenstaand voorbeeld houdt de formule rekening met namen in de kolom b tot en met h (dit zal je dienen aan te passen) de accolades ({}) rond de formule worden niet getypt, maar komen er automatisch te staan als je inbreng van de formule bevestigt met ctrl+shift+enter, ipv gewoon enter voor een reguliere formule.
belangrijk: nadat je formule werkend hebt, kopiëren met ctrl+c & ctrl+v naar de overige rijen, anders bestaat de kans dat ze niet werken (dus niet doorslepen of dubbelklikken op het kopieerkruisje)
Thanx man, dit werkt!!!! _/-\o_

Nog twee vraagjes dan:

-Wat is het verschil tussen gewoon enter en ctrl+shift+enter?
-Ik moet dit voor 75 rijen doen, is daar een snelle manier voor? (aangezien ik niet mag slepen)

Blasphemy is a victimless crime


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Boondock_Saint schreef op woensdag 19 januari 2005 @ 15:48:
[...]


Thanx man, dit werkt!!!! _/-\o_

Nog twee vraagjes dan:

-Wat is het verschil tussen gewoon enter en ctrl+shift+enter?
-Ik moet dit voor 75 rijen doen, is daar een snelle manier voor? (aangezien ik niet mag slepen)
1. CTRL+SHIFT+Enter zorgt ervoor dat de matrix-formule wordt geactiveerd
2. CTRL+C, 75 rijen selecteren, CTRL+V ?

[ Voor 10% gewijzigd door BtM909 op 19-01-2005 15:51 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
BtM909 schreef op woensdag 19 januari 2005 @ 15:50:

2. CTRL+C, 75 rijen selecteren, CTRL+V ?
Nee, dit werk niet, maar slepen (sorry, eigenwijs ;) ) werkt wel hoor! Of kom ik daarmee later in de problemen?

Blasphemy is a victimless crime


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Boondock_Saint schreef op woensdag 19 januari 2005 @ 15:58:
[...]


Nee, dit werk niet, maar slepen (sorry, eigenwijs ;) ) werkt wel hoor! Of kom ik daarmee later in de problemen?
Sorry, paste special... Formulas :P

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

wat BtM909 in de post van 15:50 schreef klopt wel hoor, je moet er alleen voor zorgen dat je de cel waarin de formule al staat niet meegeselecteerd wordt (dus 74 rijen).
voor zover ik me kan herinneren, bevat excel een zeer obscure bug waardoor de kans bestaat dat matrixformules niet herberekend worden als je ze kopieert via slepen of bij dubbelklikken van het kopieerkruisje in de rechteronderhoek van de actieve cel, maar ik kan me vergissen. blijkbaar werkt het wel bij jou.

  • Boondock_Saint
  • Registratie: Januari 2001
  • Laatst online: 18-11-2023
Verwijderd schreef op woensdag 19 januari 2005 @ 16:17:
wat BtM909 in de post van 15:50 schreef klopt wel hoor, je moet er alleen voor zorgen dat je de cel waarin de formule al staat niet meegeselecteerd wordt (dus 74 rijen).
voor zover ik me kan herinneren, bevat excel een zeer obscure bug waardoor de kans bestaat dat matrixformules niet herberekend worden als je ze kopieert via slepen of bij dubbelklikken van het kopieerkruisje in de rechteronderhoek van de actieve cel, maar ik kan me vergissen. blijkbaar werkt het wel bij jou.
Ok, nou ik heb voor de zekerheid toch maar even 'Plakken speciaal -> formules' gedaan :Y)

Blasphemy is a victimless crime

Pagina: 1