Condividi:        

excel2003:conta.se su piu' colonne

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

excel2003:conta.se su piu' colonne

Postdi karug64 » 12/03/12 20:36

Salve a tutti.
Nel mio foglio di lavoro ho questa situazione:
Foglio1: le colonne colD,ColE,ColF,ColG possono contenere solamente i valori (per es.) "UNO","DUE";"TRE";"QUA" con vari ordini e non sempre presenti (ma la colonna D e' sempre avvalorata):

UNO-TRE
DUE-TRE-QUA
UNO-QUA
TRE
DUE
QUA
DUE-TRE
ecc.
ecc.

Nel foglio10, cella AD1,AD2,AD3,AD4 vorrei sapere quanti UNO, DUE, TRE, QUA sono presenti sul foglio1
quindi in AD1 = 2
in AD2 = 3
in AD3 = 4
in AD4 = 3

Penso che si possa fare con qualche formula matriciale, ma non so proprio come fare.
Grazie.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 12/03/12 21:06

...... inoltre

UNO-TRE
DUE-TRE-QUA
UNO-QUA
TRE
DUE
QUA
DUE-TRE
ecc.
ecc.

Nel foglio10, cella AE1,AE2 vorrei sapere quanti UNO ci sono insieme a DUE, e quanti UNO ci sono insieme a TRE
quindi in AE1 = 0
in AE2 = 1

Grazie.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 12/03/12 21:09

Con una macro non sarebbe complesso
una formula, anche se "grossolana" potrebbe essere questa (conta gli UNO in tutte le possibili combinazioni da te descritte)
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO")+CONTA.SE(Foglio1!D1:G1000;"UNO-DUE")+CONTA.SE(Foglio1!D1:G1000;"UNO-TRE")+CONTA.SE(Foglio1!D1:G1000;"UNO-QUA")+CONTA.SE(Foglio1!D1:G1000;"UNO-DUE-TRE")+CONTA.SE(Foglio1!D1:G1000;"UNO-DUE-QUA")+CONTA.SE(Foglio1!D1:G1000;"UNO-TRE-QUA")+CONTA.SE(Foglio1!D1:G1000;"UNO-DUE-TRE-QUA")


Modificherai le combinazioni per il DUE, TRE e QUA

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 12/03/12 21:15

Ho visto solo ora il tuo nuovo post
allora
In AE1 inserisci questa formula
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO")

In AF1 questa
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO-DUE")

In AG1
Codice: Seleziona tutto
 =CONTA.SE(Foglio1!D1:G1000;"UNO-TRE")

in AH1
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO-QUA")

in AI1
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO-DUE-TRE")

in AJ1
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO-DUE-QUA")

in AK1
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO-TRE-QUA")

in AL1
Codice: Seleziona tutto
=CONTA.SE(Foglio1!D1:G1000;"UNO-DUE-TRE-QUA")

e infine in AD1 la somma di AE1:AL1
(Queste formule non sono altro che la formulana del post precedente splittate per ogni combinazione di UNO con le altre stringhe)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 12/03/12 21:46

Ciao. Scusami ma nell'esempio uno-due-qua vuole dire: nella cella D1 c'e' "uno" nella cella E1 c'e' "due" e nella cella F1 c'e' il valore "qua" e cosi' via.
Ho provato ma non va...
Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 12/03/12 21:55

No
Il Conta.Se conta quanti "UNO" sono nella matrice (Range D1:G1000)
poi quanti "UNO-DUE" sono nella matrice (Range D1:G1000)
etc
alla fine avrai sia gli UNO da soli che in combinazione con le altre strighe (se separi le formule come dal mio ultimo post)

Chiaramente dovrai modificare la riga AD2, AE2:AL2 per le combinazioni con il "DUE"
la riga AD3... per il TRE
etc

iao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 12/03/12 22:13

Ti allego il fiel di esempio.

https://rapidshare.com/files/1094134521/Test_somma_se.xls

Non ho fatto tutte le combinazioni, ma gia' le prime quattro non mi danno il risultato voluto. Puoi dirmi dove sbaglio? Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 12/03/12 22:19

Beh ma tu hai le stringhe UNO, DUE, TRE in celle separate
mentre nel tuo primo post dicevi che avevi nelle celle UNO, o UNO-DUE etc (in unica cella)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 12/03/12 22:23

AVevo capito che l'incomprensione era su questo, tant'e' vero che nella penultima replica avevo cercato di spiegarlo meglio (... nella cella D2 c'e' UNO ecc.ecc..), am comunque l'esempio e' stato risolutore.
Pensi che sia possibile effettuare questo calcolo ?
Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 12/03/12 22:44

Ok
Penso di risolvere con una macro
ma dovresti dire quali sono le combinazioni di tuo interesse
es.: UNO con DUE, UNO con TRE, UNO con QUA (cos' anche per DUE e TRE e QUA)
oppure anche le terne UNO con DUE e con TRE
in questo secondo caso viene eliminato il conteggio UNO con DUE e UNO con TRE visto che conteggi l'UNO con la terna?

Prima di intraprendere la realizzazione della macro vorrei qualche chiarimento altrimenti perdiamo molto più tempo
e sarò costretto a modificarla più volte

E' chiara la mia domanda?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 12/03/12 22:50

Si. Tutto chiaro, ma in effetti a me servirebbe una formula. Infatti se l'utente cancellasse un valore dal file (per esempio nell'esempio il TRE in E5, in automatico dovrei avere il valore aggiornato. Se ho una macro c'e' modo di aggiornare automaticamente il valore della cella o devo per forza lanciala per ottenere il risultato ?
Ti faccio questa domanda per evitare di farti fare un lavoro che poi non potrei utilizzare.
Se si puo' fare quello che a me servirebbe e' avere le combinazioni di
UNO con DUE
UNO con TRE
UNO con DUE e TRE
in qualsiasi ordine siano disposti.
Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 12/03/12 23:08

Si può richiamare la macro ad ogni variazione del range "predefinito"

Ma ancora non mi è chiaro il concetto del conteggio
faccio un esempio:
consideriamo solo una combinazione:
D2 E2 F2
UNO DUE TRE

Come deve essere conteggiato UNO?
Sia da solo che con DUE e con TRE e sia con UNO-DUE-TRE?
nel senso se abbiamo In I2 l'UNO da solo
in J2 il conteggio l'UNO con DUE
in K2 il conteggio di UNO con TRE
in L2 il conteggio di UNO con DUE con TRE
Avrò il valore 1 in tutte queste celle oppure solo in L2?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi Anthony47 » 13/03/12 00:53

Potresti creare una struttura simile a questa:
Immagine

Uploaded with ImageShack.us
In H2 e' sottostante e' usata la formula
Codice: Seleziona tutto
=D2&"-"&E2&"-"&F2&"-"&G2

Da I1 a I4 si possono scrivere 4 chiavi di ricerca; idem nelle colonne alla destra
In I5 si calcola quante righe rispettano le clausole elencate in I1:I4 con la formula
Codice: Seleziona tutto
=SOMMA((--(I$1="")+LUNGHEZZA($H$2:$H$100)>LUNGHEZZA(SOSTITUISCI($H$2:$H$100;I$1;"")))*(--(I$2="")+LUNGHEZZA($H$2:$H$100)>LUNGHEZZA(SOSTITUISCI($H$2:$H$100;I$2;"")))*(--(I$3="")+LUNGHEZZA($H$2:$H$100)>LUNGHEZZA(SOSTITUISCI($H$2:$H$100;I$3;"")))*(--(I$4="")+LUNGHEZZA($H$2:$H$100)>LUNGHEZZA(SOSTITUISCI($H$2:$H$100;I$4;""))))
Da confermare con Contr-Maiusc-Enter; lavora su 100 righe, eventualmente modifica quei $100 in $1000.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 13/03/12 05:28

Leggi il post di Anthony qui sopra

Questa soluzione, invece, è con macro da inserire in un modulo
Codice: Seleziona tutto
Sub TrovaComb()
Range("I2:W2").ClearContents
UR = Range("D" & Rows.Count).End(xlUp).Row
Dim VS(4) As String
Dim VA(6) As String
Dim CVA(6) As String
Dim VT(4) As String
Dim CVT1(6) As String
Dim CVT2(6) As String
Dim CVT3(6) As String
Dim CVT4(6) As String
Dim CVT5(6) As String
Dim CVT6(6) As String
VS(1) = "UNO"
VS(2) = "DUE"
VS(3) = "TRE"
VS(4) = "QUA"


For RR = 2 To UR
    For CC = 4 To 7
    VAT = Cells(RR, CC).Value
    For NB = 1 To 4
        If VAT = VS(NB) Then
            Cells(2, 8 + NB).Value = Cells(2, 8 + NB).Value + 1
        End If
    Next NB
    Next CC

VAT = Trim(Range("D" & RR).Value & Range("E" & RR).Value & Range("F" & RR).Value & Range("G" & RR).Value)
NB = 0
For RV = 1 To 3
    For Rv2 = RV + 1 To 4
        NB = NB + 1
        VA(NB) = VS(RV) & VS(Rv2)
        CVA(NB) = VS(Rv2) & VS(RV)
        If VAT = VA(NB) Or VAT = CVA(NB) Then
        Cells(2, 12 + NB).Value = Cells(2, 12 + NB).Value + 1
        GoTo SaltaRR
        End If
    Next Rv2
Next RV

NB = 0
For RV = 1 To 2
    For Rv2 = RV + 1 To 3
        For RV3 = Rv2 + 1 To 4
            NB = NB + 1
            CVT1(NB) = VS(RV) & VS(Rv2) & VS(RV3)
            CVT2(NB) = VS(RV) & VS(RV3) & VS(Rv2)
            CVT3(NB) = VS(Rv2) & VS(RV) & VS(RV3)
            CVT4(NB) = VS(Rv2) & VS(RV3) & VS(RV)
            CVT5(NB) = VS(RV3) & VS(RV) & VS(Rv2)
            CVT6(NB) = VS(RV3) & VS(Rv2) & VS(RV)
            If VAT = CVT1(NB) Or VAT = CVT2(NB) Or VAT = CVT3(NB) Or VAT = CVT4(NB) Or VAT = CVT5(NB) Or VAT = CVT6(NB) Then
            Cells(2, 18 + NB).Value = Cells(2, 18 + NB).Value + 1
        GoTo SaltaRR
        End If
        Next RV3
    Next Rv2
Next RV
SaltaRR:
Next RR

For RR = 2 To UR
If Range("G" & RR).Value <> "" Then Range("W2").Value = Range("W2").Value + 1
Next RR

End Sub


e questo codice da inserire nel vba del Foglio1
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
UR = Range("D" & Rows.Count).End(xlUp).Row
Area = "D2:G" & UR
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
    Call TrovaComb
    End If
End Sub


Invio anche il file-test
download file

Ciao

N.b. Al momento la macro lavora con i dati solo su un foglio
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 13/03/12 20:00

Ok. Appena arrivato dall'Ufficio e scaricato file. Testato ok.
Parlando in ufficio della problematica e' emerso una particolarita che non so se e' possibile introdurre nella routine. Ti elenco quello che effettivamente sra' il foglio e cosa dovrei ottenere:


- Il range da controllare e' D1:G(x)
- i valori che possono essere presenti sono "UNO","DUE","TRE","QUA"
- in ogni cella non possono esserci piu' valori (solo uno dei quattro)
- I valori non possono essere ripetuti (quindi non possono esserci 2
"UNO" o 3 "QUA" nelle quattro celle adiacenti
- Potrebbe essere che nella riga non sia presente nessun valore (caso
assai raro, ma possibile)
- I valori saranno presenti sempre su celle attigue (quindi D/D-E/D-E-
F/D-E-F-G e mai D-F o D-G)
- I valori "DUE" e "TRE" sono da considerarsi, al fine del conteggio,
come un singolo valore
- Occorre che la funzione riporti un solo valore in una cella (per es. M1)
- La funzione dovrebbe riportare quante volte il valore "UNO" e'
presente
in coppia (es.colD="UNO", colE ="QUA",colF,
colG = vuote) / (es.colD="TRE", colE ="UNO",colF, colG = vuote) /
(es.colD="TRE", colE ="QUA",colF="UNO", colG = vuote) = conta 1 volta
(es.colD="UNO", colE ="DUE",colF="TRE", colG
= vuote) = conta 1 volta e non 2 (considerando le coppie UNO-DUE/UNO-
TRE)

Nell'esempio che mi hai postato in M1 dovrei avere 9 (cioe' la conta delle righe 5(UNO-TRE)+17(DUE-UNO)+18(DUE-TRE-UNO)+20(UNO-DUE)+23(QUA-DUE-UNO-TRE)+25(UNO-TRE-QUA)+36(QUA-UNO)+38(TRE-QUA-DUE-UNO)+41(QUA-UNO-DUE)

Sara' mica un'impresa impossibile ?!?!?

Comunque sia, intanto grazie per l'attenzione prestata.

Ciao
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 13/03/12 23:02

Questa è la macro modificata
Avrai in Q2 il totale degli UNO in coppia
Codice: Seleziona tutto
Sub TrovaComb()
Range("I2:W2").ClearContents
UR = Range("D" & Rows.Count).End(xlUp).Row
Dim VS(4) As String
Dim VA(6) As String
Dim CVA(6) As String
Dim VT(4) As String
Dim CVT1(6) As String
Dim CVT2(6) As String
Dim CVT3(6) As String
Dim CVT4(6) As String
Dim CVT5(6) As String
Dim CVT6(6) As String
VS(1) = "UNO"
VS(2) = "DUE"
VS(3) = "TRE"
VS(4) = "QUA"


For RR = 2 To UR
    For CC = 4 To 7
    VAT = Cells(RR, CC).Value
    For NB = 1 To 4
        If VAT = VS(NB) Then
            Cells(2, 8 + NB).Value = Cells(2, 8 + NB).Value + 1
        End If
    Next NB
    Next CC

VAT = Trim(Range("D" & RR).Value & Range("E" & RR).Value & Range("F" & RR).Value & Range("G" & RR).Value)
NB = 0
For RV = 1 To 1
    For Rv2 = RV + 1 To 4
        NB = NB + 1
        VA(NB) = VS(RV) & VS(Rv2)
        CVA(NB) = VS(Rv2) & VS(RV)
        If VAT = VA(NB) Or VAT = CVA(NB) Then
        Cells(2, 12 + NB).Value = Cells(2, 12 + NB).Value + 1
        GoTo SaltaRR
        End If
    Next Rv2
Next RV

NB = 0
For RV = 1 To 1
    For Rv2 = RV + 1 To 3
        For RV3 = Rv2 + 1 To 4
            NB = NB + 1
            CVT1(NB) = VS(RV) & VS(Rv2) & VS(RV3)
            CVT2(NB) = VS(RV) & VS(RV3) & VS(Rv2)
            CVT3(NB) = VS(Rv2) & VS(RV) & VS(RV3)
            CVT4(NB) = VS(Rv2) & VS(RV3) & VS(RV)
            CVT5(NB) = VS(RV3) & VS(RV) & VS(Rv2)
            CVT6(NB) = VS(RV3) & VS(Rv2) & VS(RV)
            If VAT = CVT1(NB) Or VAT = CVT2(NB) Or VAT = CVT3(NB) Or VAT = CVT4(NB) Or VAT = CVT5(NB) Or VAT = CVT6(NB) Then
            Cells(2, 12 + NB).Value = Cells(2, 12 + NB).Value + 1
        GoTo SaltaRR
        End If
        Next RV3
    Next Rv2
Next RV
SaltaRR:
Next RR

For RR = 2 To UR
If Range("G" & RR).Value <> "" Then Range("M2").Value = Range("M2").Value + 1
Next RR
Range("Q2").Value = [M2] + [N2] + [O2]
End Sub


Questo il file
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 13/03/12 23:42

Ok sembra funzionare.
Capisco perche' fai stampare i valori in L-M-N-(che poi sommi in Q), ma non capisco gli altri (che se vengono eliminati remmando la riga non fanno funziionare la routine), ... ma comunque questo poco importa. Ci syudiero' un po' su. L'importante e' che funzioni. Domani faccio un po' di prove su fogli piu' complessi e ti faccio sapere.
Grazie.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel2003:conta.se su piu' colonne

Postdi Flash30005 » 14/03/12 07:23

Non devi Remmare nulla
se non vuoi il conteggio nella cella Q2
puoi "bloccare" il conteggio sulla cella 13 invece di 12+NB come riporto in questa routine
Codice: Seleziona tutto
'...
For RR = 2 To UR
    For CC = 4 To 7
    VAT = Cells(RR, CC).Value
    For NB = 1 To 4
        If VAT = VS(NB) Then
            Cells(2, 8 + NB).Value = Cells(2, 8 + NB).Value + 1
        End If
    Next NB
    Next CC

VAT = Trim(Range("D" & RR).Value & Range("E" & RR).Value & Range("F" & RR).Value & Range("G" & RR).Value)
NB = 0
For RV = 1 To 1
    For Rv2 = RV + 1 To 4
        NB = NB + 1
        VA(NB) = VS(RV) & VS(Rv2)
        CVA(NB) = VS(Rv2) & VS(RV)
        If VAT = VA(NB) Or VAT = CVA(NB) Then
        Cells(2, 13).Value = Cells(2, 13).Value + 1  '<<<<< qui
        GoTo SaltaRR
        End If
    Next Rv2
Next RV

NB = 0
For RV = 1 To 1
    For Rv2 = RV + 1 To 3
        For RV3 = Rv2 + 1 To 4
            NB = NB + 1
            CVT1(NB) = VS(RV) & VS(Rv2) & VS(RV3)
            CVT2(NB) = VS(RV) & VS(RV3) & VS(Rv2)
            CVT3(NB) = VS(Rv2) & VS(RV) & VS(RV3)
            CVT4(NB) = VS(Rv2) & VS(RV3) & VS(RV)
            CVT5(NB) = VS(RV3) & VS(RV) & VS(Rv2)
            CVT6(NB) = VS(RV3) & VS(Rv2) & VS(RV)
            If VAT = CVT1(NB) Or VAT = CVT2(NB) Or VAT = CVT3(NB) Or VAT = CVT4(NB) Or VAT = CVT5(NB) Or VAT = CVT6(NB) Then
            Cells(2, 13).Value = Cells(2, 13).Value + 1 '<<<<< qui
        GoTo SaltaRR
        End If
        Next RV3
    Next Rv2
Next RV
SaltaRR:
Next RR

For RR = 2 To UR
If Range("G" & RR).Value <> "" Then Range("M2").Value = Range("M2").Value + 1
Next RR
'Range("Q2").Value = [M2] + [N2] + [O2]
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:conta.se su piu' colonne

Postdi karug64 » 14/03/12 21:02

Ok. Grazie.
Tutto ok.
Alla prossima.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22


Torna a Applicazioni Office Windows


Topic correlati a "excel2003:conta.se su piu' colonne":


Chi c’è in linea

Visitano il forum: Ricky0185 e 39 ospiti