|
[ milanml @ 18.01.2012. 16:51 ] @
| Poštovanje,
Potrebna mi je pomoć, prevashodno ljudi koji su maheri za makroe, pošto mi se čini da ovaj problem nije moguće riješiti formulam. Tako mi se čini, jer sam pokušavao, sve dok nisam ostao bez ideja. 
1. Firma je potpisala ugovor sa T-mobile prema kome je pod određenim (nebitno) uslovima zakupila 1000 brojeva za mobilne telefone.
2. Fiksni dio iznosa plaća firma, dok se ostatak računa podmiruje tako što se korisniku potrošeni iznos odbije od plate.
3. Iz T-Mobile svakog mjeseca stižu računi, koji su poređani u jednom PDF fajlu.
4. Kad to stigne, na jednom računaru otvorim PDF, a na drugom obrazac u Excelu i onda nekoliko dana kucam vrijednosti id PDF-a u Excel, da bih izračunao tražene vrijednosti.
5. Propali su svi moji pokušaji da PDF konvertujem u Excel ili Word dokument sa kojim bi se nešto moglo raditi, tako da mogu jedino da sa Copy/Paste iskopiram račune u Excel i da dobijem to što sam u priloženom .xls fajlu (List2) naveo kao primjer.
Dakle, potrebno mi je rješenje (vjerovatno makro) koje bi omogućilo da izdvojim određene vrijednosti, da ih postavim u odgovarajuće ćelije, onako kako sam opisao u priloženom .xls fajlu.
NAPOMENA: Koristim Excel 2003. |
[ p.djole @ 18.01.2012. 19:05 ] @
Probaj program "Able2Extract"
ja pomocu njega sve prebacujem u eksel. Ako to ne pomogne javi nesto cemo smisliti.
[ milanml @ 18.01.2012. 22:35 ] @
Citat: p.djole: Probaj program "Able2Extract"
ja pomocu njega sve prebacujem u eksel. Ako to ne pomogne javi nesto cemo smisliti.
Hvala p.djole na predlogu, ali, nažalost, ni Able2Extract nije rješenje. Naime, kako god da konvertujem pdf u .xls ili ga, recimo, sa Save As iz Adobe Akrobata snimim kao .doc, dobijam tabele koje su neupotrebljive, jer se tražene vrijednosti pojavljuju u različitim formatima. Recimo stavka "Ukupno usluge xx,xx" (xx.xx iznos pojedinačnog računa) samo upotrebom alatke Copy/Paste u Excelu zadržava isti format, a to je tekst "Ukupno usluge xx,xx" kao u priloženom fajlu. U svakoj drugoj varijanti iznos se pojavljuje u nekoliko formata, pa je iznos duga negdje, recimo, 30.0B ili 19.0= ili 16.4:, a to je onda potpuno neupotrebljivo.
Ne znam kako kreiraju te PDF-ove, ali, koliko vidim, popunjavanje 1000 ćelija prostim daktilografisnjem svakog mjeseca mi je za sada jedina perspektiva.
[ p.djole @ 18.01.2012. 22:57 ] @
Resio sam pomocu makroa. Pogledaj prikaceni fajl
[ 3okc @ 18.01.2012. 23:14 ] @
Što odmah nisi napisao da ti konverzija iz pdf nije problem nego u ciframa koje su spojene sa tekstom, tipa:
30.0B
19.0=
16.4:
-ako sam te uopšte razumeo.
U fajlu koji si postavio nema takve situacije sa ciframa i tekstom - jesi li ih uopšte izdvojio u posebnu kolonu ili si odustao od toga u startu (prepuštaš to makrou)? Kako izgleda cifra kada se izdvoji? da li se tekstualna porcija kompletno zanemaruje ili postoji nekakav šablon po kom svaki karakter ima značenje i koje ručno unosiš??
O tome treba da pišeš a ne o "davaocu usluge" i ostalim sve nebitnim činjenicama.
Ovako kako sada izgledaju, sve bi rešio bez makroa, eventualno uz neku prostu formulu.
[ milanml @ 18.01.2012. 23:53 ] @
Citat: p.djole: Resio sam pomocu makroa. Pogledaj prikaceni fajl
Hvala, prije svega, na brzim odgovorima, ali i na dobrim rješenjima koje si ponudio. Sa tvoja dva makroa riješena je trećina problema.
Pošto su izdvojene vrijednosti Korisnici (u tvom fajlu Kolona A) i Ukupno usluge (Kolona B), sada bi trebalo iz Kolone B izdvojiti iznos računa (recimo, iz teksta Ukupno usluge 30.06 u Ćeliji D2, treba izdvojiti 30.06).
Da s tim ne bi trebalo dalje raditi, mogla bi se iskoristiti formulom =MID(B2;14;100). ALi, izdvojene vrijednosti iz Kolone B treba pretvori u brojeve, koje, potom, treba prepisati u Kolonu G Lista1 (Iznos računa), da bi funkcionisale formule za oduzimanje u Koloni I.
Izvinjavam se što, možda nisam sasvim jasan, ali pošto imaš volju da pomogneš, neće mi biti problem da, koliko god treba, objasnim šta mi je potrebno.
[ milanml @ 19.01.2012. 00:37 ] @
Citat: 3okc: Što odmah nisi napisao da ti konverzija iz pdf nije problem nego u ciframa koje su spojene sa tekstom, tipa:
30.0B
19.0=
16.4:
Samo sam objasnio p.djoletu zašto mi ne odgovara konvertovanje PDF-a u .xls.
Citat: -ako sam te uopšte razumeo.
Nisi. :)
Citat: U fajlu koji si postavio nema takve situacije sa ciframa i tekstom - jesi li ih uopšte izdvojio u posebnu kolonu ili si odustao od toga u startu (prepuštaš to makrou)? Kako izgleda cifra kada se izdvoji? da li se tekstualna porcija kompletno zanemaruje ili postoji nekakav šablon po kom svaki karakter ima značenje i koje ručno unosiš??
U fajlu List2 nalazi se kao primjer dio onoga što dobijam kad iskoristim Copy/Paste (nisam sve ikopirao jer PDF sadrži 60 stranica). Da sam znao kako da izdvojim vrijednosti iz ćelija koje sadrže: tekst "Ukupno usluge xx.xx" (xx.xx je vrijednost koju treba izdvojiti) ne bih ni tražio pomoć. Takođe, ne znam kako da postavim formulu koja će izdvajati vrijednosti xx.xx samo iz onih ćelija u kojima se nalazi tekst "Ukupno usluge xx.xx", da to onda pretvorim u broj sa kojim se može raditi i smjestim ga na odgovarajućće mjesto u Koloni G Lista1.
Citat: Ovako kako sada izgledaju, sve bi rešio bez makroa, eventualno uz neku prostu formulu.
Pošto ne znam VBA, ništa drugo nisam ni mogao, nego da pokušam sa formulama. Nažalost, ovo je za mene bio prekrupan zalogaj.
Inače, p.djole je već riješio dio problem. Ostalo je još da se izdvoje xx.xx vrijednosti, konvertuju u broj i smjesete u Kolonu G Lista1.
Doduše, sada bih, posle upotrebe makroa koje je napisao p.djole, mogao da iskoristim funkciju MID recimo C2=MID(B2;14;10), da potom to što sam izdvojio iskopiram u Kolonu D kao "values", alatkom Find and Replace decimalnu tačku zamijenim decimalnim zarezom (SerbianLatin podešavanja) i onda za kolonu I u List1 upotrijebim formulu G2=VLOOKUP(C2;'ovde prepisuje podatke'!A2:D14;4;FALSE). (List "ovde prepisuje podatke" je ubacio p.djole).
Ipak, ovakav rad bi mogao proizvesti greške, tako da mislim da bi makro bio mnogo bolje rješenje.
[ p.djole @ 19.01.2012. 07:29 ] @
Kod mene formula =MID(B2;15;5) resava problem.Prikacicu fajl ako je to ono sto si hteo da postignes javi, pa cu podesiti da se podaci upisuju u list1.
pozdrav
[ p.djole @ 19.01.2012. 11:19 ] @
Evo konacnog resenja
[ p.djole @ 19.01.2012. 12:16 ] @
zaboravio sam na problem sa decimalnim zarezom. Podesi pre startovanja eksela, Regional and Language Options.
prikacicu sliku da bude jasnije.
[ milanml @ 19.01.2012. 18:22 ] @
Citat: p.djole: Evo konacnog resenja
Prije svega izvini što nisam odmah reagovao na tvoje poruke. Morao sam da odradim neke poslove, a onda sam iskoristio popodne da sam nađem neka rješenja. (Prikačeni fajl)
Prvo, objašnjenje zašto mi je potreban decimalni zarez umjesto tačke. Administrator je zaključao Regional And Language Options, a pošto su podešavanja SerbianLatin sa decimalnim zarezom, ovo sa tačkom ne funkcioniše.
Zahvaljujući tvojim makroima, danas sam uspio da riješim problem, ali ću sada da radim da nekako spojim ovo što meni treba (moj .xls) i ovo što si ti uradio (rješenja sa makroima su idealna), pa kad to završim, zamoliću te da mi kasnije pomogneš još oko par sitnica.
[ p.djole @ 19.01.2012. 23:14 ] @
Pogledaj prikaceni fajl mislim da je ovo pravo resenje. Ako treba nesto da pojasnim rado cu to uciniti.
pozdrav
[Ovu poruku je menjao p.djole dana 20.01.2012. u 00:44 GMT+1]
[Ovu poruku je menjao p.djole dana 20.01.2012. u 00:58 GMT+1]
[Ovu poruku je menjao p.djole dana 20.01.2012. u 01:01 GMT+1]
[ milanml @ 20.01.2012. 10:40 ] @
Citat: p.djole: Pogledaj prikaceni fajl mislim da je ovo pravo resenje. Ako treba nesto da pojasnim rado cu to uciniti.
pozdrav
Hvala još jednom na trudu i vremenu koje si potrošio.
Iskoristio sam ono što si ti napravio (bez tvojih makroa ništa ne bi bilo moguće) i dodao par stvari koje su neophodne da bi sve funkcionisalo tačno onako kako mi treba (prikačeni mobTel3.xls). Nisam iskoristio formule iz fajla mobTel_p.djole_5.xls jer su mi bila potrebna drugačija rješenja (objašnjenja su u prikačenom fajlu), a i zbog toga što ne mogu čekati da mi sve probleme riješi neko drugi. Ponovo sam prikačio i tvoj fajl zbog greške u koloni H.
E, sad ako mogu da te još zamolim da u mom fajlu (mobTel3.xls) dugmetu "prepisi podatke" dodaš i onaj treći makro koji sam ja snimio, a koji prepisuje vrijednosti iz kolone P u kolonu Q i decimalnu tačku mijenja u decimalni zarez. Tako bi sve funkcionisalo perfektno. :)
[ p.djole @ 20.01.2012. 12:11 ] @
Formula koje nisam mogao da se setim =SUBSTITUTE(H2;".";",") zamenjuje karaktere u celiji.
Video sam sta si uradio, cim zavrsim saljem
Prikacio sam i svoj fajl mozda nekome ova formula bude od koristi
[Ovu poruku je menjao p.djole dana 20.01.2012. u 13:32 GMT+1]
[Ovu poruku je menjao p.djole dana 20.01.2012. u 13:51 GMT+1]
[ 3okc @ 20.01.2012. 13:10 ] @
Ekstrahovanje bez Copy/Paste uvek će raditi mnogo brže, da ne pominjem i bez nepotrebnog selektovanja usput, a kada iz programa očistiš sve suvišno, mnogo je jasnije i za daljnje proširivanje.
Code: Function Cedjenje(Uzorak As String, KolonaIspisa As Byte) As Boolean
Dim celija As Range
Application.ScreenUpdating = False
For Each celija In Sheets("List2").Range("A1:A175").Cells
If celija.Value Like (Uzorak & "*") Then
Sheets("odrediste").Cells(65536, KolonaIspisa).End(xlUp).Offset(1) = celija
End If
Next celija
Sheets("odrediste").Columns(KolonaIspisa).Replace _
What:=Uzorak, Replacement:="", MatchCase:=True
Application.ScreenUpdating = True
Cedjenje = True
End Function
Sub Korisnik_click()
Debug.Print Cedjenje("Korisnik: ", 1)
End Sub
Sub Usluge_click()
Debug.Print Cedjenje("Ukupno usluge: ", 2)
End Sub
Edit: Prolazak kroz For/Each petlju uzima svaku pojedinačnu ćeliju u kolekciji (što ume da uspori pretragu kada je puno podataka) što bi mogao da izbegneš (i sve dodatno ubrzaš) upotrebom Range.Find metode -što je nekako i najlogičniji izbor. Time se zahvatau samo "ćelije od interesa" tj one koje sadrže uzorak za pretragu.
Pogledaj Find/FindNext metode.
[Ovu poruku je menjao 3okc dana 20.01.2012. u 16:24 GMT+1]
[ milanml @ 20.01.2012. 15:44 ] @
Citat: p.djole: Formula koje nisam mogao da se setim =SUBSTITUTE(H2;".";",") zamenjuje karaktere u celiji.
Video sam sta si uradio, ...
Hvala još jednom. Tvoja pomoć je za mene neprocjenjivo vrijedna. :)
Citat: 3okc: Ekstrahovanje bez Copy/Paste uvek će raditi mnogo brže...
E, ovo se zove brzina ;) Kad iskopiram sve račune u Excel, tekst u koloni A zauzme više od 24000 redova, tako da je za izvlačenje potrebnih podataka sa onim što imam u mobTel3.xls potrebno gotov 10 minuta. Sa ovim makroom to traje par sekundi. Ali,... Kad promijenim makro iz tvog fajla EkstrahovanjeBezCopy.xls ovako: Code: Option Explicit
Sub Korisnik_click()
Debug.Print Cedjenje("Korisnik: ", 14)
End Sub
Sub Usluge_click()
Debug.Print Cedjenje("Ukupno usluge: ", 15)
End Sub
Function Cedjenje(Uzorak As String, KolonaIspisa As Byte) As Boolean
Dim celija As Range
Application.ScreenUpdating = False
For Each celija In Sheets("List2").Range("A1:A25000").Cells
If celija.Value Like (Uzorak & "*") Then
Sheets("odrediste").Cells(65536, KolonaIspisa).End(xlUp).Offset(1) = celija
End If
Next celija
Sheets("odrediste").Columns(KolonaIspisa).Replace _
What:=Uzorak, Replacement:="", MatchCase:=True
Application.ScreenUpdating = True
Cedjenje = True
End Function
Sve radi kako treba, dok u kolonu A List2 ne iskopiram cijeli račun 24653 reda. Tada se podaci ekstahuju u kolonu N (Korisnici) ali ne i u kolonu O (Ukupno usluge). Jasno je da ja griješim, a ti ćeš mi, nadam se, pokazati kako da to ispravim. :)
[ 3okc @ 20.01.2012. 16:06 ] @
Citat: milanml:
Sve radi kako treba, dok u kolonu A List2 ne iskopiram cijeli račun 24653 reda. Tada se podaci ekstahuju u kolonu N (Korisnici) ali ne i u kolonu O (Ukupno usluge). Jasno je da ja griješim, a ti ćeš mi, nadam se, pokazati kako da to ispravim. :)
U fajlu koji sam postavio nalazi se jedan odredišni list za obe primene pa se tako funkciji prosleđuju 2 argumenta: Uzorak koji se traži (i potim briše) i redni broj kolone u kojoj će se ispisivati nađeno.
Ako svaki od ispisa mora u sopstveni list onda se i ime tog lista mora proslediti, što menja deklaraciju funkcije.
Umesto: Function Cedjenje(Uzorak As String, KolonaIspisa As Byte)
treba da bude: Function Cedjenje(Uzorak As String, ListIspisa as String, KolonaIspisa As Byte)
Dalje u kodu izmeni sve da ovo isprati: gde god imaš Sheets("odrediste") mora stajati Sheets(ListIspisa).
Naravno i svako pozivanje mora uključiti novi argument: Cedjenje("Korisnik: ", "Korisnici", 14), npr.
(U suštini, ova dva poslednja argumenta se mogu objediniti jednim tipa Range koji bi ujedno obuhvatio i Radni list i pripadajuću kolonu.)
[ milanml @ 20.01.2012. 16:30 ] @
Citat: 3okc: Ako svaki od ispisa mora u sopstveni list onda se i ime tog lista mora proslediti, što menja deklaraciju funkcije.
Oba ispisa "korisnici" i "ukupno usluge" treba da idu u isti List1 (kod tebe je Shet3(odrediste)), s tim što ne treba da idu u kolone A i B, nego u N i O.
Citat: Umesto: Function Cedjenje(Uzorak As String, KolonaIspisa As Byte)
treba da bude: Function Cedjenje(Uzorak As String, ListIspisa as String, KolonaIspisa As Byte)
Dalje u kodu izmeni sve da ovo isprati: gde god imaš Sheets("odrediste") mora stajati Sheets(ListIspisa).
Naravno i svako pozivanje mora uključiti novi argument: Cedjenje("Korisnik: ", "Korisnici", 14), npr.
(U suštini, ova dva poslednja argumenta se mogu objediniti jednim tipa Range koji bi ujedno obuhvatio i Radni list i pripadajuću kolonu.)
Vjerovatno zbog onoga što sam napisao gore kod sa promjenama uopšte ne funkcioniše, ili sam ja promjene unio pogrešno?:
Code: Option Explicit
Sub Korisnik_click()
Debug.Print Cedjenje("Korisnik: ", "Korisnici", 14)
End Sub
Sub Usluge_click()
Debug.Print Cedjenje("Korisnik: ", "Korisnici", 15)
End Sub
Function Cedjenje(Uzorak As String, ListIspisa As String, KolonaIspisa As Byte) As Boolean
Dim celija As Range
Application.ScreenUpdating = False
For Each celija In Sheets("List2").Range("A1:A25000").Cells
If celija.Value Like (Uzorak & "*") Then
Sheets(ListIspisa).Cells(65536, KolonaIspisa).End(xlUp).Offset(1) = celija
End If
Next celija
Sheets(ListIspisa).Columns(KolonaIspisa).Replace _
What:=Uzorak, Replacement:="", MatchCase:=True
Application.ScreenUpdating = True
Cedjenje = True
End Function
[Ovu poruku je menjao milanml dana 20.01.2012. u 17:48 GMT+1]
[ 3okc @ 20.01.2012. 16:51 ] @
Citat: milanml: Oba ispisa "korisnici" i "ukupno usluge" treba da idu u isti List1, s tim što ne treba da idu u kolone A i B, nego u N i O.
Ako je tako, nemaš šta da menjaš, mora da radi.
Proveri Uzorak koji prosleđuješ pozivom, da li uopšte postoji.
[ milanml @ 20.01.2012. 17:47 ] @
Citat: 3okc: Ako je tako, nemaš šta da menjaš, mora da radi.
Proveri Uzorak koji prosleđuješ pozivom, da li uopšte postoji.
Nekad radi, a nekad ne radi??? (Priloženi fajl)
Pošto meni ne polazi za rukom da prilagodim makro (nije ni čudo, pošto ne znam sintagmu) molim te da to ti uradiiš.
Podaci iz PDF-a su u koloni A List2, a makroima treba ekstrahovati podatke u kolone N i O u List1 (prikačeni mobTel.xls).
Ovo definitivno ne radi. Bez ikakvih intervencija u kodu, dugme "ukupno usluge" ne radi čim u List2 iskopiram korisnike.
Jedino što mi pada na pamet da je možda problem u verziji Excela, pošto ja radim sa v. 2003.
[Ovu poruku je menjao milanml dana 20.01.2012. u 23:38 GMT+1]
[Ovu poruku je menjao milanml dana 20.01.2012. u 23:39 GMT+1]
[ p.djole @ 20.01.2012. 23:09 ] @
Prvo da se zahvalim 3okc-u na makrou koji ce uz prilagodjavanje zameniti neke od mojih dosadasnjih i time ubrzati moj svakodnevni posao.
Sto se tice prepisivanja podatka "ukupno usluge"
Code: Debug.Print Cedjenje("Ukupno usluge ", 15) brisi dvotacku i radice
[ milanml @ 20.01.2012. 23:17 ] @
Citat: p.djole:
Sto se tice prepisivanja podatka "ukupno usluge"
Code: Debug.Print Cedjenje("Ukupno usluge ", 15) brisi dvotacku i radice
Svaka čast majstore.  Cijeli dan sam lupao glavu gdje griješim, a ono ispade da jedna dvotačka (prava sitnica  ) pravi probleme.
Hvala!
Još jedno pitanje: Kako da promijenim kod da mi u listu "odredište" podatke upisuje od 5. reda, a ne kao sada od 2.?
[Ovu poruku je menjao milanml dana 21.01.2012. u 01:32 GMT+1]
[ p.djole @ 21.01.2012. 08:42 ] @
Kod moze ostati isti, dovoljno je da u celijama N4 i O4 upises nesto. Na primer u N4 korisnik, u O4 ukupno usluge.
Odnosno napravis zaglavlje u cetvrtom redu.
[ milanml @ 21.01.2012. 09:21 ] @
Citat: p.djole: Kod moze ostati isti, dovoljno je da u celijama N4 i O4 upises nesto. Na primer u N4 korisnik, u O4 ukupno usluge.
Odnosno napravis zaglavlje u cetvrtom redu.
Sve je lako kad se zna. 
Hvala!
[ milanml @ 21.01.2012. 17:19 ] @
Da ne otvaram novu temu, pitaću ovdje.
Imam u A koloni nekoliko stotina ćelija popunjeno podacima ovog tipa:
Code: Petrović Petar bla bla bla
Janković Janko bla bla bla bla
Nikolić Nikola bla bla
Jovanović Jovan nnn bla bla bla
Kako da izdvojim prve dvije riječi, odnosno, prezime i ime. Za prvu riječ je dobra formula
Code: =LEFT(A1;FIND(" ";A1)-1)
a obje?
[ 3okc @ 21.01.2012. 18:50 ] @
Ima taj FIND i treći argument samo je opcioni pa se može izostaviti a to je ono što tebi sada treba: od kog karaktera da traži. Biće to položaj prvog razmaka, uvećan za jedan:
Code: =LEFT(A1;FIND(" ";A1;FIND(" ";A1)+1)-1)
[ milanml @ 21.01.2012. 21:06 ] @
Citat: 3okc: Ima taj FIND i treći argument samo je opcioni pa se može izostaviti a to je ono što tebi sada treba: od kog karaktera da traži. Biće to položaj prvog razmaka, uvećan za jedan:
Code: =LEFT(A1;FIND(" ";A1;FIND(" ";A1)+1)-1)
Dobro je i u mojim godinama ponešto naučiti.
Hvala ti za ovo, a naročito za onaj makro.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|