Home › Forum › Domande su Formule e Funzioni › [RISOLTO] conoscere valori > di
Taggato: aggiunta dati per completare
-
AutorePost
-
-
Salve,
cortesemente se possibile una formula che mi fa
conoscere in un intervallo di celle quali sono
quei numeri che si sono maggiormente ripetuti.
Allego il file.
Faccio presente che i dati su un foglio e
sull’altro la lettura dei datihttps://www.dropbox.com/s/9jvajtkobuxu4ms/duplicati.xlsb?dl=0
Grazie-
Questo topic è stato modificato 2 anni fa da
sid.
-
Questo topic è stato modificato 2 anni fa da
-
Salve,
la formula(se formula) in foglio2 leggerà i dati da foglio1
il minimo di presenza da stabilire in rigo2 cella esempio m2
veramente non ho capito bene la/e domande -
ho riportato i dati da leggere da rigo 6
e da controllare fino a rigo 14 per 5 colonne;
nell’altro foglio2 nel rigo M15-N15-O15-P15-Q15-R15-S15.
iN M15 il valore Max e a scendere fino a S15 se rispettano
la presenza minima.
Il tutto sarà trascinato in giù.
Se trascino di una riga in giù 6 diventa rigo 7 e 14 diventa 15
allo stesso tempo M15 sarà M16, N15 sarà N16 e fino a S.
la selezione del foglio1 sarà sempre di 5 colonne per 9 righe
Un altro dato che se in B15 =””;””; altrimenti conteggia.
Che le colonne siano sempre amovibili(adattabili).
Spero era questo che volevi sapere. -
M15-N15-O15-P15-Q15-R15-S15.
iN M15 il valore Max e a scendere fino a S15 se rispettano
la presenza minima.per capire meglio.
Prendendo in considerazione la tabella del tuo file, cosa dovrà essere inserito nel range M15:S15 di foglio2?
In M15 sicuramente il numero 9, visto che è presente 3 volte; poi…continua tu -
il 9 che è quello con maggiori presenze,
poi se non ci sono altri con 3 presenze
a scendere ponendo il minimo es 2
se non trova quelli con 2 presenze
0 in p, 0 in R e 0 in S -
se da 3 presenze in sù
trascriverli in grassetto
-
ponendo il minimo es 2
Il numero minimo in quale cella di quale foglio lo metti?
-
in c2 del foglio2
-
Un altro dato che se in B15 =””;””; altrimenti conteggia.
Questa non l’ho capita; se inizi ad inserire da colonna M, che c’entra colonna B?
-
M15-N15-O15-P15-Q15-R15-S15.
iN M15 il valore Max e a scendere fino a S15 se rispettano
la presenza minima.Questo range comprende 7 celle; ammettendo che i numeri che rispettano la presenza minima siano più di 7, cosa bisogna fare?
-
invece di B15 sostituisci con D15;
se nella colonna D15 è presente il
dato numerico allora fai il controllo
se ci sono numeri con più presenze;per quanto riguarda la quantità minima
maggiore 7 riportare quelli che trova
man mano, gli oltre i 7 non considerarli,
a tal proposito in D2 puoi considerare
anche la presenza Massima?
Cioè C2-min 2 e D2 Max 2 oppure 3 eccetera -
invece di B15 sostituisci con D15
D15 di foglio1 o foglio2?
Dovevi postare il file con tutti i valori disponibili -
foglio2,
-
Salve Sid,
il problema mio è che non ho in mente
il senso della progettazione,
per esempio ora mi viene in mente
un’altra situazione nel senso
di aver detto che i numeri massimi
distinguerli in grassetto
ora mettiamo il caso di min 2 e
max 2 in questo caso si ritengono massimi
e quindi potrebbero essere tutti in grassetto o meno.
Volevo solo puntualizzare non polemizzare
che non ho il senso della organizzazione/progettazione.
Difatti cercando di risolvere da solo poi mi
blocco proprio perchè trovo ad affrontare
tutti questi problemi.
Non so se mi spiego … -
Buongiorno a tutti
se condividi il file con i risultati da ottenere scritti a mano si evitano fraintendimenti e probabilmente si risolve prima
-
e condividi il file con i risultati da ottenere scritti a mano si evitano fraintendimenti e probabilmente si risolve prima
Quoto Danilo (hai un messaggio privato) che saluto.
Sicuramente si può fare con le formule, ma mi muovo meglio con vba (udf ad hoc)
-
scusate se mi intrometto,
preferisco UDF oppure FORMULA
Il perchè: la formula o l’udf
sarà inserita in una macro registrata
con altre formule.
Il vba sarebbe il meglio ma poi non saprei
come fare a collocare il vba col formule varie in riga.
Intendo per formule varie che la riga comporta
una sessantina di colonne e forse anche piùSalve Danilo purtroppo da parte mia
dall’idea che vorrei ottenere uno o diversi dati
in partenza(l’idea) mi pare sempliciotta
è dopo che man mano lo sviluppo mi accorgo
della cosa apparentemente semplice è complessa.
Cmq accetto il consiglio di compilare manualmente
i dati … ma alla fine dico sempre che
Dio me la mandi buona. -
Ti posto questa soluzione con udf + function per ordinamento.
Per evitare il carattere “grassetto” nella distinzione per il numero di presenze dell’estratto (come da te richiesto), nelle celle in cui vengono restituiti i valori finali inserisco il risultato in questo formato: x(y), dove x è il numero estratto, ed il valore tra parentesi è il numero di presenze dell’estratto.
Ammettendo il valore minimo in C2 di Foglio2, e il valore max in D2 di foglio2
In un modulo standard inserisci sia la udf che la function
Questa la udfPublic Function MAX_PRESENZE(ByVal RNG As Range, ByVal POSIZIONE As Integer, vMin As Integer, vMax As Integer) As String Dim vTab As Variant, mioArr() As Variant, key As Variant Dim j As Long, jj As Long, n As Long Dim bEsci As Boolean Dim dict As Object If RNG.Cells(1, 1).value = vbNullString Then MAX_PRESENZE = vbNullString Exit Function End If Set dict = CreateObject("Scripting.Dictionary") vTab = RNG For j = LBound(vTab, 1) To UBound(vTab, 1) For jj = LBound(vTab, 2) To UBound(vTab, 2) If vTab(j, jj) = vbNullString Then bEsci = True Exit For End If If dict.Exists(vTab(j, jj)) Then dict(vTab(j, jj)) = dict(vTab(j, jj)) + 1 Else dict(vTab(j, jj)) = 1 End If Next jj If bEsci Then Exit For Next j For Each key In dict If dict(key) >= vMin And dict(key) <= vMax Then n = n + 1 ReDim Preserve mioArr(1 To 2, 1 To n) 'Debug.Print n, key, dict(key) mioArr(1, n) = key mioArr(2, n) = dict(key) End If Next key mioArr = Application.Transpose(mioArr) mioArr = ORDINAMENTO(mioArr) Set dict = Nothing MAX_PRESENZE = mioArr(POSIZIONE, 1) & " (" & mioArr(POSIZIONE, 2) & ")" End Function
Questa la function
Function ORDINAMENTO(Elenco As Variant) As Variant Dim X As Long, Y As Long Dim AAA As Variant, BBB As Variant 'ORDINO LA MATRICE per max presenza For X = LBound(Elenco) To UBound(Elenco) - 1 For Y = X + 1 To UBound(Elenco) If Elenco(X, 2) < Elenco(Y, 2) Then AAA = Elenco(X, 1): BBB = Elenco(X, 2) Elenco(X, 1) = Elenco(Y, 1): Elenco(X, 2) = Elenco(Y, 2) Elenco(Y, 1) = AAA: Elenco(Y, 2) = BBB End If Next Y Next X 'ORDINO LA MATRICE per estratto (doppia chiave di ordinamento) For X = LBound(Elenco) To UBound(Elenco) - 1 For Y = X + 1 To UBound(Elenco) If Elenco(X, 1) < Elenco(Y, 1) And Elenco(X, 2) = Elenco(Y, 2) Then AAA = Elenco(X, 1): BBB = Elenco(X, 2) Elenco(X, 1) = Elenco(Y, 1): Elenco(X, 2) = Elenco(Y, 2) Elenco(Y, 1) = AAA: Elenco(Y, 2) = BBB End If Next Y Next X ORDINAMENTO = Elenco End Function
in M15 di foglio2 inserisci la chiamata alla udf
=SE.ERRORE(SE($D15="";"";MAX_PRESENZE(Foglio1!$E6:$I14;RIF.COLONNA(A$1);$C$2;$D$2));"")
e trascini sia a destra sia in bassoI numeri in riga vengono inseriti ordinati prima per il numero di uscite, poi dal più grande al più piccolo.
Fa sapere, ciao
-
Salve,
sto provando la funzione che mi hai scritto
ho notato che non conteggia i numeri inferiore a 9.Poi siccome i numeri che vengono identificati con
i valori proposti cioè min e max hanno (2/3) devono essere
letti dalla funzione TROVA_RIGHE questi dati non vengono
presi in considerazione a causa (). -
sto provando la funzione che mi hai scritto
ho notato che non conteggia i numeri inferiore a 9.A me li conteggia senza problemi.
Dovrei vedere il file con cui lavoriPoi siccome i numeri che vengono identificati con
i valori proposti cioè min e max hanno (2/3) devono essere
letti dalla funzione TROVA_RIGHE questi dati non vengono
presi in considerazione a causa ()I valori tra parentesi stanno nel range M:S
Tu avevi chiesto il grassetto per il solo estratto, quindi in quel caso non ci sarebbe stato nessun numero e nessuna parentesi.
I valori di min e max in C2:D2 non sono tra parentesi.Ripeto, dovrei vedere il file dove riscontri il problema
-
sto solo facendo una segnalazione dei problemi
per quanto riguarda la segnalazione a fianco al
numero ()in che modo si può eliminare -
per quanto riguarda la segnalazione a fianco al
numero ()in che modo si può eliminareAnche se togli le parentesi e aggiungendo solo il numero, resta sempre una stringa.
Ti ho detto che dovrei vedere il file, in modo da far convivere la funzione TROVA_RIGHE con il resto del progetto. -
questo il file:
https://www.dropbox.com/s/1rdojpwf7hlk9u5/Somme%20Ponderate_2.xlsb?dl=0Pare che la lettura dei numeri ad una cifra si sia risolto;
mentre rimane quello della lettura dei valori rilevati prima.
Per agevolarti alla lettura dei dati apri il file e apri foglioNB
ho marcato le celle e sopra ho posto un commento.Salve
-
Per agevolarti alla lettura dei dati apri il file e apri foglioNB
Nel file che hai inviato ci sono solo i fogli Sviluppo e Archivio
-
https://www.dropbox.com/s/oc8bbpnatrb8lf4/SOMMA_PONDERATA_2.xlsb?dl=0
mi ha fregato la E somma e non somme(è un file di sal) -
Per far apparire solo il numero estratto (senza parentesi e numero di estrazioni), devi modificare l’ultima istruzione della udf da
MAX_PRESENZE = mioArr(POSIZIONE, 1) & " (" & mioArr(POSIZIONE, 2) & ")"
a
MAX_PRESENZE = mioArr(POSIZIONE, 1)
-
OK ora funziona
ma avevi detto di tentare di far riconoscere
a UDF trova_righe di riconoscere ugualmente i dati
numero con ().
Faccio qualche altro tentativo di controllo. -
ma avevi detto di tentare di far riconoscere
a UDF trova_righe di riconoscere ugualmente i dati
numero con ().Ho tentato; purtroppo non è possibile perchè insieme al TROVA_RIGHE viene usata la funzione CONTA.NUMERI.
I valori “x(y)” sono stringhe quindi non va bene -
Prova questa modifica:
1 – Riporta l’ultima istruzione della udf MAX_PRESENZE allo stato originale; quindi ridiventa
MAX_PRESENZE = mioArr(POSIZIONE, 1) & " (" & mioArr(POSIZIONE, 2) & ")"
In questo modo vengono inseriti i valori tra parentesi2 – modifica la udf TROVA_RIGHE in questo modo
Public Function TROVA_RIGHE(ByVal RNG As Range, ByVal rArchivio As Range, ByVal nMax As Integer) As String Dim sRitardo As String, sNumeri As String Dim nUltimaRiga As Long, j As Long, jj As Long Dim vRng As Variant, vArchivio As Variant Dim n As Integer nUltimaRiga = Range("i" & Rows.Count).End(xlUp).Row vArchivio = rArchivio vRng = RNG For j = LBound(vArchivio) To UBound(vArchivio) vArchivio = Application.Transpose(Application.Transpose(rArchivio.Rows(j).Value)) If RNG.Rows(j).Row >= nUltimaRiga Then Exit For sNumeri = "#" & Join(vArchivio, "#") & "#" For jj = LBound(vRng, 2) To UBound(vRng, 2) 'MODIFICA DEL 09/04/2019 '================ If InStr(1, vRng(1, jj), "(", vbTextCompare) > 0 Then vRng(1, jj) = --Left(vRng(1, jj), 2) End If '================= If vRng(1, jj) <> vbNullString Then If InStr(1, sNumeri, "#" & vRng(1, jj) & "#", vbTextCompare) > 0 Then n = n + 1 End If End If Next jj If n >= nMax Then sRitardo = sRitardo & j & ";" End If n = 0 Next j If sRitardo = vbNullString Then TROVA_RIGHE = vbNullString Else TROVA_RIGHE = Mid(sRitardo, 1, Len(sRitardo) - 1) End If End Function
Più di così non saprei fare.
fa sapere, ciao -
Salve Sid,
volevo solo capire,
riportando presenze senza modifica
e sostituendo trova_righe
mi da tot valori di un numero ma
trova righe legge solo i numeri
senza il contenuto ra parentesi()? -
sto verificando,
eccellente,
altro che più di così -
un’altra correzione (non che non è corretto quello che mi hai scritto/fatto)
il motivo è
trova presenze mi fa conoscere che tot numeri si sono presentati più volte
in tot righe precedenti,
in trova_righe ti ho fatto mettere minimo presenza 2,
è complicato includere la presenza con minimo 1?
Questo dato mi servirebbe a verificare se il ciclo di questi
numeri continua a presentarsi.
Se devi rivoluzionare più di un dato puoi lasciar perdere.
Grazie -
Scusami Sid,
mi succede questo che se a trova righe
indico i numeri di trova presenze di
trovare questi numeri dopo pur essendoci
non mi segnala la presenza;
mentre se a questi numeri di trova presenze ne abbino altri
se ci sono me li segnala sia di trova presenze che di altri abbinati
Cioè se indicati da soli non mi da niente -
Partiamo dalla prima richiesta
…in trova_righe ti ho fatto mettere minimo presenza 2,
è complicato includere la presenza con minimo 1?In TROVA_RIGHE mi hai fatto mettere il valore max e non il minimo; questo valore lo prendi dal terzo argomento della udf (nMax), che poi non è altro che la cella AF3 per TROVA_RIGHE inserito nella colonna AF, e la cella AG3 per TROVA_RIGHE inserito in colonna AG.
Quindi se ora vuoi il valore 1, o lo sostituisci al valore di una delle 2 celle che ti ho segnalato, oppure in AH3 inserisci 1, e modifichi il riferimento della cella nella formula, che poi metterai in colonna AH.
Spero sia chiaro
-
Questa risposta è stata modificata 2 anni fa da
sid.
-
Questa risposta è stata modificata 2 anni fa da
-
Scusami Sid,
mi succede questo che se a trova righe
indico i numeri di trova presenze di
trovare questi numeri dopo pur essendoci
non mi segnala la presenza;
mentre se a questi numeri di trova presenze ne abbino altri
se ci sono me li segnala sia di trova presenze che di altri abbinati
Cioè se indicati da soli non mi da nienteOK Sid se possiamo lasciar perdere i min e max
cose che ti avevo chiesto io.Se mi puoi dare una soluzione a quanto quotato
-
Scusami Sid,
mi succede questo che se a trova righe
indico i numeri di trova presenze di
trovare questi numeri dopo pur essendoci
non mi segnala la presenza;
mentre se a questi numeri di trova presenze ne abbino altri
se ci sono me li segnala sia di trova presenze che di altri abbinati
Cioè se indicati da soli non mi da nientespiega meglio il problema, usando dei valori: di quale cella parliamo ad eempio?
-
i numeri che trova l’UDF presenze
quindi numeri precedenti voglio vedere se,
con l’UDF trova righe, sono presenti dopo
ora se con trova righe considero solo i
numeri di presenze non mi segnala se sono
presenti dopo. -
file SOMMA_PONDERATA_2
FOGLIO NB
cella C2 =1 e clicca su cella X28
deve dare i seguenti numeri:
46-35-9-90-87-86-80-77
di rigo 28
in cella AG28 nella formula trova_righe
conta.numeri S=X mentre
trova_Righe S=X dovrebbe dare 7 oppure 11
perchè foglioA rigo D3662:H3662 ha 2 numeri
di quelli elencati e precisamente 77-35-9
se in questa riga sostituisci 18 con 40
in AF28 ottieni il risultato di 11 mentre in AG28 niente
in AF3 metti 2-
Questa risposta è stata modificata 2 anni fa da
giorgioantonio.
-
Questa risposta è stata modificata 2 anni fa da
giorgioantonio.
-
Questa risposta è stata modificata 2 anni fa da
-
FOGLIO NB
cella C2 =1 e clicca su cella X28
deve dare i seguenti numeri:
46-35-9-90-87-86-80-77Ok mi da questi numeri
Non capisco il resto del messaggio; che significa
in cella AG28 nella formula trova_righe
conta.numeri S=X mentre
trova_Righe S=X dovrebbe dare 7 oppure 11Che vuol dire S=X?
-
se lascio conta.numeri($S comprende i numeri di
altre 5 celle mentre S = X si vuole vedere se la
formula(UdF conta_righe) conta solo quei numeri da
X ad AE
Cioè verifico che conta_righe non legge affatto
quei numeri
Perchè?
Nella formula quei numeri sono stati selezionati
e al rigo 3662 che ce ne sono 3 non me li segnala
come trovati in AG28-
Questa risposta è stata modificata 2 anni fa da
giorgioantonio.
-
Questa risposta è stata modificata 2 anni fa da
-
Ricominciamo altrimenti non se ne esce.
La formula che non restituisce i valori come vorresti tu, si trova in colonna AF oppure AG?
Questo perchè TROVA_RIGHE la trovi in entrambe le colonne, ma mentre in AF il range da verificare è N:R, in AG il range da verificare è S:AEQuindi di quale colonna stiamo parlando?
-
in AG da considerare il range X:AE
sostituendo la X alla S non ottieni
nessun risultato;
Detto questo se ag (x:Ae) non legge
vuol dire che i dati in X:Ae non vengono
considerati in S:AE cioè AF-
Questa risposta è stata modificata 2 anni fa da
giorgioantonio.
-
Questa risposta è stata modificata 2 anni fa da
-
volevo precisare che sto usando
trova presenze senza (). -
in AG da considerare il range X:AE
sostituendo la X alla S non ottieni
nessun risultato;Quindi in tutta la colonna AG va sostituito il range da S:AE a X:AE?
-
si anche per capire che quei numeri sono considerati
nel range.
E questo non avviene -
volevo precisare che sto usando
trova presenze senza ().Lascia la udf con le parentesi e prova questa modifica.
Inserisci in AG28
=SE(CONTA.VALORI($X28:$AE28)-CONTA.VUOTE($X28:$AE28)>=$AG$3;TROVA_RIGHE($X28:$AE28;A!$D3652:$H3697;$AG$3);"")
Poi trascini sia in basso che in alto -
non mi da nessun risultato in AG28
Vorrei farti notare una cosa strana
In foglioA rigo 3662 ci sono 3 numeri
di foglioNB X28:AE28
se in A3662 al posto del numero 18 scrivi 40
questo è un numero di foglioNB S28:W28 in AF28
ti da 11.
Praticamente ti dice che ha trovato almeno 2
numeri da S28:AE28 ma se tolgo 40 non mi segnala 11
Ma inserisco un solo numero di S28:W28 e quindi
col solo numero (40) + i numeri di X28:AE28 mi da 11
spero di essermi spiegato
Un numero di S:W + un numero di X:AE mi da il risultato -
non mi da nessun risultato in AG28
A me da 11;43;46 avendo in AG3=2
-
A me da 11;43;46 avendo in AG3=2
Dimenticavo che C2=1
Ricapitolando:
C2 = 1
AG3 = 2
AG28 = 11;43;46 -
per favore per evitare andirivieni di messaggi
mi puoi postare il file?
non con filedropper non riesco a scaricare
più niente con questo sito.
dropbox se puoi
Grazie -
Adesso non ho modo di stare al pc; appena possibile lo posto.
Ricapitolando:
C2 = 1
AG3 = 2
AG28 = 11;43;46I valori che ho scritto sono corretti secondo te?
-
Adesso non ho modo di stare al pc; appena possibile lo posto.
Ricapitolando:
C2 = 1
AG3 = 2
AG28 = 11;43;46I valori che ho scritto sono corretti secondo te?
Non ho dati per confrontare non so da cosa dipende
però questi in AG28 e in AF28 cosa ti risulta?
11;26;43;46 e ben altro.
E’ così -
Ehm Salve
-
Questo il file che ho io, con la nuova formula in AG
https://app.box.com/s/t8fu50c86i9kyf1smweb5eco20dxr5ap -
Salve,
nonostante ho riportato tutti i dati dal file
che mi hai messo a disposizione ad un altro file
che avevo predisposto le udf non funzionano
quindi ho dovuto rifare tutto ma sul tuo file
che pare funzionano tutti i dati.Grazie e aspetto un altro giorno per eventuali
novità per chiudere. -
Grazie e aspetto un altro giorno per eventuali
novità per chiudere.Aspetto l’ulteriore riscontro.
-
Si ho accomodato i dati sul file compilato
da te che ho scaricato e i dati funzionano
Il file che usavo io l’ho dovuto abbandonare.PS ti ho inviato un messaggio in privato
-
Questa risposta è stata modificata 2 anni fa da
giorgioantonio.
-
Questa risposta è stata modificata 2 anni fa da
giorgioantonio.
-
Questa risposta è stata modificata 2 anni fa da
-
-
AutorePost
- Devi essere connesso per rispondere a questo topic.