Haha, mijn opmerkingen zijn al toegepast zie ik.
Over de keuze om hulpzoekers op de goede weg te zetten ofwel om hen een kant-en-klare oplossing aan te reiken bestaat geen eensgezindheid, en ik doe zelf soms het ene, soms het andere, dus ik ga zeker geen grote uitspraken doen over de ideale manier, al vind ik het meestal een goed idee hen zelf aan het denken te zetten, met onvermijdelijk bijleren als gevolg.
@emields,
In je formuleoplossing gebruik je in de eerste optelfactor een benoemd gebied en in alle andere een range. Dat kan tot verwarring leiden, zeker in een redelijk lange formule, en nog méér als de formules dienen gekopieerd (en herwerkt) te worden voor de volgende maanden.
Je vba-oplossing is op zich helemaal correct. Ik zou er enkel 2 kleine opmerkingen bij durven maken: enerzijds kan de snelheid een boost gebruiken, en anderzijds zou ik op het einde 'target' liever verlaten (anders gaan na beëindiging bv. de pijltjestoetsen wat raar doen).
Heel algemeen, t.t.z. voor élke vba-code: het is een goed idee om inspringingen te gebruiken maar zet ze dan tenminste goed, zoniet bereik je het omgekeerde effect dan het beoogde, met name de leesbaarheid verbeteren.
Mijn tegenvoorstel:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
If Not Intersect(Target, Range("w5,w40,w75,w110,w145,w180")) Is Nothing Then
Target.Offset(1, 1).Resize(30, 2).ClearContents
Target.Offset(-1, -18).Select
Selection.Range("a1:a31,e1:e31,i1:i31,m1:m31").Select
For Each cell In Selection
If cell <> "" Then
x = cell.Value
With Range(Target.Offset(1, 1), Target.Offset(1, 1).End(xlDown))
Set y = .Find(x)
If y Is Nothing Then
With Target.Offset(30, 1).End(xlUp)
.Offset(1) = x
If cell.Offset(, -2) <> "" Then .Offset(1, 1) = .Offset(1, 1).Value + 1
If cell.Offset(, -1) <> "" Then .Offset(1, 1) = .Offset(1, 1).Value + 1
End With
Else
If cell.Offset(, -2) <> "" Then y.Offset(, 1).Value = y.Offset(, 1).Value + 1
If cell.Offset(, -1) <> "" Then y.Offset(, 1).Value = y.Offset(, 1).Value + 1
End If
End With
End If
Next
End If
Target.Offset(1, 1).Select
End Sub