[ marin_k7 @ 27.11.2006. 10:39 ] @
Molim pomoć u vezi izvlačenja podataka iz čelija po zadanom ključu.

Opis problema:

Imam tablicu sa tri lista (prva dva predstavljaju mjesece, a posljednji bi trebao biti mali report s obzirom na stanje u prethodnim). Gore su navedeni datumi u mjesecima a ispod njih oznake (konkretno, X - neradan dan, D - dostavio, N - nije dostavio) i sada bi ja želio na trećem listu odabrati mjesec i da mi ispiše u nizu datume kod kojih stoji N.

Probao sam na dva načina koja mislim da bi trebala raditi ali nisam ni na jedan uspio. U prvom pokušaju sam probao sam povezati dvije formule i vjerojatno sintaksa nije bila dobra. Evo pokušaja u pseudo kodu:

IF c2:af30 CONCATENATE(ono što piše u retku iznad)
/znači, ako je value čelije = N, onda prepiši vrijednost čelije iz retka iznad toga i odvoji zarezom

No međutim programiranje mi i nije jača strana pa sam linijom slabijeg otpora pokušao na slijedeći način:Zamijenio sam N sa brojevima koji predstavlju datume i krenuo samo s naredbom cONCATENATE i poslje bi odvojio samo numeričke dijelove stringa, ali problem je u tome što cONCATENATE funkcija radi samo do 30 i ako mjesec ima više od 30 dana ovo pada u vodu.

Zapravo mi izbor mjeseca nije ni bitan jer ću ovo raditi samo za prehodni mjesec pa mi izbor mjeseca niti ne treba.

Vjerovatno sam zakomplicirao sa opisom problema i vjerovatno je i samo riješenje puno jednostavnije ali sam želio dati što više podataka. Primjer tablice je u prilogu.

Hvala unaprijed.

/još samo kad bi znao zakačiti file uz poruku...
[ timmy @ 28.11.2006. 15:29 ] @
1. Odaberi mesec za koji te zanima spisak
2. Proveri da li je Macro Security postavljeno na Medium
3. Dodaj novi modul u VB editoru
4. Paste-uj sledeci kod

Code:

Function Conc(list As String) As String
Dim s As String
Dim i As Integer
    s = ""
    For i = 1 To 31
        s = s & IIf(Worksheets(list).Cells(2, i + 2).Value = "N", i & ",", "")
    Next i
    If Len(s) > 0 Then s = Left(s, Len(s) - 1)
    Conc = s
End Function


5. Na listu REPORT u celiji C5 upisi formulu

Code:

=conc(c2)


i pevaj....

Pozdrav
[ marin_k7 @ 29.11.2006. 09:04 ] @
Zahvaljujem se na pomoći.

Radi kao sat! Sad mogu pjevati do zore!

Hvala i pozdrav.


Oprostite na smetnji, ali ako bi mi mogli pomoći s onim kodom što ste poslali da ga malo proširite. Naime, zaboravio sam napomenuti da imam umjesto onog jednogreda ja unosim podatke za još 20 ureda i isto tako bi trebao na listu report imati njih 20 i za svaki od njih mi treba podataka koji datumi nedostaju. Ispričavam se što sam previdio ovu jako bitnu stvar pri opisu. Ako nije previše komplicirano za proširivanje koda, možda da dodam varijablu j = integer koja bi predstavljala redove ili da pokušam napraviti 21 conc funkcija za svaki od 21 ured. Hvala na trudu. pozdrav.

[Ovu poruku je menjao marin_k7 dana 29.11.2006. u 12:10 GMT+1]
[ timmy @ 29.11.2006. 16:24 ] @
Probaj sledece:

1. Izmeni kod tako da glasi:

Code:

Function Conc(list As String, red As Integer) As String
Dim s As String
Dim i As Integer
    s = ""
    For i = 1 To 31
        s = s & IIf(Worksheets(list).Cells(red, i + 2).Value = "N", i & ",", "")
    Next i
    If Len(s) > 0 Then s = Left(s, Len(s) - 1)
    Conc = s
End Function


2. Na listu REPORT u celiji C7 napisi

Code:

=conc("studeni 2006.",ROW()-4)


i iskopiraj formulu na dole.

Napomena: uslov je da ti je redolsed opstina na listu REPORT kao i na listovima po mesecima.
Moglo bi i ovo da se sredi ako bi se najpre pronasao naziv opstine (ili sta je vec) na listu sa
mesecom pa preuzeo red u kojem se taj podatak nalazi...

Mislim da bi trebalo da promenis i formulu u D7 tako da glasi

Code:

=IF(C7="", "OK", "NOT")


Jer, valjda samo ako je rezultat funkcije CONC nista (a ne 0) tada je OK

Pozdrav
[ marin_k7 @ 04.12.2006. 09:49 ] @
Zahvaljujem. Riješeno!