Re: Excel keresőfüggvény
Nits László
nits at jedlik.eu
2012. Már. 28., Sze, 12:51:18 CEST
2012/3/28 Csökmei István Péter <csip at eoe.bmk.hu>:
>> =csillagjegy(A1)
>>
>> Ez szerintem elegáns!
>
> -nak is lenne nevezhető, ha az implementációban nem egy rakat else if -el
> oldottad volna meg, és gondoltál volna a hibás inputra is. pl. Mit csinál
> akkor a függvényed, ha a "cseresznye" értékre hívják meg?
#ÉRTÉK hibaüzenetet dobja
>
> 1. A nap értékét én egy Try ... Catch ... End Try szerkezetben alakítottam
> volna át.
Felesleges túlbonyolítás a dolognak, ha nélküle is helyesen működik.
>
> 2. Ez a feladat az esetkiválasztás tipikus esete, ezért sokkal elegánsabb
> lett volna egy
> Select Case nap
> Case 1 to 20
> csillagjegy = "Bak"
> Case 21 to 50
> csillagjegy = "Vízöntő"
> Case ...
> ...
> ...
> ...
> Case Else
> csillagjegy = "#HIBA"
> End Select
>
Kezdem érteni Kedves István (Péter), hogy mit gondolsz elegancia
alatt, de akkor had kötözködjem:
Mi a túrónak kell egy Case ágba két érték? Logikus, hogy "1 to 20"
után "21 to 50" jön.
Elegánsabb :-) lett volna, ha "Case Is < 21" -et javasolsz.
csillagjegy = "#HIBA" Else ágad tök felesleges, mert soha sem fog lefutni.
> 3. Az egész úgy ahogy van ágyúval verébre. (az 1. és 2. pontok csak az
> eleganciáról szólnak)
Az iskolai táblázatkezelési feladatok a gyári függvények alkalmazását
kérik számon, de az élet könnyen produkálhat
olyan helyzetet, amit a beépített függvényekkel nem, de egy egyszerű
VB függvénnyel megoldhatsz.
Ilyenkor megáll a tudomány, mert nem tanultunk VB-t, csak az FKERES-t?
(amúgy nem tudok programozni VB-ben, szívesen várom az ötleteket)
>> Apropó valaki megoldotta csak beépített keresőfüggvény használatával?
>> :-) (ÉV, HÓNAP, NAP, stb. függvények nélkül)
>
> Hmmm. DatePart ???? (nálad a második sorban :-) )
Persze én is használtam, de a feladatot feldobó kolléga kereső függvényt írt.
El tudom képzelni, hogy megoldható trükközéssel, egyéb beépített
függvények használata nélkül is, ezért kérdeztem.
>> Ha az algoritmizálás Neked "Bohóckodás" ....
>>
> Nem, nem az. De az ilyen Durrbele Balázs módszert elegánsnak nevezni kicsit
> erős.)
Mondjuk hogy gyors volt számomra a megoldás. (Ctrl-C, Ctrl-V).
Természetesen ismerem a Case szelekciót :-), aminek használatát inkább
áttekinthetőbbnek nevezném, persze a többirányú szelekció
összetettsége végett a háttérben valószínűleg több gépi utasítás fog
végrehajtódni, ezért ne bántsatok!
Engedjétek, meg hogy egy javított, de korán sem "Elegáns" megoldást másoljak:
Function csillagjegy(Dátum As Date) As String
nap = DatePart("y", Dátum)
If IsDate(Year(Dátum) & ".2.29") And nap > 79 Then nap = nap - 1
Select Case nap
Case Is < 21
csillagjegy = "Bak"
Case Is < 51
csillagjegy = "Vízöntő"
Case Is < 80
csillagjegy = "Halak"
Case Is < 111
csillagjegy = "Kos"
Case Is < 142
csillagjegy = "Bika"
Case Is < 173
csillagjegy = "Ikrek"
Case Is < 204
csillagjegy = "Rák"
Case Is < 236
csillagjegy = "Oroszlán"
Case Is < 267
csillagjegy = "Szűz"
Case Is < 297
csillagjegy = "Mérleg"
Case Is < 327
csillagjegy = "Skorpió"
Case Is < 356
csillagjegy = "Nyilas"
Case Else
csillagjegy = "Bak"
End Select
End Function
üdv.: Nits L.
További információk a(z) Techinfo levelezőlistáról