Ga naar inhoud

Lege cellen tellen tussen twee waarden


FredSiegl

Aanbevolen berichten

Kan ik aan de knoppen in het formulier ook een soort autoload van 'Macro1' toevoegen, zodat al mijn data telkens geupdate wordt?

Ja, daarvoor moet je onderaan je code alleem maar macro1 te typen, als macro1 de de macro is die je gegevens updatet.

De knoppen van het formulier geven een waarde aan de geselecteerde cel en selecteren daarna de volgende cel. Kan dit ook automatisch onder het laaste stukje data geplaatst worden in kolom A i.p.v. het telkens te moeten te selecteren?

Ja. Hoe je iets onder de laatste cel plaatst, kun je uit de macro's halen die ik hierboven plaatste. Om de kleur mee te kopiëren zou je de RGB-waarde moeten weten omdat je je kleuren hebt gekozen uit het miljoenenpallet (uit de kleurenindex zou eenvoudiger geweest zijn voor het programmeren). Dat probleem kun je omzeilen door aan de cellen met de kleurennamen in de eerste rij de kleuren toe te voegen; je kunt dan, als je in het formulier een kleur hebt gekozen, bepalen welke cel daar bovenaan mee overeenkomt en die cel kopiëren naar de eerstvolgende cel onderaan in de eerste kolom. Je hoeft dan geen RGB-waarde te weten.

De data uit M27:S37 zou ik altijd in beeld willen hebben om af te kunnen lezen.

Zet de macrorecorder aan terwijl je dat bereik in beeld brengt, dan heb je meteen de code (ongeveer).

Link naar reactie
Delen op andere sites

  • Reacties 46
  • Aangemaakt
  • Laatste reactie

Beste reacties in dit topic

Ik snap dat je idd met de recorder de code van dat gedeelte kan krijgen, maar hoe krijg ik zoiets dan standaard voor mijn neus? De oplossing die ik nu gebruik is het kopieren naar een nieuwe tabblad. 

 

Dit is de code, wat makkelijker om te quoten.

 

Sub macro1()
Dim a As Integer, cl As Range, k As Integer, kl As String, lr As Integer
Dim mc As Range, r As Integer, st As Integer, x As Integer, y As Integer
Sheets(2).Cells.ClearContents
With Sheets(1)
r = 1: lr = .Cells(.Rows.Count, 1).End(xlUp).Row
Set mc = .Range("c1:l1")
For Each cl In mc
k = 1: kl = cl.Value
Sheets(2).Cells(r, 1) = kl
st = Application.Match(kl, .Range("a1:a" & lr), 0)
For x = st To lr
y = 1
Do While (x + y) <= lr And .Cells(x + y, 1).Value <> kl
y = y + 1
Loop
k = k + 1
Sheets(2).Cells(r, k).Value = y
st = x + y: x = x + y - 1
Next x
r = r + 1
Next cl
End With
With Sheets(2)
lr = .Cells(.Rows.Count, 1).End(xlUp).Row + 2
r = lr + 2
For y = 1 To lr
.Cells(r, 1).Value = .Cells(y, 1).Value
.Cells(r, 2).Value = .Cells(y, .Cells(y, .Columns.Count).End(xlToLeft).Column)
r = r + 1
Next y
End With
End Sub

 

 

Link naar reactie
Delen op andere sites

3 uren geleden, FredSiegl zei:

Ik snap dat je idd met de recorder de code van dat gedeelte kan krijgen, maar hoe krijg ik zoiets dan standaard voor mijn neus?

De oplossing die ik nu gebruik is het kopieren naar een nieuwe tabblad. 

Zoals ik al schreef: als je M27:S36 in beeld wil hebben, dan experimenteer je wat met verschuiven van rijen en kolommen. Als je dat doet terwijl de recorder aan staat, dan wijzig je de code net zo lang tot je in beeld hebt wat je in beeld wil hebben. Bv. je macro afsluiten met:

With ActiveWindow
.ScrollRow = 26
.ScrollColumn = 8
End With

Bovenstaande doet het goed op mijn computer, maar dat kan op de jouwe anders zijn; gewoon de getallen aanpassen indien nodig

Hoe mijn eigen code eruit ziet, dat weet ik uiteraard wel, dus die hoef je op het forum niet te herhalen.

Zoek bij elke opdracht in de vba-helpfile op wat die doet en wat ze betekent en oefen er dan mee, dan begrijp je ze wel.

Als je nog niet veel ervaring hebt met vba (en Excel zonder vba goed kent, dat is een minimum-voorwaarde), dan kun je best met zeer eenvoudige dingen beginnen en je niet te veel tegelijkertijd op de hals willen halen. Ik heb de indruk dat dat laatste het geval is, maar ik kan me vergissen.

Link naar reactie
Delen op andere sites

 
 
 
Op 10/5/2019 om 16:30, alpha zei:

Als je nog niet veel ervaring hebt met vba (en Excel zonder vba goed kent, dat is een minimum-voorwaarde), dan kun je best met zeer eenvoudige dingen beginnen en je niet te veel tegelijkertijd op de hals willen halen. Ik heb de indruk dat dat laatste het geval is, maar ik kan me vergissen.

Daar kun je wel eens gelijk in hebben, maar gaande weg leer je natuurlijk. Ook met moeilijke code. Uiteindelijk kom ik wel bij wat ik wil hebben dus dat is top. 

 

Thanks!

Link naar reactie
Delen op andere sites

Wederom een volgende vraag

 

Hoe krijg ik de op één na laatste waarde van al mijn data weergegeven?

 

Ik heb dit gevonden en vertaald uiteraard, maar dan werkt die niet. Enig idee?

1. Selecteer een lege cel voor het plaatsen van de voorlaatste waarde, voer de formule in = INDEX (B: B, LARGE (IF (B: B <> "", ROW (B: B)), 2)) 

Link naar reactie
Delen op andere sites


×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.