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