Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Excel-ova korisnički definisana funkcija (UDF) nece da se automatski preracunava

[es] :: Office :: Excel :: Excel-ova korisnički definisana funkcija (UDF) nece da se automatski preracunava

[ Pregleda: 2288 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

paja_odi

Član broj: 54344
Poruke: 29
*.broadband.blic.net.



Profil

icon Excel-ova korisnički definisana funkcija (UDF) nece da se automatski preracunava24.12.2010. u 11:26 - pre 162 meseci
Napisao sam jednostavnu funkciju u excelu koja ispisuje poslednju adresu tražne vrijednosti u koloni F. Kod je sledeci
Code:

Function nzadnji(vrijednost)
Dim i, zadnjired
zadnjired = Range("F" & Rows.Count).End(xlUp).Row
For i = zadnjired To 1 Step -1
If Cells(i, "F").Value = vrijednost Then
nzadnji = Cells(i, "F").Address(0, 0)
Exit For
End If
Next
End Function


Funkcija dobro radi, ali ako se u koloni F doda još jedna vrijednost neće da se preračuna nego se mora ponovo ići na ćeliju u kojoj je formula upisana i preračunati je ručno. Na netu sam našao da se nakon reda
Code:
Dim i, zadnjired
doda red
Code:
Application.Volatile
funkcija će se preracunavati, ali da ako se funkcija koristi mnogo puta može značajno da se uspori. U fajlu imam vec mnogo matričnih formula. Postoji li način da se napiše ova funkcija, a da ne izgubi na efikasnosti.
 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
*.wimax.verat.net.

Sajt: www.gowi.rs


+109 Profil

icon Re: Excel-ova korisnički definisana funkcija (UDF) nece da se automatski preracunava24.12.2010. u 20:23 - pre 162 meseci
Evo šta kaže o Volatile funkciji

Citat:
volatile function must be recalculated whenever calculation occurs in any cells on the worksheet. A nonvolatile function is recalculated only when the input variables change. This method has no effect if it's not inside a user-defined function used to calculate a worksheet cell.


Na osnovu toga jasno je i moguće rešenje. Ako definišeš opseg koji pretražuješ kao dodatni parametar moći ćeš da izbegneš volitile opciju. Npr. bez ulaženja u optimizaciju tvog koda (zašto ne koristiti find?) moglo bi npr:

Code:
Function nzadnji(vrijednost As Integer, rng As Range)
Dim i, zadnjired
zadnjired = rng.End(xlDown).Row
For i = zadnjired To 1 Step -1
   If rng.Cells(i, 1).Value = vrijednost Then
      nzadnji = rng.Cells(i, 1).Address(0, 0)
      Exit For
   End If
Next
End Function


Doduše rezultat možeš da dobiješ i bez korisnički definisane funkcije kombinaciojm ADDRESS/MATCH npr za pronalaženje vrednosti 14 u opsegu F1:F15
Code:
=ADDRESS(MATCH(2;INDEX(1/($F$1:$F$15=14);0));6)

Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

paja_odi

Član broj: 54344
Poruke: 29
*.broadband.blic.net.



Profil

icon Re: Excel-ova korisnički definisana funkcija (UDF) nece da se automatski preracunava27.12.2010. u 12:40 - pre 162 meseci
Hvala na odgovrima, prepravljeni kod mi ipak više odgovara jer je formula u koju bi se ovo trebalo ugraditi vec preglomazna.
 
Odgovor na temu

[es] :: Office :: Excel :: Excel-ova korisnički definisana funkcija (UDF) nece da se automatski preracunava

[ Pregleda: 2288 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.