..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

iskanje poatkov IF in AND

Pomoč pri izdelavi makrov

iskanje poatkov IF in AND

OdgovorNapisal/-a rick » To jun 02, 2009 9:38 pm

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
:)
rick
 
Prispevkov: 216
Pridružen: So feb 17, 2007 9:18 pm



Matjazev.NET
 

OdgovorNapisal/-a kljuka13 » To jun 02, 2009 9:58 pm

Č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;"")
Slika
Slika
Slika
kljuka13
 
Prispevkov: 257
Pridružen: Po sep 10, 2007 4:29 pm
Kraj: Maribor

OdgovorNapisal/-a admin » To jun 02, 2009 10:21 pm

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
admin
Site Admin
 
Prispevkov: 3537
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a rick » Sr jun 03, 2009 8:04 pm

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:
rick
 
Prispevkov: 216
Pridružen: So feb 17, 2007 9:18 pm

OdgovorNapisal/-a kljuka13 » Sr jun 03, 2009 8:09 pm

Če sedaj jaz prav razumem:

Koda: Izberi vse
Sub preracunajVse()
    For i = 1 To 100
        Range("C" & i) = FunkcijaMeseci
    Next i
End Sub
Slika
Slika
Slika
kljuka13
 
Prispevkov: 257
Pridružen: Po sep 10, 2007 4:29 pm
Kraj: Maribor

OdgovorNapisal/-a rick » Sr jun 03, 2009 9:16 pm

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

:)
rick
 
Prispevkov: 216
Pridružen: So feb 17, 2007 9:18 pm

OdgovorNapisal/-a kljuka13 » Sr jun 03, 2009 9:17 pm

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.
Slika
Slika
Slika
kljuka13
 
Prispevkov: 257
Pridružen: Po sep 10, 2007 4:29 pm
Kraj: Maribor

OdgovorNapisal/-a rick » Sr jun 03, 2009 9:42 pm

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....
rick
 
Prispevkov: 216
Pridružen: So feb 17, 2007 9:18 pm

OdgovorNapisal/-a admin » Če jun 04, 2009 7:38 am

rick je 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
admin
Site Admin
 
Prispevkov: 3537
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a rick » Če jun 04, 2009 5:21 pm

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
rick
 
Prispevkov: 216
Pridružen: So feb 17, 2007 9:18 pm

OdgovorNapisal/-a admin » Pe jun 05, 2009 7:46 am

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
admin
Site Admin
 
Prispevkov: 3537
Pridružen: Sr jul 20, 2005 10:06 pm


Vrni se na VBA

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 2 gostov