• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

ALS formule meerdere voorwaarden en variabelen

Status
Niet open voor verdere reacties.

Frederika1

Gebruiker
Lid geworden
28 okt 2017
Berichten
12
Beste mensen,

Ben al uren ah puzzelen en kom er maar niet uit. Maar het is ongetwijfeld mogelijk. Wat ik wil is het volgende:

De kolommen B,C en D moeten ingevuld worden met een getal, waarbij op elke rij maar 1 getal (>0) ingevuld mag worden. Als ik dit vertaal naar 'exceltaal' dan ziet dat er als volgt uit:

Als cel B2>0, dan moeten de cellen C2 en D2 de waarde 0 krijgen, en
als cel C2>0, dan moeten de cellen B2 en D2 de waarde 0 krijgen, en tenslotte
als cel D2>0, dan moeten de cellen B2 en C2 de waarde 0 krijgen.

Het mooiste is als het tijdens het typen direct gedaan wordt, maar als dat ingewikkeld is, dan kan ik ook goed leven met een controlekolom waarin door middel van "GOED" en "FOUT" bekeken wordt of aan de ALS formule wordt voldaan, maar dan wel graag in 1 lange formule.

Bekijk bijlage Voorbeeldbestand ALS formule.xlsx
Zie voorbeeld bestandje. Ik heb hierin de controlekolom zelf handmatig ingevuld en met voorwaarde opmaak een kleurtje gegegeven. maar het handmatige wil ik dus wel graag vervangen door een automatiche formule.

Alvast ontzettend bedankt aan eenieder die mee wil denken...

Hartelijke groetjes,
Ingrid
 
Zo goed?
 

Bijlagen

  • Voorbeeldbestand ALS formule.xlsx
    10,4 KB · Weergaven: 126
Voorkomen is beter dan genezen.
Zet deze code in de module van het werkblad
Code:
Private Sub Worksheet_Change(ByVal Tg As Range)
    If Intersect(Tg, Range("B1:D1").EntireColumn) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Range(Join(Filter(Split("B C D"), Chr(Tg.Column + 64), False), Tg.Row & ",") & Tg.Row) = 0
    Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Hoi Cobbe en Gijsbert,

Bedankt voor jullie bericht. Jullie beider oplossingen werken prima. Super!
Echter, ik mis alleen nog dat in de andere 2 cellen dan een "-" (dus een streepje alszijnde 0 komt te staan). Is dat ook nog te realiseren? Hoor het graag nog even. Dank alvast!
 
Laatst bewerkt:
Hi Timshell,
Dank je wel voor je bericht en moeite. Ik weet eigenlijk heel weinig van de codes / macro die je beschrijft, dus mijn eigen voorkeur is om het simpel te houden. Tenzij je goede arumenten hebt om voor jouw oplossing te kiezen...?
 
Dat gaat niet met formules.

Het is in de cel een formule, of erin typen.
 
Wat HSV zegt.
Wat jij wilt kan alleen met codes / macro.
De mijne bijvoorbeeld.
 
Wat HSV zegt.
Wat jij wilt kan alleen met codes / macro.
De mijne bijvoorbeeld.

Hi Timshell. IK geloof dat het werkt.... (geen idee wat ik allemaal doe, maar oké). Ik ga het morgen proberen te vertalen naar mijn echte excel-bestand. En dan zal ik ook proberen om van de nullen streepjes te maken (terwijl het wel waarde nul blijft). Maar denk dat ik dat met celeigenschappen wel aangepast krijg. Nu maar eerst slapen. Maar top, echt omtzettend bedankt voor het meedenken. Trusten.
 
Hi Timshell,
Ik heb het vandaag toegepast op mijn werkelijke excel-bestand en het werkt helemaal top. Ik ben er super blij mee! Dus dank je wel en fijne avond!!
 
Wat HSV zegt.
Wat jij wilt kan alleen met codes / macro.
De mijne bijvoorbeeld.

Hoi Timshell.

Zou je mij nog een keertje willen helpen?
Ik heb jouw VBA code in mijn excel verwerkt en het werkt fantastisch, maar, nu zou ik graag het bereik aan willen passen en wel zodanig dat de macro niet op de hele kolom van toepassing is, maar op verschillende bereiken, bijvoorbeeld de bereiken:
G12 tm I19 én
G22 tm I26 én
G31 tm I36 etc.

Ik wil namelijk wat regels invoegen met andere inhoud.

De code die ik nu heb (jij mij stuurde) is:

Private Sub Worksheet_Change(ByVal Tg As Range)
If Intersect(Tg, Range("G11:I11").EntireColumn) Is Nothing Then Exit Sub
Application.EnableEvents = False
Range(Join(Filter(Split("G H I"), Chr(Tg.Column + 64), False), Tg.Row & ",") & Tg.Row) = 0
Application.EnableEvents = True
End Sub

Alvast weer erg bedankt,
Groeten
Ingrid
 
Probeer zo eens:
Code:
Private Sub Worksheet_Change(ByVal Tg As Range)
    If Intersect(Tg, Range("G:I"), Range("12:19,22:26,31:36")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Range(Join(Filter(Split("G H I"), Chr(Tg.Column + 64), False), Tg.Row & ",") & Tg.Row) = 0
    Application.EnableEvents = True
End Sub
 
Hi Timshell,

Het werkte niet, maar ik denk dat er mogelijk een haakje teveel staat achter Range("12:19,22:26,31:36")) .

Terwijl ik bezig was om uit te vogelen waarom het niet werkte, stuitte ik op het volgende probleem dat het natuurlijk een macro is. En het bestand dat ik maak is een template, waar gebruikers zelf rijen kunnen toevoegen en deleten. Ik heb het nu anders opgelost: Ik houd toch de hele kolommen aan voor de macro en de lege rijen (die enkel voor een betere layout bedoeld zijn) geef ik in celeigenschappen lettertype kleur wit mee. Dan staat er misschien wel iets, maar is het niet zichtbaar.

Maar hoe dan ook, toch weer erg bedankt voor je hulp.

Groetjes, Ingrid
 
Jammer dat de macro niet werkt in jouw bestand. In mijn testbestand ging het nog goed en aan de haakjes ligt het ook niet.
Succes ermee toch.
 
Beter?
Code:
Private Sub Worksheet_Change(ByVal Tg As Range)
 With Application
   .EnableEvents = False
    If Intersect(Tg, Union(Range("G12:I19"), Range("G22:I26"), Range("G31:I36"))) Is Nothing Then
     .Undo
    Else
        Range(Join(Filter(Split("G H I"), Chr(Tg.Column + 64), False), Tg.Row & ",") & Tg.Row) = 0
     End If
  .EnableEvents = True
End With
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan