adunare conditionata

Informatii despre cum se utilizeaza Microsoft Excel 2007. Calcule, Formule, Functii, Tabele pivot, Analiza datelor, etc
Închis
Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: adunare conditionata

Mesaj de gecs » Dum Noi 22, 2009 2:53 pm

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.
adunare conditionata_R4.xlsx
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Dum Noi 22, 2009 6:37 pm

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.

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Dum Noi 22, 2009 8:14 pm

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.

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Dum Noi 22, 2009 8:18 pm

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.

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Dum Noi 22, 2009 8:39 pm

eroarea care apare:

"this document contains macros, activex controls, xml .....these may include personal inf.that cannot be removed by the document inspector"

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: adunare conditionata

Mesaj de gecs » Dum Noi 22, 2009 10:11 pm

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?

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Dum Noi 22, 2009 10:28 pm

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.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Lun Noi 23, 2009 11:42 am

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.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Dr. Cloud
Mesaje: 3327
Membru din: Mar Oct 02, 2012 11:19 am

Re: adunare conditionata

Mesaj de Dr. Cloud » Lun Noi 23, 2009 11:53 am

Incearca sa folosesti functia asta:

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

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.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: adunare conditionata

Mesaj de cristi_lazarro » Lun Noi 23, 2009 1:06 pm

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

Închis

Înapoi la “Intrebari despre Excel 2007”