Geen dubbele waarden in meerdere cellen op dezelfde rij

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Skytiger
  • Registratie: Januari 2018
  • Laatst online: 18-06-2020
Hoi allen,

Wie kan mij helpen?

In het bestand wat ik heb gemaakt wil ik in cellen D3, F3, H3 unieke waarden hebben vanuit een lijst genaamd Scheidsrechters (Blad2, B2 tot B21).
Dus de naam mag niet meer dan 1x voorkomen in die drie cellen...
Als de naam in D3 staat mag die naam niet voorkomen in F3 en H3.
Als de naam in F3 staat mag hij niet in D3 en H3 komen.
Als de naam in H3 staat mag hij niet in D3 en F3 komen.


Groet
Sky

Alle reacties


Acties:
  • +1 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Welkom!

Bij openen van je topic heb je allerhande tekst verwijderd, de placeholder voor een beschrijving van waar je vast liep ('Wat ik al gevonden of geprobeerd heb'). Kan je alsnog aangeven waar je vastloopt, waar je zelf aan dacht v.w.b. te gebruiken functies? :)

Makkelijkste is misschien het aantal unieke waarden tellen in een extra kolom, als dat hoger dan 1 is dan kan je die controlecel rood maken.

Of zoek je dynamische pulldownmenu's die steeds bestaan uit alle opties behalve degenen die al op die rij staan? Da's wat lastiger. Heb je kennis van VBA?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 19:01
Hoi Skytiger,

als voorafje:
Ik weet niet of je al ervaring hebt met vba en/of macro's (is eigenlijk hetzelfde). Zo ja, dan kun je met onderstaande vast wel uit de voeten. Zo nee, dan adviseer ik je om de basis ervan te googlen en dan na te gaan wat onderstaande code precies doet (ik heb er commentaar bijgezet).
Ik zeg dit, omdat blindelings code (die je niet snapt) interpreteren een heel erg slecht idee is (zelfs als het van een tweaker komt :+ ). Met een stukje vba kun je eenvoudig iemands bestanden wissen, of zoeken naar het bestand "wachtwoorden.txt" en die kopiëren en emailen, of een virus installeren, of... of.... Zorg dus dat je de code snapt, voordat je hem gebruikt ;-)
Daarnaast heeft vba geen 'undo'-mogelijkheid, dus: data kwijt is data kwijt...

En dan nu het hoofdgerecht:
Onderstaande macro kiest drie verschillende namen uit de lijst "Scheidsrechters", en zet die in de cellen D3, F3 en H3.

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
Option Explicit

Sub KiesScheidsrechters()

  'declaratie
  Dim varScheidsrechters() As Variant             'een array met daarin de namen uit de lijst "Scheidsrechters"
  Dim strGekozenScheidsrechters(1 To 3) As String 'een array met de drie gekozen scheidsrechters
  Dim strRandomNaam As String                     'een random gekozen naam uit de array varScheidsrechters
  Dim i As Integer                                'een lusteller
  
  'initialisatie
  'zet de namen uit de lijst met scheidsrechters in een array
  varScheidsrechters = Range(ActiveWorkbook.Names("Scheidsrechters").Value)

  'doe het onderstaande 3x
  For i = 1 To 3
    'herhaal zo lang de random gekozen naam gelijk is aan "" (=leeg), of aan één van de drie gekozen scheidsrechters
    Do While strRandomNaam = "" Or strRandomNaam = strGekozenScheidsrechters(1) Or _
             strRandomNaam = strGekozenScheidsrechters(2) Or strRandomNaam = strGekozenScheidsrechters(3)
      'kies random een naam uit de array met namen van alle scheidsrechters
      strRandomNaam = varScheidsrechters(Application.WorksheetFunction.RandBetween(LBound(varScheidsrechters, 1), UBound(varScheidsrechters, 1)), 1)
    Loop
    'heben we een naam gekozen die nog niet voorkomt bij de gekozen scheidsrechters, ken deze dan toe als i-de gekozen naam
    strGekozenScheidsrechters(i) = strRandomNaam
  Next i
  
  'zet de namen van de scheidsrechters in de velden D3, F3 en H3
  With ActiveWorkbook.Sheets(1)
    .Range("D3").Value = strGekozenScheidsrechters(1)
    .Range("F3").Value = strGekozenScheidsrechters(2)
    .Range("H3").Value = strGekozenScheidsrechters(3)
  End With

End Sub

Acties:
  • 0 Henk 'm!

  • Skytiger
  • Registratie: Januari 2018
  • Laatst online: 18-06-2020
Sorry voor mijn late reactie maar ik heb inmiddels een werkende vba.
Ik had de vraag op meerdere media uitstaan.

Wel ga ik met deze van het weekend even aan de slag om te kijken wat deze doet.

Thx Breew.