adunare conditionata
Re: adunare conditionata
Am modificat pe ici, pe colo fisierul postat anterior si am atasat noua versiune.
Referitor la modul general de lucru cu tabele in loc de range-uri obisnuite, ca si legat de exemplul de fata, as face cateva comentarii:
- pentru tabelele obisnuite, in care toate datele se introduc de mana, fara formule, totul este in regula si exista avantajul ca folosind un asemenea tabel nu mai e nevoie de declarat nume asociate coloanelor din tabelul respectiv pentru a fi folosite in alte formule din fisier, pentru ca numele asociat tabelului se creaza automat, de la inserarea tabelului respectiv, iar referintele la coloanele din tabel se fac foarte simplu: Tabel[Coloana]; numele creat asociat tabelului e prin definitie dinamic;
- daca se folosesc tabele la procesarea altor date prin formule inscrise in celulele tabelului, pentru o structura (numar de coloane) fixa a tabelului, lucrurile stau la fel de bine, fiind necesar sa fie definite formulele doar pe primul rand al tabelului, pentru fiecare coloana, pentru ca apoi, la redimensionarea tabelului (marit numarul de randuri), aceste formule sa se auto-completeze pe coloane fara nicio problema;
- daca insa in situatia de la punctul anterior, incercam sa copiem formulele de la o coloana la alta, daca aceste formule contin referinte structurate la alt(e) tabel(e), Excel-ul va considera acele referinte structurate ca referinte relative si le va modifica de la coloana la coloana, chiar daca nu vrem asta; de exemplu, daca in formula din coloana 1 avem o referinta de tipul "Tabel[Coloana1]", prin copiere pe coloana alaturata, aceasta referinta va deveni "Tabel[Coloana2]"; in situatia in care nu dorim asa ceva, atunci referinta structurata respectiva poate fi inlocuita cu INDEX(Tabel,,1) unde 1 este numarul coloanei din tabelul "Tabel" la care vrem sa facem referinta;
- daca dorim sa folosim un tabel pentru prelucrarea datelor pe baza de formule si ambele dimensiuni ale tabelului trebuie sa fie dinamice, in sensul ca in timp putem micsora/mari atat numarul de randuri, cat si numarul de coloane, lucrurile se complica putin mai mult; marirea numarului de randuri, cu formulele scrise corect, nu ridica probleme, dar la micsorare trebuie sa avem grija sa stergem formulele si eventualele formatari "custom" din randurile ocupate anterior de tabel, pentru ca acestea nu se sterg automat; la micsorarea numarului de coloane intalnim aceeasi situatie ca la micsorarea numarului de randuri, dar daca dorim sa marim numarul de coloane, va trebui sa copiem formulele din ultima coloana in celelalte "de mana", pentru ca, evident, acestea nu se vor copia automat - din aceasta cauza e foarte important ca formulele inscrise in tabel sa nu poata fi alterate de Excel la copiere, asa cum explicam la punctul anterior ca se intampla;
- referitor la fisierul atasat, pentru foile unde apar agentii si/sau clienti in structura tabelului (fie pe coloane, fie pe randuri) am scris formule pentru pana la 100 de agenti si pana la 1000 de clienti, ca in versiunile anterioare ale fisierului, dar ele nu fac parte din tabel. Tabelul folosit cuprinde doar datele si randul de "Total"; procedura de urmat pentru numarul variabil de agenti/clienti, de la caz la caz, ar fi aceea ca modificand tabelele din foile "agenti" si "clienti", precum si datele din foaia "vanzari", in foile care creaza rapoarte, pe randuri si/sau coloane vor aparea automat numele agentilor si clientilor, urmand ca tabelul cu datele procesate sa fie redimensionat "de mana" in ordinea coloane -> randuri, adica mai intai se mareste/micsoreaza numarul de coloane, cu copierea (eventual adaptarea) formulelor de pe ultima coloana pe coloanele suplimentare, sau stergerea formulelor (si formatarilor) ramase dupa micsorarea tabelului ca numar de coloane si apoi se poate mari/micsora numarul de randuri pentru a acomoda numarul de clienti/agenti (depinde ce e inscris pe prima coloana), urmand ca in cazul maririi, formulele sa se auto-completeze pe noile randuri, iar in cazul micsorarii, sa trebuiasca sa fie sterse, tot "de mana", formulele (si formatarile) ramase.
Referitor la modul general de lucru cu tabele in loc de range-uri obisnuite, ca si legat de exemplul de fata, as face cateva comentarii:
- pentru tabelele obisnuite, in care toate datele se introduc de mana, fara formule, totul este in regula si exista avantajul ca folosind un asemenea tabel nu mai e nevoie de declarat nume asociate coloanelor din tabelul respectiv pentru a fi folosite in alte formule din fisier, pentru ca numele asociat tabelului se creaza automat, de la inserarea tabelului respectiv, iar referintele la coloanele din tabel se fac foarte simplu: Tabel[Coloana]; numele creat asociat tabelului e prin definitie dinamic;
- daca se folosesc tabele la procesarea altor date prin formule inscrise in celulele tabelului, pentru o structura (numar de coloane) fixa a tabelului, lucrurile stau la fel de bine, fiind necesar sa fie definite formulele doar pe primul rand al tabelului, pentru fiecare coloana, pentru ca apoi, la redimensionarea tabelului (marit numarul de randuri), aceste formule sa se auto-completeze pe coloane fara nicio problema;
- daca insa in situatia de la punctul anterior, incercam sa copiem formulele de la o coloana la alta, daca aceste formule contin referinte structurate la alt(e) tabel(e), Excel-ul va considera acele referinte structurate ca referinte relative si le va modifica de la coloana la coloana, chiar daca nu vrem asta; de exemplu, daca in formula din coloana 1 avem o referinta de tipul "Tabel[Coloana1]", prin copiere pe coloana alaturata, aceasta referinta va deveni "Tabel[Coloana2]"; in situatia in care nu dorim asa ceva, atunci referinta structurata respectiva poate fi inlocuita cu INDEX(Tabel,,1) unde 1 este numarul coloanei din tabelul "Tabel" la care vrem sa facem referinta;
- daca dorim sa folosim un tabel pentru prelucrarea datelor pe baza de formule si ambele dimensiuni ale tabelului trebuie sa fie dinamice, in sensul ca in timp putem micsora/mari atat numarul de randuri, cat si numarul de coloane, lucrurile se complica putin mai mult; marirea numarului de randuri, cu formulele scrise corect, nu ridica probleme, dar la micsorare trebuie sa avem grija sa stergem formulele si eventualele formatari "custom" din randurile ocupate anterior de tabel, pentru ca acestea nu se sterg automat; la micsorarea numarului de coloane intalnim aceeasi situatie ca la micsorarea numarului de randuri, dar daca dorim sa marim numarul de coloane, va trebui sa copiem formulele din ultima coloana in celelalte "de mana", pentru ca, evident, acestea nu se vor copia automat - din aceasta cauza e foarte important ca formulele inscrise in tabel sa nu poata fi alterate de Excel la copiere, asa cum explicam la punctul anterior ca se intampla;
- referitor la fisierul atasat, pentru foile unde apar agentii si/sau clienti in structura tabelului (fie pe coloane, fie pe randuri) am scris formule pentru pana la 100 de agenti si pana la 1000 de clienti, ca in versiunile anterioare ale fisierului, dar ele nu fac parte din tabel. Tabelul folosit cuprinde doar datele si randul de "Total"; procedura de urmat pentru numarul variabil de agenti/clienti, de la caz la caz, ar fi aceea ca modificand tabelele din foile "agenti" si "clienti", precum si datele din foaia "vanzari", in foile care creaza rapoarte, pe randuri si/sau coloane vor aparea automat numele agentilor si clientilor, urmand ca tabelul cu datele procesate sa fie redimensionat "de mana" in ordinea coloane -> randuri, adica mai intai se mareste/micsoreaza numarul de coloane, cu copierea (eventual adaptarea) formulelor de pe ultima coloana pe coloanele suplimentare, sau stergerea formulelor (si formatarilor) ramase dupa micsorarea tabelului ca numar de coloane si apoi se poate mari/micsora numarul de randuri pentru a acomoda numarul de clienti/agenti (depinde ce e inscris pe prima coloana), urmand ca in cazul maririi, formulele sa se auto-completeze pe noile randuri, iar in cazul micsorarii, sa trebuiasca sa fie sterse, tot "de mana", formulele (si formatarile) ramase.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
nu stiu daca am inteles corect.
daca eu am, spre exemplu, 7 agenti, trebuie sa sterg randurile in plus corespunzatoare acestora? la fel si pt clienti, la fel?
ms.
daca eu am, spre exemplu, 7 agenti, trebuie sa sterg randurile in plus corespunzatoare acestora? la fel si pt clienti, la fel?
ms.
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
mi-ar fi mult mai utila ca la extragerea valorii in euro (coloana "pret") sa nu se faca in functie de pagina "produse". eu voi avea in lista "eur", am trecut in "euro" ca sa fie mai practic. acea pagina cu produse inca n-am s-o definesc.
am incercat sa introduc acel macro cu "extract word" dar nu merge--da eroare, ceva cu active control x.
ms.
am incercat sa introduc acel macro cu "extract word" dar nu merge--da eroare, ceva cu active control x.
ms.
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
coloana cu produse, din pagina vanzari, este rezultata in urma importului unui fisier csv. prin urmare, nu voi folosi "data validation" pt ca sunt peste o mie de linii.
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
eroarea care apare:
"this document contains macros, activex controls, xml .....these may include personal inf.that cannot be removed by the document inspector"
"this document contains macros, activex controls, xml .....these may include personal inf.that cannot be removed by the document inspector"
Re: adunare conditionata
Te rog sa descrii mai in amanunt in ce consta procesul de import: care anume coloane sunt preluate si care nu, in ce coloane ce consideri ca ti-ar fi de util sa fie folosit Data Validation si in care nu, ce e cu acel macro?
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
data validation nu-mi este utila
coloana "produs" si "data" le voi obtine prin "=" dintr-o alta pagina unde voi importa acel fisier csv.
"agent", "client", le voi adauga pe 2 coloane, folosind index. mai am alte 2 tabele din care mai obtin corelarile respective.
am sa atasez fisierul cu care fac importul.
coloana "produs" si "data" le voi obtine prin "=" dintr-o alta pagina unde voi importa acel fisier csv.
"agent", "client", le voi adauga pe 2 coloane, folosind index. mai am alte 2 tabele din care mai obtin corelarile respective.
am sa atasez fisierul cu care fac importul.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
am modificat numele de agenti, clienti --- e ok.
m-ar mai interesa doar sa pot extrage acei euro din:
prepay 50 eur => 50
cartela vodafone 15 eur => 15
cosmote 2009 5 eur => 5 fara a folosi pagina cu denumiri produse.
voi atasa functia pe care anterior o puteam folosi iar, acum da acel mesaj de eroare...( cu active controls x, etc)
cu partea de import fisier csv voi folosi un al 2-lea fisier. se blocheaza daca pun acele pagini in acest fisier sau, se blocheaza chiar daca mai am alt fisier excell deschis in acelasi timp ce rulez "import fisier csv"
ms.
m-ar mai interesa doar sa pot extrage acei euro din:
prepay 50 eur => 50
cartela vodafone 15 eur => 15
cosmote 2009 5 eur => 5 fara a folosi pagina cu denumiri produse.
voi atasa functia pe care anterior o puteam folosi iar, acum da acel mesaj de eroare...( cu active controls x, etc)
cu partea de import fisier csv voi folosi un al 2-lea fisier. se blocheaza daca pun acele pagini in acest fisier sau, se blocheaza chiar daca mai am alt fisier excell deschis in acelasi timp ce rulez "import fisier csv"
ms.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: adunare conditionata
Incearca sa folosesti functia asta:
Din codul atasat de tine am obs. ca aveai la sfarsit Option Explicit.
Incearca acest cod acum si vezi daca-ti merge.
Ti-am atasat modulul care cuprinde aceste functii. Importa-l in VBE si testeaza-l.
Cod: Selectaţi tot
Option Explicit
Function ExtractWord(ByVal txtPhrase As String, ByVal wMarker, ByVal noOccurrence As Integer, ByVal noRelPos As Integer)
'Function created by Lucian Constantin
'
'SCOPE: Find the N-th occurrence of a word in a phrase and return the word in the relative position requeted)
'USAGE: ExtractWord(<Phrase searched in>, <Word to search>, <Occurence of the word>, <Relative position of word to be returned>
'SAMPLE: ExtractWord("Hello wonderfull world!","world",1,-1)
' will return "wonderfull"
Dim arrWords As Variant
Dim i, noWords, nFound, nPosition, nReturnPos As Integer
Dim txtRetWord As String
'Desparte fraza in cuvinte
arrWords = Split(txtPhrase, " ")
noWords = UBound(arrWords) + 1
nFound = 0
txtRetWord = ""
'Cauta markerul
For i = 0 To noWords - 1
nPosition = InStr(1, arrWords(i), wMarker, vbTextCompare)
If nPosition > 0 Then
'Daca a gasit Marker-ul verifica noOccurrence
nFound = nFound + 1
If nFound = noOccurrence Then
'Verifica pozitia de returnat sa fie in fraza
nReturnPos = i + noRelPos
If (nReturnPos >= 0) And (nReturnPos <= noWords - 1) Then
txtRetWord = arrWords(nReturnPos)
Else
txtRetWord = "#ERR - Return Out of Bounds"
End If
End If
End If
Next i
ExtractWord = txtRetWord
End Function
'---------------------------------------------------------------------------
' *************************************************************************
' Descriere : Aceasta functie extrage numerele care se regasesc alaturi
' de texte in cadrul celulelor
' Nota : Acest cod trebuie luat asa cum este.
' Orice test se va efectua pe o copie a datelor originale
' Site web : www.drexcel.ro
' *************************************************************************
' Author : Alexandru Dionisie
' Module : modExtractNumber
' Date : 25.10.2009
'---------------------------------------------------------------------------
Function EXTRAGENUMAR(Phrase As String) As Double
Dim Length_of_String As Integer
Dim Current_Pos As Integer
Dim Temp As String
Length_of_String = Len(Phrase)
Temp = ""
For Current_Pos = 1 To Length_of_String
If (Mid(Phrase, Current_Pos, 1) = "-") Then
Temp = Temp & Mid(Phrase, Current_Pos, 1)
End If
If (Mid(Phrase, Current_Pos, 1) = ".") Then
Temp = Temp & Mid(Phrase, Current_Pos, 1)
End If
If (IsNumeric(Mid(Phrase, Current_Pos, 1))) = True Then
Temp = Temp & Mid(Phrase, Current_Pos, 1)
End If
Next Current_Pos
If Len(Temp) = 0 Then
EXTRAGENUMAR = 0
Else
EXTRAGENUMAR = CDbl(Temp)
End If
End Function
Incearca acest cod acum si vezi daca-ti merge.
Ti-am atasat modulul care cuprinde aceste functii. Importa-l in VBE si testeaza-l.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
- cristi_lazarro
- Mesaje: 841
- Membru din: Mie Noi 04, 2009 5:57 pm
Re: adunare conditionata
am luat cu copy /paste codul functiei, nu merge. am folosit in pagina functia "VALUE(ExtractWord(D2,"eur",1,-1))"
cum se folosesc aceste fisiere xxx.7z? am incercat cu insert in vba si nu vrea.
ms
cum se folosesc aceste fisiere xxx.7z? am incercat cu insert in vba si nu vrea.
ms