iskanje poatkov IF in AND

Pomoč pri izdelavi makrov
Odgovori
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

iskanje poatkov IF in AND

Odgovor Napisal/-a rick »

pozdravljeni

najprej opravičilo,če je moje vprašanje nerodno...
zanima me sledeč makro in tole so podatki:

nahajam se v stolpcu "c",v kateri koli celici.
recimo da sem v c3
...če je a3=pomlad in če je b3=marec,potem naj bo vrednost 10 v c3
...če je a3=pomlad in če je b3=april,potem naj bo vrednost 20 v c3
...če je a3=pomlad in če je b3=maj,potem jnaj bo vrednostt 30 v c3
....in tako naprej do konca,seveda bom napisal še več pogojev(okrog 25),
mesece in letne čase sem uporabi le za razumevanje.
vaše pomoči bom zelo vesel.





pomlad..... marec..... 10
pomlad..... april..... 20
pomlad..... maj..... 30
poletje..... junij..... 40
poletje..... junij..... 50
poletje..... avgust..... 60
jesen..... september..... 70
jesen..... oktober..... 80
jesen..... november..... 90
zima..... december..... 100
zima..... januar..... 110
zima..... februar..... 120

lp,rick

ps malo mi je žal "starega"izgleda spletne strani,tako sem se jo navadil...
no,ta je seveda bolj sodobna
:)
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Če jaz prav razumem vprašanje, ni potrebno poseči po VBA temveč le po funkcijah.

Koda: Izberi vse

=IF(AND($A1="pomlad";$B1="marec");ROW()*10;"")
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Sva s kljuko hkrati odgovarjala in tudi jaz sem vam mislil svetovati navadne funkcije, toda ker pišete, da so pogoji lahko bolj kompleksni sem vam vmes zapisal še VBA funkcijo in makro:

Koda: Izberi vse

'
' www.matjazev.net
'   junij 2009
'
Public Function FunkcijaMeseci()
    Dim vrstica As Long
    
    vrstica = ActiveCell.Row
    DolociVrednost = ""
    
    If ((Cells(vrstica, 1) = "pomlad") And (Cells(vrstica, 2) = "marec")) Then FunkcijaMeseci = 10
    If ((Cells(vrstica, 1) = "pomlad") And (Cells(vrstica, 2) = "april")) Then FunkcijaMeseci = 20
    If ((Cells(vrstica, 1) = "pomlad") And (Cells(vrstica, 2) = "maj")) Then FunkcijaMeseci = 30
    ' in tako dalje
End Function

Public Sub MakroMeseci()
    ActiveCell = FunkcijaMeseci
End Sub
To torej lahko uporabljate na dva načina. Ali se postavite v celico in napišete

Koda: Izberi vse

=FunkcijaMeseci()
ali pa se postavite v celico in izvedete makro MakroMeseci
lp,
Matjaž Prtenjak
Administrator
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen,
najprej hvala za makro,ki je brez dvoma uporaben,formula pa morda malo manj,ker je pač več pogojev,kot sem jih jaz prikazal.
vprašal bi tudi:
sedaj mi makro izračuna za vsako celico posebej v kolikor ga sprožim....
vsak dan imam veliko pogojev in bi blo smiselno,če bi lahko z enim klikom
vse celice preračunal naenkrat v stolpcu "c"(torej,samo tiste,ki še niso preračunane)in ne vsake posebej,kot sedaj,kar je zelo zamudno.
je morda tudi to izvedljivo? :?:

za odgovor se iskreno zahvaljujem.

lp,rick :wink:
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Če sedaj jaz prav razumem:

Koda: Izberi vse

Sub preracunajVse()
    For i = 1 To 100
        Range("C" & i) = FunkcijaMeseci
    Next i
End Sub
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen,
hvala za namig,ki ga pa ne znam uporabiti.....oziroma ne vem,
če je ustrezen.
"Matjažev" makro,mi izračuna v vsaki celici posebej,
torej,v celicah stolpca "c"
moram opraviti recimo 30 izračunov,
se pravi,da se moram venomer pomikati navzdol
in pognati makro za izračun vsake celice posebej.vaš makro pa mi je naredil nekaj drugega(težko bi razložil),poleg tega je računal v stolpcu tudi tam,kjer levo v stolpcu "a" in "b" ni bilo podatkov.a bi se dalo še kaj
dodati?res bom vesel rešitve.
lp,rick

:)
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Moj makro vam poenostavi pomikanje po celicah navzdol. Makro se zažene 100 krat (!!! sami lahko nastavite) in v celicah od C1 do C100 izvede makro, ki bi ga sicer vi mogli ročno.
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen kljuka

v stolpcu c mi vrže vrednosti 10,torej same desetke od c1 do c 100.
to je problem.
če imam tele podatkev celicah :

pomlad..... marec..... 10
pomlad..... april..... 20
pomlad..... maj..... 30

potem,mi mora vrniti vrednost 10 v c1
potem,mi mora vrniti vrednost 20 v c2
potem,mi mora vrniti vrednost 30 v c3

pri men se to ne zgodi....
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

rick napisal/-a:najprej hvala za makro,ki je brez dvoma uporaben,formula pa morda malo manj,ker je pač več pogojev,kot sem jih jaz prikazal.
:):) Ta je pa dobra. Formula in makro sta povsem enaka. Makro ne naredi nič drugega, kot pokliče kodo, ki jo sicer izvede funkcija... :)

In ravno funkcija je namenjena natanko tem problemom, ki jih opisujete in rešujete nadalje s Kljuko... Lepo se postavite v celico C1 (ali kamorkoli pač) in vpišite

Koda: Izberi vse

=FunkcijaMeseci() 
ter lepo to formulo kopirajte navzdol ali pa kamorkoli pač, kjer jo potrebujete... Zato sem vam to napisal v obliki formule, saj sem sklepal, da je bolj uporabna od makra, ki ki bi ga bilo potrebno prožiti ob vsaki izbiri celice!!!
lp,
Matjaž Prtenjak
Administrator
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljeni

mogoče pa se res ne razumemo........
vse te formule in še več bi morale biti v eni celici
v vašem premeru mi izračuna le eno možnost.V celici "a1" ne bo vedno
"pomlad" in v celici "b1" bo morda "april"......



=IF(AND($A1="pomlad";$B1="marec");ROW()*10;""

=IF(AND($A1="pomlad";$B1="april");ROW()*20;"")

=IF(AND($A1="pomlad";$B1="maj);ROW()*30;"")

=IF(AND($A1="poletje";$B1="junij");ROW()*40;"")

.......itd,
no,kako bi vse te formule(in še več seveda) združil v eni sami celici??vaš makro to omogoča,vendar velja,kot ste ugotovili za izračun le ene celice.

za odgovor se zahvaljujem

ps

če potegnem formulo =FunkcijaMeseci() navzdol mi vrne vedno
enake vrednosti ,zanimivo,če pa preračunavam posamično,
pa stvar deluje odlično,toda zamudno.


lp,rick


to
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Aha, to povejte... Sem vam funkcijo napisal malce prehitro oz. je nisem preizkusil... Spodaj imate popravljeno funkcijo in popravljen makro, ki sedaj delujeta pravilno:

Koda: Izberi vse

'
' www.matjazev.net
'   junij 2009
'
Public Function FunkcijaMeseci(Obmocje As Range)
    Dim vrstica As Long
   
    FunkcijaMeseci = "<neznano>"
   
    If ((Obmocje.Cells(1, 1) = "pomlad") And (Obmocje.Cells(1, 2) = "marec")) Then FunkcijaMeseci = 10
    If ((Obmocje.Cells(1, 1) = "pomlad") And (Obmocje.Cells(1, 2) = "april")) Then FunkcijaMeseci = 20
    If ((Obmocje.Cells(1, 1) = "pomlad") And (Obmocje.Cells(1, 2) = "maj")) Then FunkcijaMeseci = 30
    ' in tako dalje
End Function

Public Sub MakroMeseci()
    ActiveCell = FunkcijaMeseci(Range(ActiveCell.Offset(0, -2), ActiveCell.Offset(0, -1)))
End Sub
Sprememba je v načinu klica funkcije, saj ji morate podati območje, kjer se vhodne vrednosti nahajajo. Konkretno to pomeni, da morate v C3 npr. zapisati sledečo funkcijo:

Koda: Izberi vse

=funkcijameseci(a3:b3)
To funkcijo pa lahko kopirate navzdol in bo delovala pravilno :), kar pa se tiče formule pa sem se seveda skliceval na formulo (FunkcijaMeseci) in makro (MakroMeseci)!
lp,
Matjaž Prtenjak
Administrator
Odgovori