Forum » Programska oprema » VLOOKUP problem v Excelu
VLOOKUP problem v Excelu
Markoff ::
Že cel dan se ubadam s problemom, ki naj bi ga razrešil z VLOOKUP funkcijo, a ta ne deluje povsem tako, kot bi si želel.
Moj problem je sledeč: imam vnosno polje, v katerega je potrebno vnesti datum fakture. Na datum fakture je vezan mesečni ključ za delitev stroškov. Kar želim, je, da Excel na podlagi datuma fakture izbere pravilni ključ – npr. če je datum fakture 14.2.2011, potem naj bi Excel uporabil izračunani ključ iz meseca februarja 2011.
Datum fakture je v obliki/formatu date (npr. 14.3.2001), mesec/leto ključa pa v formatu »mmmm yyyy«, pri čemer se seveda v ozadju upošteva tudi dan. Kako torej zastaviti VLOOKUP funkcijo, da bo pravilno primerjala mesec/leto datuma fakture in mesec/leto ključa in na podlagi ujemanja izbrala ustrezni ključ?
Trenutno funkcija izgleda takole:
=IF(K26="Direct";1;IF(K26="Indirect";IFERROR(VLOOKUP(AND(YEAR(D26);MONTH(D26));$Y$20:$AB$37;4;FALSE);0)))
Razlaga: če je strošek direkten (izbira vnaprej definirane vrednosti polja kot Direct), se uporabi faktor 1 (neproblematičen). Če je strošek indirekten, se torej zažene loop. Najprej IFERRROR poskrbi, da VLOOKUP funkcija ne vrne rezultata #N/A, temveč 0, nato pa naj bi funkcija VLOOKUP preverila, da sta tako leto kot mesec datuma fakture (AND) enaka enemu od podatkov v (statičnem) razponu Y20:AB37, ko najde enako vrednost, iz te vrstice izbere podatek iz 4. stolpca (ključ za delitev). Žal VLOOKUP vedno vrne vrednost 0 ne glede na to, kakšen je par datumov (torej napako)...
Žal googlanje vrne ogromno virov na temo VLOOKUP, a nič o primerjanju časovnega podatka za mesec in leto (a brez dneva) hkrati. Se komu sanja, kaj delam narobe? Za vsak hint bi bil hvaležen...
Moj problem je sledeč: imam vnosno polje, v katerega je potrebno vnesti datum fakture. Na datum fakture je vezan mesečni ključ za delitev stroškov. Kar želim, je, da Excel na podlagi datuma fakture izbere pravilni ključ – npr. če je datum fakture 14.2.2011, potem naj bi Excel uporabil izračunani ključ iz meseca februarja 2011.
Datum fakture je v obliki/formatu date (npr. 14.3.2001), mesec/leto ključa pa v formatu »mmmm yyyy«, pri čemer se seveda v ozadju upošteva tudi dan. Kako torej zastaviti VLOOKUP funkcijo, da bo pravilno primerjala mesec/leto datuma fakture in mesec/leto ključa in na podlagi ujemanja izbrala ustrezni ključ?
Trenutno funkcija izgleda takole:
=IF(K26="Direct";1;IF(K26="Indirect";IFERROR(VLOOKUP(AND(YEAR(D26);MONTH(D26));$Y$20:$AB$37;4;FALSE);0)))
Razlaga: če je strošek direkten (izbira vnaprej definirane vrednosti polja kot Direct), se uporabi faktor 1 (neproblematičen). Če je strošek indirekten, se torej zažene loop. Najprej IFERRROR poskrbi, da VLOOKUP funkcija ne vrne rezultata #N/A, temveč 0, nato pa naj bi funkcija VLOOKUP preverila, da sta tako leto kot mesec datuma fakture (AND) enaka enemu od podatkov v (statičnem) razponu Y20:AB37, ko najde enako vrednost, iz te vrstice izbere podatek iz 4. stolpca (ključ za delitev). Žal VLOOKUP vedno vrne vrednost 0 ne glede na to, kakšen je par datumov (torej napako)...
Žal googlanje vrne ogromno virov na temo VLOOKUP, a nič o primerjanju časovnega podatka za mesec in leto (a brez dneva) hkrati. Se komu sanja, kaj delam narobe? Za vsak hint bi bil hvaležen...
Antifašizem je danes poslednje pribežališče ničvredneža, je ideologija ničesar
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
Markoff ::
Kot zanimivost: v sosednji celici sem uporabil praktično podobno funkcijo z manj argumentov:
=IF(D27="";0;IFERROR(VLOOKUP(YEAR(D27);$AE$20:$AF$22;2;FALSE);0))
Tale deluje brez problemov. Torej je očitno težava v opredelitvi, kdaj sta mesec in leto med dvema datumoma enaka. A kakšna?
=IF(D27="";0;IFERROR(VLOOKUP(YEAR(D27);$AE$20:$AF$22;2;FALSE);0))
Tale deluje brez problemov. Torej je očitno težava v opredelitvi, kdaj sta mesec in leto med dvema datumoma enaka. A kakšna?
Antifašizem je danes poslednje pribežališče ničvredneža, je ideologija ničesar
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
Markoff ::
OK, workaround:
Izvirni datum sem konvertiral v številko in sicer s formulo =MONTH(D16)&YEAR(D16), kar vrne rezultat 12010. Enako sem storil s tabelo ključev, ta rezultat se seveda nahaja v tabeli.
Sedaj pa catch-22: funkcija =IF(K26="Direct";1;IF(K26="Indirect";IFERROR(VLOOKUP(L26;$Z$20:$AD$37;3;FALSE);0))) mi lepo vrača rezultat, če želim podatek iz stolpca 2 (števec) ali stolpca 3 (imenovalec; kot je razvidno iz formule), iz stolpca 4, kjer se nahaja ključ, pa ne! Stolpca 4 in 5 sta sicer združena (merge), vendar tudi če jih razdružim, funkcija ne vrne rezultata. Mesec in leto, združena na tak način, sta unikatna, torej ni problem v podvajanju in zbeganju funkcije.
What the flonck?
Prokleti cepec, imel sem circular reference v 4. stolpcu, Excel pa mi sploh ni zatežil. Evo, zgoraj je opisana rešitev problema. Hvala za vso pomoč, fantje in punce.
Izvirni datum sem konvertiral v številko in sicer s formulo =MONTH(D16)&YEAR(D16), kar vrne rezultat 12010. Enako sem storil s tabelo ključev, ta rezultat se seveda nahaja v tabeli.
Sedaj pa catch-22: funkcija =IF(K26="Direct";1;IF(K26="Indirect";IFERROR(VLOOKUP(L26;$Z$20:$AD$37;3;FALSE);0))) mi lepo vrača rezultat, če želim podatek iz stolpca 2 (števec) ali stolpca 3 (imenovalec; kot je razvidno iz formule), iz stolpca 4, kjer se nahaja ključ, pa ne! Stolpca 4 in 5 sta sicer združena (merge), vendar tudi če jih razdružim, funkcija ne vrne rezultata. Mesec in leto, združena na tak način, sta unikatna, torej ni problem v podvajanju in zbeganju funkcije.
What the flonck?
Prokleti cepec, imel sem circular reference v 4. stolpcu, Excel pa mi sploh ni zatežil. Evo, zgoraj je opisana rešitev problema. Hvala za vso pomoč, fantje in punce.
Antifašizem je danes poslednje pribežališče ničvredneža, je ideologija ničesar
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
Zgodovina sprememb…
- spremenilo: Markoff ()
smetko ::
Če imaš v 1.koloni tabele ključev podatek datum, potem ti išče po datumu(v bistvu številki) in neglede kako imaš nastavljen filter za prikaz podatkov.
Možni rešitvi sta dve:
1. če imaš tabelo ključev sortirano po datumu, potem lahko uporabiš vlookup s prvim podatkom datum, in četrtim podatkom true. to pomeni, da ti išče prvi manjši datum od iskanega datuma.
2. dodaš v tabelo ključev kolono, v katero ti excel izračuna samo leto in mesec kot string (lahko tudi številko) in ti potem iščeš po tej koloni.
Možni rešitvi sta dve:
1. če imaš tabelo ključev sortirano po datumu, potem lahko uporabiš vlookup s prvim podatkom datum, in četrtim podatkom true. to pomeni, da ti išče prvi manjši datum od iskanega datuma.
2. dodaš v tabelo ključev kolono, v katero ti excel izračuna samo leto in mesec kot string (lahko tudi številko) in ti potem iščeš po tej koloni.
No comment
Markoff ::
Smetko, imaš prav. Sicer sem uporabil rešitev pod št. 2 (kot opisano zgoraj s formulo =MONTH(A1)&YEAR(A1), vendar pa št. 2 ne bi delovala v primeru, da bi bil datum za zadnjim obdobjem, VLOOKUP pa bi vzel kot najbližji približek ključ iz zadnjega meseca. Delovala pa bi pogojno, če bi dodal še en (skrit) datum in sicer dan po koncu zadnjega meseca - na ta način bi vsi naknadni datumi dobili vrednost 0, ki bi jo dodelil ključu na ta dan. Vendar - PAZI - vsem mesecem moram dan spremeniti v vrednost 1, saj sicer dobim spodnjo tabelo:
ERGO:
Obdobje Ključ
1.7.2011 0
30.6.2011 0,5
30.5.2011 0,3
...
30.2.2011 DING DING DING
Za vsak mesec moram torej dan spremeniti v vrednost 28 ali manj (najraje v 1). Iskanje najbližjega bi sicer še vedno moralo delovati - kot najbližjo vrednost datuma 30.6. bi VLOOKUP s TRUE parametrom moral najti 1.6.2011. Če to dela, smo zmagali (kot rečeno, uporabil sem že 2. rešitev).
ERGO:
Obdobje Ključ
1.7.2011 0
30.6.2011 0,5
30.5.2011 0,3
...
30.2.2011 DING DING DING
Za vsak mesec moram torej dan spremeniti v vrednost 28 ali manj (najraje v 1). Iskanje najbližjega bi sicer še vedno moralo delovati - kot najbližjo vrednost datuma 30.6. bi VLOOKUP s TRUE parametrom moral najti 1.6.2011. Če to dela, smo zmagali (kot rečeno, uporabil sem že 2. rešitev).
Antifašizem je danes poslednje pribežališče ničvredneža, je ideologija ničesar
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
in neizprosen boj proti neobstoječemu sovražniku - v zameno za državni denar
in neprofitno najemno stanovanje v središču Ljubljane. -- Tomaž Štih, 2021
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | pomoč excel (strani: 1 2 )Oddelek: Programska oprema | 8083 (3660) | -JM- |
» | Excel 2013 - preprost graf z datumomOddelek: Programska oprema | 787 (648) | dunda |
» | Excel - vrednost celice glede na drugo celicoOddelek: Pomoč in nasveti | 1959 (1753) | smetko |
» | excell formuleOddelek: Programska oprema | 2213 (1915) | ZePe |
» | [Excel]Vrednost celice = ime dokumentaOddelek: Programska oprema | 4823 (4245) | veteran |