Condividi:        

certezza (quasi) per winc...

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

certezza (quasi) per winc...

Postdi giorgioa » 08/11/22 16:50

Salve se possibile un ulteriore aiuto per winc....

se riesco ad allegare il file spieghero' cosa vorrei

sempre che mi sia aperta la porta
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Sponsor
 

Re: certezza (quasi) per winc...

Postdi giorgioa » 08/11/22 16:58

giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi giorgioa » 08/11/22 17:22

sono riuscito ad allegare il file.

colonna L il numero intestato sara sempre uguale per tutta la colonna
così per le altre colonne ma questo centra relativamente.

si deve considerare gruppi di colonne a 5 alla volta
cosa si chiede
Nel primo gruppo di 5 colonne L : P

trovasi il primo numero alla seconda riga =72
scendendo fino a 6 righe dopo il 72
se troviamo una coppia o anche tre numeri si deve controllare
se il numero 72 è presente nella coppia o terna
si deve vedere quante volte il 72 dopo ed entro 6 righe se si trova la coppia o terna con il numero è 72
l'analisi va fatta per ogni numero e riportato a fine tabella che di estrazione in estrazione la riga
finale aumentera quindi occorre spostarsi sempre di un rigo sotto

Se mi sto spiegando e se quanto chiedo si puo fare

Grazie
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 08/11/22 19:38

Come spesso succede io ho bisogno di un supplemento di informazioni...
Inserisco qui sotto le tue affermazioni e in MAIUSCOLO inserisco le cose ho capito /non ho capito, per i tuoi chiarimenti

1) si deve considerare gruppi di colonne a 5 alla volta
cosa si chiede
Nel primo gruppo di 5 colonne L : P
OK, PARTIAMO CON 51, 76, 45, 4, 72 IN L1:P1

2) trovasi il primo numero alla seconda riga =72
IMMAGINO CHE PARLI DEL 72 CHE SI TROVA IN RIGA 3
COMUNQUE STAI DICENDO "CERCHIAMO IL PRIMO 72" (MA PERCHE' 72?), O "CERCHIAMO IL PRIMO NUMERO DOPO RIGA 1"? O INTENDI "ESAMINIAMO IL 72 PERCHE' PARTIAMO DAL VALORE IN P1, POI ESAMINEREMO IL 4 CIOE' O1, E POI I NUMERI IN N1, M1, L1"?

3) scendendo fino a 6 righe dopo il 72
se troviamo una coppia o anche tre numeri si deve controllare
se il numero 72 è presente nella coppia o terna
STAI DICENDO DI CERCARE IL NUMERO (DA CAPIRE QUALE NUMERO PER IL DUBBIO n° 2) NELLE 6 RIGHE SOTTOSTANTI E CONTARE QUANTE VOLTE E' PRESENTE? LA RIGA IN CUI SI TROVA IL NUMERO VA ESCLUSA DALLA CONTA DI SEI, GIUSTO?

ESAMINANDO IL PRIMO 72, NE TROVIAMO UN SECONDO ENTRO LE SEI RIGHE, IN RIGA 8; FINITA LA CONTA DEL PRIMO BLOCCO DI SEI RIGHE, SI LAVORA PARTENDO DAL 72 DI RIGA 8, O QUEL 78 VA SALTATO E SI RIPARTE DA QUELLO IN P11?

4) l'analisi va fatta per ogni numero e riportato a fine tabella che di estrazione in estrazione la riga
finale aumentera quindi occorre spostarsi sempre di un rigo sotto
PROBABILMENTE STAI DICENDO "FINITO COL 72 IN COLONNA P PASSIAMO AL 4 DI COLONNA O"; GIUSTO?

5) NON HAI PARLATO DELLE COLONNE S:W, Z:AD, ETC; E' PERCHE' NON TI INTERESSANO O FANNO PARTE DELLA SECONDA PUNTATA?

Per ora puo' bastare...

PS: mi ricordi che versione di Excel usi?
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: certezza (quasi) per winc...

Postdi giorgioa » 08/11/22 21:05

di ogni colonna analizzare il numero che con la sua presenza entro le sei righe
se ci sono 2 numeri in riga e uno dei 2 numeri è il numero che si trova nelle 6
precedenti righe conta/memorizza fino alla fine della tabella quanti casi positivi ha trovato
lasciare un rigo vuoto e scarica quanti casi ha trovato o zero se non ne trova

facciamo conto di aver esaminato i 4 numeri 51-76-45-4 e stiamo controllando la
colonna P col 72 alla 3 riga abbiamo 72 e considerando 6 righe dopo il 72 vediamo che
c'è una coppia in riga e c'è anche il 72 continuarefino alla fine della tabella per quanti ne ha trovati
cioè esce 72 e poi c'è una coppia se 'èce il 72 conta altrimenti a fine tabella nella colonna P
cioè dove sta il 72 spostandosi un rigo sotto la tabella scriverà 1

Non è detto che quando si sta analizzando il numero di colonna p che la coppia debba trovarsi
6 lunghezze giù deve contare anche in caso di meno di 6 lunghezze anche la riga successiva
il 72 subito dopo trova la coppia col 72 e conta

altro caso quando un numero si ripete cioè che esce 2 volte o anche tre volte e trova la coppia col 72
conta 1 e la ricerca va oltre.

altro caso quando trova la coppia e nella coppia trova il numero deve contare che se entro le 6 righe successive
il 72 fa un'altra volta coppia conta 1
cioè trova 51 e 72 siccome stamo analizzando il 72 se entro le 6 righe successive esce 4 e 72 conta 1

per quanto riguarda i gruppi successivi vale quanto detto per il gruppo L : P

i gruppi potrebbero aumentare come diminuire
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi giorgioa » 09/11/22 06:33

Aggiungo che i gruppi sono quantificati nella cella D1 come pure,
le righe complessive come Tabella sono quantificate in cella B1
Es B1 = 2742 righe che aumenteranno col fare le estrazioni
Es D1 = 10 gruppi che potrebbero aumentare per mia decisione

Il controllo va fatto numero di colonna per numero di colonna
col numero di colonna che si sta controllando dopo che trova il numero
per la coppia che deve trovare entro 6 righe sotto si deve tenere presente la presenza
che nella coppia sia presente il numero di colonna che che si trova precedente
che si sta analizzando

un caso è troviamo la coppia es 51 e 72 (parliamo del 72) nelle successive 6 righe
troviamo 4 e 72 la coppia conta 1

Non aggiungo altro perchè non saprei fino a che punto sono riuscito a spiegarmi
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 09/11/22 14:26

Per quello che ho capito, prova con questa:
Codice: Seleziona tutto
Sub MahBoh()
Dim StarTab As Range, dBg As Boolean
Dim LaCol As Long, LaRow As Long
Dim cNum As Long, cCnt As Long
'
Set StarTab = Range("L1")
LaCol = StarTab.Offset(0, 1000).End(xlToLeft).Column
row0 = StarTab.Resize(15000, LaCol - StarTab.Cells(1, 1).Column + 1).Address
LaRow = 1 + Evaluate("MAX((LEN(" & row0 & ")>0)*(ROW(" & row0 & ")))")
dBg = True
For i = 1 To LaCol
    cNum = StarTab.Cells(1, i)
    If cNum > 0 Then
        For j = 2 To LaRow
            If StarTab.Cells(j, i) = cNum Then
                For k = 1 To 6
                ''Debug.Print cNum, StarTab.Cells(j + k, i).Resize(1, 5).Address(0, 0), Application.WorksheetFunction.TextJoin(",", False, StarTab.Cells(j + k, i).Resize(1, 5))
                    If Application.WorksheetFunction.Count(StarTab.Cells(j + k, i).Resize(1, 5)) = 2 Then
                        If Application.WorksheetFunction.CountIf(StarTab.Cells(j + k, i).Resize(1, 5), cNum) > 0 Then
                            If dBg Then Debug.Print cNum, StarTab.Cells(j + k, i).Resize(1, 5).Address(0, 0), Application.WorksheetFunction.TextJoin(",", False, StarTab.Cells(j + k, i).Resize(1, 5))
                            cCnt = cCnt + 1
                        End If
                    End If
                Next k
                ''Debug.Print
            End If
        Next j
        DoEvents
        StarTab.Cells(LaRow + 1, i) = cCnt
        cCnt = 0
    End If
Next i
MsgBox ("Completato; risultati su riga " & LaRow + 1)
End Sub

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: certezza (quasi) per winc...

Postdi giorgioa » 09/11/22 14:57

row0 = StarTab.Resize(15000, LaCol - StarTab.Cells(1, 1).Column + 1).Address
LaRow = 1 + Evaluate("MAX((LEN(" & row0 & ")>0)*(ROW(" & row0 & ")))")

row0 = variabile non definita

Ho visto 1000 e 1500 per caso si rifesce all'altezza delle colonne? Cioè in quante righe sono sparsi i numeri?
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 09/11/22 15:08

Evidentemente hai impostato Option Explicit, e quindi "devi" dichiarare ogni variabile. Aggiungi in testa
Codice: Seleziona tutto
Dim Row0, I As Long, J As Long, K As Long


1000 e 15000 sono il num max di colonne e righe previste
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: certezza (quasi) per winc...

Postdi giorgioa » 09/11/22 15:23

LaRow = 1 + Evaluate("MAX((LEN(" & Row0 & ")>0)*(ROW(" & Row0 & ")))")

errore run time 13
tipo non corrispondente
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 09/11/22 17:26

Prova la macro sul file che avevi condiviso

In ogni caso usa Set StarTab per personalizzare sulla tua tabella:
Codice: Seleziona tutto
Set StarTab = Range("L1")           '<<< La prima cella del tabellone (aggiunto commento)


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

Re: certezza (quasi) per winc...

Postdi giorgioa » 09/11/22 20:04

HO ESAMINATO RIGA PER RIGA LE COMBINAZIONI
CON PRIMO NUMERO = 72
QUESTA LA SITUAZIONE

RIGO
COL = P L M N O P
72 51 76 45 4 72

R8 -> R13 51 72
R241 -> R244 4 72
R903 -> R908 76 72
R956 -> R959 76 72
R1646-> R1647 76 72
R1713-> R1718 76 72
R1829-> R1830 45 72
R2646-> R2648 45 72

DOPO LO SVILUPPO A TE NE DA 5
MENTRE IL CONTROLLO NE DA 9

ES R8 SI RIFERISCE AL 72 E AVVIA IL CONTROLLO A R13 CHE TROVA 51 E 72 ECCETERA
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi giorgioa » 09/11/22 20:41

ho controllato il 51 colonna L macro ne da 9,

il conteggio mio ne da 8 pero può darsi che abbia calcolato doppio

a rigo 2579 trova il 51 e a rigo 2583 trova la coppia 51 e 76 ma a rigo 2582 c'è nuovamente 51 e a rigo 2583 c'è la coppia 51 76
cioè se entro le le sei successive righe esce lo stesso numero che si sta analizzando VALE SEMPRE 1
quindi alla fine vale 8 e non 9

se qualche dubbio fammelo presente ...
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 09/11/22 22:18

se qualche dubbio fammelo presente ...
Di dubbi ne avrei, ma il principale è "a che serve?" :D

Ho trovato un errore di logica, per cui va modificato tutto il loop centrale (For K /Next K) in:
Codice: Seleziona tutto
                For K = 1 To 6
                ''Debug.Print cNum, StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5).Address(0, 0), Application.WorksheetFunction.TextJoin(",", False, StarTab.Cells(J + K, I).Resize(1, 5))
                    If Application.WorksheetFunction.Count(StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5)) = 2 Then
                        If Application.WorksheetFunction.CountIf(StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5), cNum) > 0 Then
                            If dBg Then Debug.Print cNum, StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5).Address(0, 0), Application.WorksheetFunction.TextJoin(",", False, StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5))
                            cCnt = cCnt + 1
                            fLg = True
                        End If
                    End If
                Next K
                ''Debug.Print
            End If
            If fLg = True Then      '<<< Per non conteggiare 2 volte lo stesso elemento
                J = J + 5
                fLg = False
            End If
        Next J

In coda al loop For K /Next K ho anche inserito la gestione per evitare di ricontare le occorrenze gia' contate.

Questo inoltre necessita di una ulteriore Dim all'inizio della macro:
Codice: Seleziona tutto
Sub MahBoh()
Dim fLg As Boolean          '<<< Nuova


Ri-prova...

PS: una cosa che non ti ho detto: il codice elenca nella "Finestra Immediata" del vba tutte le righe che hanno portato a un conteggio.
Per vederlo:
-partendo dall'editor delle macro...
-... digita Contr-g per aprire la finestra Immediata

Il formato:
Codice: Seleziona tutto
 51           L202:P202     51,,45,,
 51           L549:P549     51,,,4,
 51           L1500:P1500   51,,,,72
 51           L1504:P1504   51,,,4,
...
...
Tradotto:
-stiamo guardando il numero 51
-nell'intervallo L202:P202 abbiamo trovato una coppia col 51: 51,,45,,
-una seconda coppia e' stata trovata in L549:P549,contenente 51,,,4,
etc etc

Purtroppo in questa finestra vengono visualizzate solo le ultime 200 righe, che (col file di esempio pubblicato) corrisponde agli ultimi 4 blocchi di estrazioni.
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: certezza (quasi) per winc...

Postdi giorgioa » 10/11/22 12:22

salve,

pare ci siamo, ho controllato il primo gruppo di 5 colonne e ci troviamo con i dati
penso che su 2750 i cinque numeri abbiano prodotto le varie e possibili combinazioni

se non ti dispiace ci sarebbero da fare altri 2 calcoli soprattutto il primo che ti propongo

parliamo sempre che quando troviamo il numero di colonna entro le 6 righe successive si deve verificare l'evento
della coppia in generale cioè che il numero è presente o non presente nella coppia, contare 1

Ho contato del primo gruppo di 5 colonne il numero 51 che darebbe che gli eventi trovati sono 25 e trascriverlo
alla seconda riga dopo la prima ricerca in fondo alla tabella.

NB ti vorrei chiedere se volessi contarne 5 oppure 7 di righe da avere il risultato posso cambiare il ciclo da 6 a...
senza creare danni?
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 10/11/22 14:29

Questa versione contiene due modifiche:
-la possibilita' di scegliere su quante righe cercare il risultato, vedi Span = xx
-la possibilita' di contare anche la sola presenza di cippoa, vedi SoloCoppia = True /False
Le righe sono marcate <<<, verso l'inizio della macro.

Il codice:
Codice: Seleziona tutto
Sub MahBoh()
Dim fLg As Boolean, Span As Long, SoloCoppia As Boolean         ' Modificata
Dim Row0, I As Long, J As Long, K As Long
Dim StarTab As Range, dBg As Boolean
Dim LaCol As Long, LaRow As Long
Dim cNum As Long, cCnt As Long
'
Set StarTab = Range("L1")           '<<< La prima cella del tabellone
Span = 6                            '<<< Per quante righe cercare
SoloCoppia = True                   '<<< True = basta che ci sia la coppia
'
LaCol = StarTab.Offset(0, 1000).End(xlToLeft).Column
Row0 = StarTab.Resize(15000, LaCol - StarTab.Cells(1, 1).Column + 1).Address
LaRow = 1 + Evaluate("MAX((LEN(" & Row0 & ")>0)*(ROW(" & Row0 & ")))")
dBg = True
For I = 1 To LaCol
    cNum = StarTab.Cells(1, I)
    If cNum > 0 Then
        For J = 2 To LaRow
            If StarTab.Cells(J, I) = cNum Then
                For K = 1 To Span
                ''Debug.Print cNum, StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5).Address(0, 0), Application.WorksheetFunction.TextJoin(",", False, StarTab.Cells(J + K, I).Resize(1, 5))
                    If Application.WorksheetFunction.Count(StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5)) = 2 Then
                        If Application.WorksheetFunction.CountIf(StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5), cNum) > 0 Or SoloCoppia Then
                            If dBg Then Debug.Print cNum, J, StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5).Address(0, 0), Application.WorksheetFunction.TextJoin(",", False, StarTab.Cells(J + K, Int(I / 7) * 7 + 1).Resize(1, 5))
                            cCnt = cCnt + 1
                            fLg = True
                        End If
                    End If
                Next K
                ''Debug.Print
            End If
            If fLg = True Then      'Per non conteggiare 2 volte lo stesso elemento
                J = J + Span - 1
                fLg = False
            End If
        Next J
        DoEvents
        StarTab.Cells(LaRow + 1, I) = cCnt
        cCnt = 0
    End If
Next I
MsgBox ("Completato; risultati su riga " & LaRow + 1)
End Sub

Non ho capito se c'era una terza richiesta...
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: certezza (quasi) per winc...

Postdi giorgioa » 10/11/22 16:25

ho avviato la macro per avere contemporaneamente entrambi i risultati per coppia e non dovrei entrare nel modulo a cambiare?

poi l'altra richiesta:
riferito alla coppia (TRUE): media sortita del numero che poi ottiene l'uscita di 2 numeri (mi riferisco sempre al TRUE)

La macro fino a quando la lancio sul file che ho allegato (l'allegato: ho fatto copia dei dati del foglio e incollato su file nuovo)
funziona mentre se la incollo sul modulo del file di origine mi da RUN TIME 13.
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi Anthony47 » 10/11/22 17:27

Le variabili Span e SoloCoppia determinano il tipo di ricerca che la macro fa; le devi impostare prima di avviare la macro.

Per l'errore che ottieni, probabilmente la natura dei dati sul tuo file e' diversa da quella del file che hai condiviso

Prova sostituendo la riga che va in errore con:
Codice: Seleziona tutto
Dim bCell As String
bCell = StarTab.Offset(-StarTab.Row + 1, 0).Address
On Error Resume Next
LaRow = Range(bCell).Resize(15000, LaCol).Find(What:="*", After:=Range(bCell), _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row + 1
On Error GoTo 0

Controlla alla fine che abbia scritto i risultati nella posizione corretta

Che cosa e' la "media sortita del numero che poi ottiene l'uscita di 2 numeri"?
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: certezza (quasi) per winc...

Postdi giorgioa » 10/11/22 18:15

dopo provo la modifica per evitare run 13

effettivamente non mi sono spiegato:

lo stesso numero esce più volte senza che esce la coppia con o senza il suo numero nella coppia
es il 51 esce 4 volte, quindi dopo la 4^ volta esce una coppia, si ripresenta il 5i ed ece 2 volte e dopo la seconda volta
si produce un'alta coppia che il 51 è o no presente nella coppia conta che su 4 +2 volte = 6 / 2(coppia) = 3
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: certezza (quasi) per winc...

Postdi giorgioa » 10/11/22 18:26

la correzione:

dBg = True
For I = 1 To LaCol
cNum = StarTab.Cells(1, I) 'ORA SI FERMA QUI SEMPRE CON RUN 13

CMQ i risultati li ha scritti
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "certezza (quasi) per winc...":


Chi c’è in linea

Visitano il forum: Marius44 e 19 ospiti