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

Provera podataka u više tabela

[es] :: Office :: Excel :: Provera podataka u više tabela

[ Pregleda: 1504 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sergiles
student

Član broj: 235130
Poruke: 24
195.66.69.*



Profil

icon Provera podataka u više tabela17.04.2018. u 14:32 - pre 73 meseci
Zdravo,

Imam želju da sam napišem kod u VB, ali pošto sam samouk u tom polju i ne ide mi baš.
Pokušaću da objasnim problem:

U jednom sheet-u imam 32 tabele. Za svaku sam napravi range pod imenom Tab_1, Tab_2 i td.
Svaka tabela sadrži četiri kolone. U prvoj koloni su kodovi, druga i treća nisu bitne, dok u četvrtoj su takođe kodovi koje treba da dobijem kao rezultat.
Svakako VLOOKUP bi rešio problem, ali 32 tabele....puno kucanja i puno IF funkcija.

Drugi sheet mi je lista kodova, ima ih 133 u jednoj koloni (D2:D134). Ovi kodovi se nalaze u najmanje dve tabele, a najviše u tri tabele u prethodnom sheet-u.
Moj cilj je da u ćeliji F2 dobijem traženi kod iz tabela, a kriterijum je D2, takođe i za ćeliju F3 i F4 ako se kriterijum D2 pojavljuje tri puta u one 32 tabele.

Mislio sam da kod napišem na sledeći način:

I = 1 to 32
S = Tab_&"I"
F= VLOOKUP ($D2;INDIRECT(S);4;0)
Sad mi treba da proverim ovo "F", da li je #NA ili je <> od 0
Ako je #NA onda
I= I+1, a ako je <> od 0 sledi...
Range ("F2")=F
sad opet novi problem...
treba da popunim ćeliju F3 i F4
U koloni E mi je count formula pa mi ispisuje koliko se kod puta pojavljuje u tabelama.
Pa možda može to da se iskoristi, ali nema ideju kako...

Ako me je neko razumeo, molim za pomoć....

Hvala.



 
Odgovor na temu

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

Moderator
Član broj: 25683
Poruke: 2268
89.216.49.*

Sajt: www.gowi.rs


+109 Profil

icon Re: Provera podataka u više tabela17.04.2018. u 14:50 - pre 73 meseci
Ajde napravi primer sa četiri tabele na jednom listu i 15-16 kodova na drugom listu pa objasni na tom primeru šta tačno treba.

Ima tema na forumu Rad sa makroima mada su neki linkovi zastareli. Ovo koliko sam video još postoji
Predavanja Doc.dr. Djukanovic Slobodana sa ETF iz Podgorice. "PROGRAMIRANJE KROZ APLIKACIJE" (predlog neptuncokg) http://tutoriali.org/programiranje_kroz_aplikacije.html
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

sergiles
student

Član broj: 235130
Poruke: 24
195.66.69.*



Profil

icon Re: Provera podataka u više tabela18.04.2018. u 11:09 - pre 73 meseci
Pogledao sam malo ovaj turtorijal...ima korisnih saveta.
Nažalost daleko sam još ja od toga, tj. mnogo moram još da učim.

Ubacio sam primer u attach, pa se nadam da je moguće napisati neki kod.

Meni stalno izbacuje, greške u sintaksi, pa mismatch i td.

pozdrav i hvala.

Prikačeni fajlovi
 
Odgovor na temu

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

Moderator
Član broj: 25683
Poruke: 2268
89.216.49.*

Sajt: www.gowi.rs


+109 Profil

icon Re: Provera podataka u više tabela18.04.2018. u 14:13 - pre 72 meseci
Moja je preporuka da sa strane napraviš pomoćnu kakulaciju po tabelama. Na taj način moćićeš da pratiš da li je rezultat tačan - da nije došlo do neke greške.
Ja sam u prilogu krenuo od Q1 - tu upišeš "Tab_1" i onda sa autofill popuniš desno do "Tab_32"
Za tu pomoćnu kalkulaciju koristiš otprilike formulu koju si naveo za kod (VLOOKUP i INDIRECT) Znači u Q2 upišeš:
Code:
=IFNA(VLOOKUP($D2;INDIRECT(Q$1);4;FALSE);"")

VLOOKUP je uokviren za IFNA, da u slučaju da nije nađen kod vrati prazan string.
Kopiraš ovu formulu za celu oblast (Q2:AV134)

Kad imaš ove kalkulacije potrebno je da iz jednog reda (od kolone Q do AV) izvučeš samo neprazne ćelije i prepišeš ih u kolone F, G i H. To je moguće na dva načina
1/ Pomoću Array formule. Upišeš u F2:
Code:
=IFERROR(INDEX($Q2:$AV2;SMALL(IF(($Q2:$AV2)<>"";COLUMN($A$1:$AF$1);"");COLUMN(A$1)));"")

Završiš sa CTRL+Shift+Enter!
Kopraš desno go H pa nadole do 134 reda

2/ Umesto ove komplikovane formule napraviš svoju korisničku funkciju UDF. Da bi funkcija bila univerzalnije (da može da se iskoristi još negde) ja sam zamislio da funkcija vraća n-ti neprazan podatak iz opsega
Code:
Public Function NonBlankFromRange(rng As Range, n As Long) As String
' Funkcija koja iz zadatog opsega rng
'   vraca sadrzaj n-te celije koja nije prazna
' P. Jovanovic za elitesecurity.org

Dim cl As Variant ' current cell
Dim i As Long
i = 0
NonBlankFromRange = ""
For Each cl In rng   ' Petlja po zadatom osegu
   If cl.Text <> "" Then
      i = i + 1  ' brojac
      If i >= n Then  ' Ako je zadovoljen uslov nadjeno je sta treba
           NonBlankFromRange = cl.Text
           Exit For   ' Izlazak iz petlje
      End If
   End If
Next cl

End Function


Ovu funkciju primeniš u kolonama F, G, H kao i svaku drugu funkciju. U F2 upišeš:
Code:
=NonBlankFromRange($Q2:$AV2;RIGHT(F$1;1))


Pa kopiraš desno i dole. Funkciju RIGHT sam koristio da izvučem n (1, 2 ili 3). Naravno može i direktno da se upiše.

Napomena. Makroi moraju biti omogućeni da ovo rad. Ako ovu funkciju hoćeš da koristiš u drugim sveskama [napravi AddIn|https://www.myonlinetraininghu...or-user-defined-functions-udfs] dodaj u taj Add-In ovu funkciju (i druge sopstvene) pa uključi taj Add In

Napomena2. Ako hoćeš da se baviš VBA napravi poboljšanje ove funkcije da parametar n bude opcioni, ako se ne navede da uzima 1.
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
Prikačeni fajlovi
 
Odgovor na temu

sergiles
student

Član broj: 235130
Poruke: 24
195.66.69.*



Profil

icon Re: Provera podataka u više tabela18.04.2018. u 14:39 - pre 72 meseci
Čitajući tvoj odgovor, na prvi pogled bilo je vau...ali jasno mi je sve.

Hvala ti puno, nemam reči kako bih ti se zahvalio.

PS:

Dok sam čekao tvoj odgovor uspeo sam da za jedan kod napravim ovo:

Sub proba()
Dim I As Integer
Dim S As Integer
Dim T As Long
Dim C As Long
Dim X As Long


I = 0
For I = 1 To 32
Range("R1") = I
Range("I2").FormulaR1C1 = _
"=IFNA(VLOOKUP(RC[-5],INDIRECT(CONCATENATE(R[-1]C[8],R[-1]C[9])),4,0),0)"

T = Range("I2")
If T <> 0 Then
If IsEmpty(Range("F2").Value) = True Then
Range("F2") = T
GoTo kraj
ElseIf IsEmpty(Range("F2").Value) = False Then
GoTo Drugi
End If
End If
Drugi:
If T <> 0 Then
If IsEmpty(Range("G2").Value) = True Then
Range("G2") = T
End If
End If
kraj:
Next I
End Sub


i radi....doduše radi samo za jedan red.

malo sam kombinovao turtorijale, google, record macro i...radi....

znam da nije nešto posebno, ali biće bolje.

Hvala još jednom i pozdrav.

 
Odgovor na temu

jasa.v

Član broj: 13316
Poruke: 23
*.dynamic.telemach.ba.



Profil

icon Re: Provera podataka u više tabela21.04.2018. u 09:23 - pre 72 meseci
Mislim da ovo pogrešno radiš. Ovo je jedna tabela, kao neka sastavnica materijala, koju si ti podjelio na 32 dijela.
Napravi jednu tabelu i običnom Pivot tabelom možeš dobiti to što želiš.
 
Odgovor na temu

[es] :: Office :: Excel :: Provera podataka u više tabela

[ Pregleda: 1504 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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