Pagina 1 van 1  [ 17 berichten ]
Offline bastiaanS2
Die hard
di 10 jan 2012, 11:25 Bericht 
 
Ik kom er echt niet uit, en hoop even van jullie expertise gebruik te mogen maken.

Ik heb een cel waar dmv vertikaal zoeken een datum wordt opgehaald (wellicht van belang, de instelling voor de cel opmaak is dus ook datum)

Nu wil ik graag een ALS functie toevoegen. Ik heb al toegevoegd dat wanneer de functie een foutmelding (#N/B) geeft, dat de cel leeg blijft. dat heb ik als volgt gedaan:

=ALS(ISNB(VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR));"";(VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR)))

Ik gebruik hier ISNB, omdat de IS.FOUT niet werkt op de oudere excel.

nu wil ik toevoegen, dat wanneer de zoekwaarde van het verticaal zoeken wél teruggevonden wordt, maar geen waarde(datum) terug komt omdat die in het zoekblad niet is ingevuld, deze 0 vervangen wordt door NNG.


In het kort komt het dus hierop neer: bij een resultaat van het vertikaal zoeken : gewoon weergeven. Bij wel terugvinden van zoekwaarde, maar geen resultaat, de 0 vervangen door een NNG. Bijhet nietterugvinden van de zoekwaar moet een lege cel worden weergegeven.de ipv #N/B
Offline eppo
Pro
di 10 jan 2012, 11:44 Bericht 
Avatar gebruiker
Dat zou moeten lukken met een "nested if statement" (sorry, ik heb geen nederlandse excel). Dus je derde term (if..then...else), zou je dan wederom als een "als(" moeten schrijven. Dan krijg je dus een (if...then...elseif...then...else).
Offline bastiaanS2
Die hard
di 10 jan 2012, 14:07 Bericht 
 
tja, het is er niet makkelijker van geworden dat het gaat om het resultaat van een vertikaal zoeken opdracht. Ik heb al wat zitten sleutelen met als en alsdan, maar het is óf een foutwaarde of een foutmelding..
Offline Broadie
Die hard
di 10 jan 2012, 14:46 Bericht 
Avatar gebruiker
Zo iets zou ik met Visual Basic for Applications doen, en dan ofwel met een procedure, die je met een knop triggert, ofwel met een functie, die je met een argument oproept.
In VBA kun je je helemaal uitleven met loops en condities, in plaats van dat krampachtige gedoe met de standaard-functies, zoals IF of ALS, die daarvoor al gauw te beperkt zijn.

Als ik er vanavond aan toe kom, wil ik er best eens een poging toe doen. Tenzij je zelf al zegt: dat kan ik ook alleen wel.
Offline Mess
Pro
di 10 jan 2012, 15:01 Bericht 
Avatar gebruiker
=ALS(
ISNB(VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR))
;""
;ALS(
VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR) == 0
;"NNG"
;VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR)
)
)

Wellicht heb ik dan '== 0' niet goed staan, dat weet ik zo uit mijn hoofd niet.
Offline Rover
Master
di 10 jan 2012, 16:47 Bericht 
Avatar gebruiker
tot zover ik kan zien bijna goed 8)
=ALS(ISNB(VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR));"";
ALS(VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR)=0;"NNG";
VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR)))

Mag 1 = minder inderdaad.

Bedenk wel dat dit een redelijk zware formule is, als je deze slechts in 1 cel gebruikt is het geen probleem, maar als je deze formule gaat kopiëren naar een stuk of 50 cellen zal je Excel er onnodig traag van worden.
Offline Rover
Master
di 10 jan 2012, 16:51 Bericht 
Avatar gebruiker
Formule is ook uit te spreiden over 2 cellen, dat scheelt een wat zwaardere vertikaal zoeken functie.

De formule:
=ALS(VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR)=0;"NNG";
VERT.ZOEKEN($A34;Navi!$A:$CK;18;ONWAAR))
zet je in een niet direct zichtbare cel (bijvoorbeeld B1).
In de cel waar je de output wilt gebruik je dan: =als.fout(B1;"")
Offline Rover
Master
di 10 jan 2012, 16:54 Bericht 
Avatar gebruiker
Broadie schreef:
Zo iets zou ik met Visual Basic for Applications doen, en dan ofwel met een procedure, die je met een knop triggert, ofwel met een functie, die je met een argument oproept.

Hangt er vanaf hoevaak je deze formule gaat herhalen, is het slechts voor 1 cell dan is VBA totaal onnodig, beetje overdone zelfs. Moet dit worden toegepast op een groot aantal cellen, dan is het zeker goed in vba te doen.
Offline bastiaanS2
Die hard
di 10 jan 2012, 20:20 Bericht 
 
bedankt voor de suggesties. Ik heb al een hoop macro's lopen, dus ik kan ook daar eens in rommelen. Was er momenteel nog niet zo diep in gegaan, dat ik dit soort dingen via VBA zou gaan doen. Maar wellicht toch eens onderzoeken.

Het gaat om drie verschillende tabbladen waar dit soort formule ongeveer 40-50keer voorkomt. Ik ga liever geen kolom verbergen, omdat er met macro's al heel veel met kolommen en rijen wordt geschoven en verborgen/getoond.

Maar wat is nu de theorie achter de tweede ALS formule? want blijkbaar is deze geimplementeerd in de eerste ALS formule? Je zet dus geen losse ALS formules achter elkaar?

Nu is het meer: ALS (logische test; wanneerwaar; (wanneer niet waar: nieuwe ALS functie))

Of zie ik het verkeerd? Ik dacht namelijk dat het ook wel mogelijk was om het volgende te ontwerpen:

ALS (logische test; wanneerwaar; wanneer niet waar)+ALS (logische test; wanneerwaar; wanneer niet waar)+ALS (logische test; wanneerwaar; wanneer niet waar) enzovoorts
Offline mauriz
Respect
di 10 jan 2012, 21:10 Bericht 
Avatar gebruiker
bastiaanS2 schreef:
Nu is het meer: ALS (logische test; wanneerwaar; (wanneer niet waar: nieuwe ALS functie))

Correct, zoals Eppo al zegt; een nested-if-statement :thumb:
Offline Mess
Pro
di 10 jan 2012, 21:13 Bericht 
Avatar gebruiker
Bijna goed.
Voor zover ik weet werkt het alleen zo:
ALS(logische test; wanneerwaar; ALS(logische test; wanneerwaar; wanneernietwaar))

Het is een soort van watervalletje, waarbij hij ieder keer de logische test uitvoert en klaar is dan wel een stapje dieper gaat.

Daarbij kun je dan de laatste 'wanneernietwaar' vervangen door opnieuw een ALS() functie.

Dit heet zoals eppo al zei een geneste ALS-vergelijking / nested if-statement (of iets in die termen O:) )..

Ik kan de post van mauriz nog niet gezien.
Offline Broadie
Die hard
wo 11 jan 2012, 7:07 Bericht 
Avatar gebruiker
Rover schreef:
is het slechts voor 1 cell dan is VBA totaal onnodig, beetje overdone zelfs.
Van waar die koudwatervrees voor VBA? Zo veel meer werk is dat niet.
Je zou iets in deze geest kunnen schrijven:

With ActiveSheet
for x = 0 to i
for y = 0 to j
if .Cells(y, x).Value < DATEVALUE("11/01/2012") then .Cells(1, 1) = .Cells(y, x).Value
next j
next i
End With

Natuurlijk wel ervoor zorgen, dat i en j gedefinieerd zijn. Verder kun je je voorwaarden uitbreiden met wat je zo allemaal nodig hebt.
Ik doorzie zo snel niet, waar je precies je gezochte waarde neer wilt zetten, dus vergeef me mijn laksheid hierin, maar je begrijpt wel de boodschap, denk ik.

Binnen VBA is veel functionaliteit voor datum-manipulatie beschikbaar, die ik ook nog niet ken. Met wat googlen ontdek je veel handige voorbeelden.

Uiteindelijk ben je zo wellicht sneller aan de gang dan met onoverzichtelijke ALS(...) functies. En je leert hierdoor VBA ook voor andere taken, die niets met dit voorbeeld te maken hebben.
Offline Rover
Master
wo 11 jan 2012, 16:01 Bericht 
Avatar gebruiker
Broadie schreef:
Van waar die koudwatervrees voor VBA? Zo veel meer werk is dat niet.

Absoluut geen koudwaterfrees, wees gerust ik werk er behoorlijk veel mee. Echter is vba minder flexibel, en het zorgt af en toe voor veiligheidsissues ivm de macros. Als het 1 om slechts 1 formule in 1 cel gaat vind ik het onnodig om macros te gaan gebruiken.

In het geval van TS is het echter zeer zeker aan te bevelen.
Offline ikinks
Master
wo 18 jan 2012, 8:39 Bericht 
Avatar gebruiker
Om nog een Excel topic te voorkomen, het volgende:

Ik heb een Excel 2010 sjabloon gemaakt, 4 verschillende tabbladen, veel verwijzingen, zoekfuncties, voorwaardelijke opmaak, en nog wel een paar zaken waar ik redelijk tevreden mee ben. De bedoeling is dat collega's alleen de blauw gearceerde cellen invullen, en deze daarna afdrukken. Beveiligen is het probleem niet, maar het afdrukken wel. Dat gaat bij ons op twee manieren: PDF (m.b.v. PDF Creator die het bestand automatisch wegschrijft in een map op de server) of papier. De layout verschilt dan net iets: bij een PDF moet het bedrijfslogo in de koptekst worden meegenomen, bij printen op papier is het logo al voorgedrukt, maar moet er een specifiek vervolgpapier worden geselecteerd.

Is dit op de één of andere manier in het sjabloon te krijgen? Moet ik dan denken aan macro's, VBA, of een andere oplossing?
Offline Rover
Master
wo 18 jan 2012, 13:14 Bericht 
Avatar gebruiker
ikinks schreef:
Is dit op de één of andere manier in het sjabloon te krijgen? Moet ik dan denken aan macro's, VBA, of een andere oplossing?

Ja en ja. Hoe dit direct moet zou ik echt even moeten uitzoeken, ik weet eigenlijk wel zeker dat het kan. Is het bedrijfslogo trouwens de enige afbeelding op de sheet? of staat deze niet op de sheet en moet die wel in een pdf komen?
Offline ikinks
Master
wo 18 jan 2012, 15:24 Bericht 
Avatar gebruiker
Het bedrijfslogo staat nu standaard in de koptekst van de *.xltx opgenomen. Wanneer we een PDF maken staan de instellingen goed, bij afdrukken moet het logo eruit, blad 1 op briefhoofdpapier en de overige op vervolgpapier worden afgedrukt. Dat laatste is wel op te lossen door een profiel in de printerinstellingen te maken, maar ik zie dan liever een macro of iets dergelijks waarbij de persoon die het sjabloon invult (en dat zijn niet bepaald Excel-geeks) de keuze kan maken welke printer wordt gebruikt, zonder zich te hoeven bekommeren om de juiste instellingen.
Offline Rover
Master
wo 18 jan 2012, 15:31 Bericht 
Avatar gebruiker
Je kan de printerinstellingen vastleggen in een Macro, dat is opzich niet zo'n probleem. Weet alleen niet direct hoe die afbeelding eruit gehaald kan worden, maar moet volgens mij ook wel mogelijk zijn. Je krijgt dan naar mijn idee 2 verschillende macro's, 1 indien je een pdf wilt maken en 1 indien je wilt printen.

Als ik zometeen nog tijd heb zal ik wel eens kijken of ik wat kan vinden/schrijven.
 [ 17 berichten ] 


Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 4 gasten


Je mag geen nieuwe onderwerpen in dit forum plaatsen
Je mag niet antwoorden op een onderwerp in dit forum
Je mag je berichten in dit forum niet wijzigen
Je mag je berichten niet uit dit forum verwijderen

Zoek naar: