Saját függvény hibás vagy le nem futása

Saját függvény hibás vagy le nem futása
2018-03-13T09:26:38+01:00
2018-03-13T15:17:18+01:00
2022-10-15T21:31:39+02:00
tigerbacsi
Sziasztok!



Office excel 2007. angol nyelvvű program.

Még mindig a saját függvényemmel van gondom.  mivel a 2007. es office Excel nem tartalmazza a MINIF függvényt s égetően fontos nálunk, ám nem értenek a tömbképletekhez elég sokan gondoltam megírom. ám nem működik jól.

A függvényem :

Function MinIf (Mit As Variant, Hol As Range, Ertek As Range)

Dim ertekMin As Variant

Application.Volatile

helsor=Hol.Row                                           'Hol argum. első sora
oHol=Hol.Column                                        'Hol argum. első oszlopa
oErtek=Ertek.Column                                   'Ertek argum. első oszlopa
eelsor=Ertek.Row                                         'Ertek argum. első sora
oszutsor=helsor+(Hol.Rows.Coun)-1           'Hol argum. utolsó sora

ertekMin=""
f=0
Dim rw As Integer: rw=helsor

Do While rw<>(oszutsor+1)

If cells(rw,oHol)=Mit And Cells(eelsor,oErtek)<ertekMin Then
ertekMin=Cells(eelsor,oErtek)
f=1
Eng If
rw=rw+1
eelsor=eelsor+1

Loop
If f=1 Then MinIf=ertekMin
If=f=0 thenMinIf="Nincs adat"

End Function



Remélem nem írtam itt el, mert ugye másolni nem tudom DRM miatt. Lényeg, hogy ez működik a Sheet1 lapon kis adatsorokkal több oszlopban is. Nincs hiba. Még ha regisztráltam Add-In bővítményként is.


regisztráció:

ThisWorkbook fülön (General) Object-ben

Sub DescribeFunction()

Dim FuncName As String
Dim FuncDesc AS String
Dim Category As Variant

FuncName="MinIf"
FuncDesc="Lista adott feltételnek eleget tevő adatokat határorra meg."
Category="Saját Függvények"

Application.MacroOptions _
   Macro:=FuncName, _
   Description:=FuncDesc, _
   Category:=Category

End Sub

elmentem Add-In bővítményként, beállítom, hogy a bővítmények betöltődjenek indításkjor. is innen van gáz. Ha az eredeti file-ban ahol ezeket létrehoztam hozzáadok még egy két Sheet-et akkor vagy azokon működik belekattintás és enter után a képlet, vagy az első Sheeten. Ezen túltettem magam, mert ugye ide úgysem kell ilyen.

Nyitottam egy új munkafüzetet. Sheet1 -en beleraktam egy 1600 soros adatsort. Sheet kettőt létrehoztam. Kimásoltam pár alapadatot, hogy mire keressen rá s már nem is működik. A bal alsó sarokban a ready felirat mellett megjelent egy Circular references E4 (itt van a MinIf képletem) és nincs adat eredménnyel áll. Nem jöttem rá miért.

Visszatérve ugyanabba a filbe ahol az eredeti is írtam, oda bemásolva az adatsort sheet4-re, s sheet ötre ugyanígy beírva semmi nem történik.

Kifagytam. nem tudom most mi van. Nem szakmám a programozás, s csak hobbiként űzöm, de imádok az excellel foglalkozni, de lassan kezdem utálni.

Mi lehet a gond? mért nem működik több munkalapon, vagy másik munkafüzetben? Az gond lehet, hogy az eredeti munkafüzetben van ugyanerre a példára létrehozva egy MaxIf függvény is?

Köszönöm előre is!
Mutasd a teljes hozzászólást!
Szia!

Amúgy nem értem mért baj az, hogy két különböző munkalapon hivatkozok E oszlopra.

Azért, mert a függvényed mindig az aktuális munkalapról veszi a tartományokat. Ha szeretnéd, hogy másik munkalapról is működjön, akkor
      - egyrészt a paramétereknél ugyanúgy meg kell adni, melyik munkalapról van szó,
      - másrészt a függvényben magában is kell apró változás:
ertekMin=""   helyett  ertekMin=0 ' már ha szám minimumot keresel

If cells(rw,oHol)=Mit And Cells(eelsor,oErtek)<ertekMin Then ertekMin=Cells(eelsor,oErtek)
helyett pedig

If Hol.cells(rw)=Mit And Ertek.Cells(eelsor)<ertekMin Then ertekMin=Ertek.Cells(eelsor)
Ez a megoldás az eredeti tartományok egy-egy cellájára hivatkozik, amit te használtál, az pedig az adott munkalap egy-egy cellájára. Ha továbbra is úgy szeretnéd, akkor

If Hol.Parent.Cells(rw,oHol)=Mit And Ertek.Parent.Cells(eelsor,oErtek)<ertekMin Then ertekMin=Ertek.Parent.Cells(eelsor,oErtek)
Üdv.
Mutasd a teljes hozzászólást!

  • Szia!

    Az E4 cella valószínűleg benne van a függvény számára megadott valamelyik tartományban.
    Ezért körkörös a hivatkozás.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Sheet2.E4-es cellába írom a képletet, S a Sheet1-en vannak az alapadatok. (bár az tény, hogy az egyik adatsorom az pont a E oszlopban van, de két különböző munkalap, szóval elvileg nem akadhat össze. Szerintem.
    Mutasd a teljes hozzászólást!
  • Saját függvény hibás vagy le nem futása

    Megjegyzésként két dolog:
    Azért illik kicsitt magyarosabban megadni a címet.
    És ha már van, használni a "Forráskód" gombot (balról a harmadik)!
    Mutasd a teljes hozzászólást!
  • Sajnálom! Igazad van, ám engedd meg, hogy én is megjegyezek valamit.

    És ha már van, használni a "Forráskód" gombot (balról a harmadik)!


    Ha jól emlékszem és - sel nem kezdünk mondatot.



    Ettől függetlenül köszönöm az észrevételed!
    Mutasd a teljes hozzászólást!
  • Mégis ez a baj az egyikre. Ám ha megváltoztatom a sheet2-n, hogy ne az E oszlopba írjak akkor hibásan fut le. Minden esetben a "Nincs adat"-ot adja eredményül. Amúgy nem értem mért baj az, hogy két különböző munkalapon hivatkozok E oszlopra. Másrészt a többi gondom sem oldódik meg ha a képlet beírási helyét átrakom egy másik oszlopba.
    Mutasd a teljes hozzászólást!
  • Jó poén...
    Bár már nálam nagyobbak is elkövették...
    Plusz egy madár-ral kezdés...
    Mutasd a teljes hozzászólást!
  • Szia!

    Amúgy nem értem mért baj az, hogy két különböző munkalapon hivatkozok E oszlopra.

    Azért, mert a függvényed mindig az aktuális munkalapról veszi a tartományokat. Ha szeretnéd, hogy másik munkalapról is működjön, akkor
          - egyrészt a paramétereknél ugyanúgy meg kell adni, melyik munkalapról van szó,
          - másrészt a függvényben magában is kell apró változás:
    ertekMin=""   helyett  ertekMin=0 ' már ha szám minimumot keresel

    If cells(rw,oHol)=Mit And Cells(eelsor,oErtek)<ertekMin Then ertekMin=Cells(eelsor,oErtek)
    helyett pedig

    If Hol.cells(rw)=Mit And Ertek.Cells(eelsor)<ertekMin Then ertekMin=Ertek.Cells(eelsor)
    Ez a megoldás az eredeti tartományok egy-egy cellájára hivatkozik, amit te használtál, az pedig az adott munkalap egy-egy cellájára. Ha továbbra is úgy szeretnéd, akkor

    If Hol.Parent.Cells(rw,oHol)=Mit And Ertek.Parent.Cells(eelsor,oErtek)<ertekMin Then ertekMin=Ertek.Parent.Cells(eelsor,oErtek)
    Üdv.
    Mutasd a teljes hozzászólást!
  • Mesterem Fferi!

    Nagyon köszönöm szépen. Így most működik.

    annyit kellett változtatnom, hogy az ertekMin=0 helyett egy 1E+99-et kellett megadnom, mert ha 0-át adtam akkor mindig 0 volt az eredmény, mert a tartomány az csak 0 és pozitív számokat tartalmaz, így ugye az If feltétel egyik oldala sosoem teljesült. (erre már régebben rájöttem )

    ezen forráskódot használtam mert ezt értem

    ezt a forráskódot használtam mert ezt értem.



    If Hol.Parent.Cells(rw,oHol)=Mit And Ertek.Parent.Cells(eelsor,oErtek)<ertekMin Then
     ertekMin=Ertek.Parent.Cells(eelsor,oErtek)


    Ez megoldotta a többi hibát is. Eddig is meg volt adva a kijelölés miatt a munkalap hivatkozása is. de most minden működik!





    Köszönöm szépen! Tied az 50 pont!
    Mutasd a teljes hozzászólást!
  • Csak még egy pontosítás, hogy érthető legyen a két koncepció között a különbség:
    1. Amikor magával az adott tartománnyal (Range) dolgozunk, ott az indexelés mindig eggyel indul. pl. az A2:A5 tartomány első cellája (amit a Range("A2:A5").Cells(1) módon érhetünk el, az A2 cella lesz és így tovább. Ebben az esetben nem kell "törődni" azzal, hogy melyik munkalapon van az adott tartomány(!), mert maga a tartomány arra mutat.
    2. Amikor a tartomány munkalapon való elhelyezkedését vesszük figyelembe, akkor az indexelés a munkalap sor-oszlop értéke alapján működik. Azaz a fenti A2:A5 tartomány első cellája a Sheets(1).Cells(2,1) indexeléssel érhető el. Itt pedig szükség van arra is, hogy megadjuk, melyik munkalap tartományáról van szó!  Erre szolgál a Parent tulajdonság.

    Nagyon fontos, hogy a két koncepcióba ne keveredjünk bele egy eljáráson belül - illetve a címzést (indexelést) összehangoltan végezzük.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen a magyarázatot! Megérne még 50 pontot ez a válaszod is pluszban.
    Mutasd a teljes hozzászólást!
  • Ezt még a moderátor sem tudná megtenni...
    Megj: Talán még egy gondolat így témazárás után a "kötőszó és a mondatkezdésről" =>

    ****************************

    Közkeletű vélekedés, hogy ‘és’ kötőszóval nem kezdünk mondatot.

    Ilyen nyelvtani szabály nincs, és azelőtt sem volt.

    Az iskolában viszont a magyartanárok jogosan hangoztatták és hangoztatják ezt az iskolai fogalmazási szabályt (tehát nem nyelvtani, grammatikai szabályt). A gyerekek ugyanis nagyon sokszor kezdenék fogalmazásaikat, feleleteiket ezzel a kötőszóval: és akkor… és akkor… és aztán…

    Pedig a társalgási nyelvben, párbeszédekben éppen a közvetlen kapcsolódást jelzi az “és” (vagy bármilyen más) kötőszóval való mondatkezdés.

    Hivatalos levelekben, jogszabályok szövegében viszont nem találkozunk vele, oda valóban nem illik. Érettségi dolgozatban is kifogásolható lehet, a műfajtól függően.

    Ezért azt mondhatjuk, hogy kötőszóval a nyelvváltozattól, a nyelvi helyzettől függően lehet (vagy nem lehet) mondatot kezdeni.

    ****************************

    ... ...
    Mutasd a teljes hozzászólást!
  • Sajnos nem tehetik ,vagy nem teszik meg. Ő legalább nem azzal foglalkozott, hogy milyen nyelvtani hibákat vétettem. Hanem értelmezte a gondomat, s próbált illetve segítséget is nyújtott. Természetesen nem kellett volna elkövetnem, de ettől függetlenül te csak offoltad a topikot ami szerintem nem korrekt cselekedet. S sajnos ezért sem vonhatnak le pontot Tőled, s nem is akarnak. Az, hogy ezek után te milyen megítélésben részesül előttem illetve más témát olvasók körében az megint más tészta. Mindentől függetlenül neked is köszönöm, hogy egy VB-vel foglalkozó topikban egy kis helyesírást, avagy magyar nyelvtant is tanulhattam. EZ is hasznos volt számomra. Nem kívánok én neked semmi rosszat. Élj boldogan, sikeresen.
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd