Condividi:        

Verifica sestine con range auto configurante

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

Verifica sestine con range auto configurante

Postdi ikwae » 30/06/22 01:48

Ciao a tutti… Ho tantissime sestine da confrontare ma in rete solo formule che non aiutano
a velocizzare le procedure…

Mi spiego su un foglio di Excel ho diversi gruppi di sestine in un gruppo ci possono essere
poche righe di sestine e in altri gruppi ci possono essere centinaia o migliaia di righe.

Queste sestine devono essere confrontate fra di loro e anche con sestine campione
e, di volta in volta, cambio manualmente il range per eseguire il confronto.

Il metodo manuale di scrivere il range è molto lento e in più, alcune volte, sbaglio anche
a digitare qualche cifra e i conteggi sono errati.

Chiedo aiuto a tutto il Forum per avere una macro di aiuto con il range auto configurante.

Mi spiego meglio se nel codice inserisco il nome di una cella qualsiasi ad esempio
la cella C2 la macro deve completare autonomamente il range contando sei celle
verso dx e si arriva alla cella H2 quindi Range C2:H2.

Inserisco la seconda cella ad esempio la P4 e la macro deve completare contando
sei celle verso dx così arriva alla cella U4 quindi il Range P4:U4.

Completati questi due parametri i range, dove sono presenti le sestine, sono: C2:H2(end) e P4:U4(end).

Se sono riuscito a spiegare il concetto descrivo i passi della macro che cerco:

1a) inserisco il nome 1à cella ad esempio la K32 la macro conta sei celle verso dx e si arriva a P32
2b) inserisco il nome 2à cella ad esempio la AA10 la macro conta sei celle verso dx e si arriva alla AF10
3c) la macro provvede autonomamente di formare i range K32:P32(end) e AA10:AF10(end)
4d) memorizzare la 1à sestina del range K32:P32(end) e confrontarle con tutte le sestine del range AA10:AF10(end)
5e) se trova una o più sestine uguali scrivere il risultato stesso rigo della sestina del 1° range ossia col Q(Q32)
6f) memorizzare la 2à sestina del range K32:P32(end) e confrontarle con tutte le sestine del range AA10:AF10(end)
7g) se trova una o più sestine uguali scrivere il risultato stesso rigo della sestina del 1° range ossia col Q(Q33)
8h) memorizzare la 3à sestina ecc. ecc.

Ricapitolando io scrivo nel codice due celle e la macro fa tutta da sola in autonomia
ossia il range e il confronto scrivendo il risultato a fine rigo della sestina del primo range.

In allegato un foglio “Riscontro” che indica dove la macro dovrebbe lavorare.
Non prendere riferimenti perché ad ogni ciclo si formano nuovi blocchi con range diversi.
Ho applicato lo Zoom al 20% al foglio per capire all’istante il disastroso scenario dei range.

Ringraziando anticipatamente tutti coloro che mi possono aiutare 73 ikwae

http://filedropper.com/WGcKe787

https://we.tl/t-5gtWPmdA7Q
Note: entrambi i link dicono, nel download, che il file contiene virus ma non è vero perché e lo stesso dell'altra volta. Domani proverò a rifare un nuovo foglio e un altro link e lo allego.
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Verifica sestine con range auto configurante

Postdi ikwae » 30/06/22 10:17

Ciao... è da stamattina che ci provo e, forse, ho risolto.

Questo è il nuovo link
https://we.tl/t-fRlVsFKJsW
è funzionante appena provato ma se non si riesce a scaricare il file c'è l'immagine del foglio perché come ho scritto sopra l'allegato era solo per visualizzare il foglio "Riscontro"e i suoi molteplici range. Chiedo scusa per l'inconveniente cordialmente ikwae

Immagine
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Verifica sestine con range auto configurante

Postdi Anthony47 » 02/07/22 10:11

Mi ero proprio perso il messaggio...

Quindi tu hai dei blocchi di numeri da 6 colonne * N righe
Vorresti poter scegliere due blocchi e verificare se per miracolo qualche sestina e’ comune tra i due gruppi; nel qual caso, in particolare vorresti “scrivere il risultato stesso rigo della sestina del 1° range ossia col Q(Q32)
A parte che non ho capito cosa vorresti scrivere in colonna Q, non sarebbe piu’ semplice esaminare TUTTE le sestine presenti sul foglio e da qualche parte elencare gli eventuali duplicati con le posizioni in cui si trovano?
Vorrei anche avere la conferma che i numeri presenti nelle sestine non sono in ordine crescente o decrescente.

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

Re: Verifica sestine con range auto configurante

Postdi ikwae » 02/07/22 13:28

Gentile come sempre a rispondermi…

Rispondo subito alle tue domande:

Anthony47 ha scritto
Quindi tu hai dei blocchi di numeri da 6 colonne * N righe Vorresti poter scegliere due blocchi e verificare se per miracolo qualche sestina è comune tra i due gruppi; nel qual caso, in particolare vorresti “scrivere il risultato stesso rigo della sestina del 1° range ossia col Q(Q32)”
Risposta
Si

Anthony47 ha scritto
A parte che non ho capito cosa vorresti scrivere in colonna Q
Risposta
in colonna Q e precisamente in Q32, il riscontro del confronto della 1à sestina con tutte le altre del secondo range.

Anthony47 ha scritto
non sarebbe più semplice esaminare TUTTE le sestine presenti sul foglio e da qualche parte elencare gli eventuali duplicati con le posizioni in cui si trovano?
Risposta
Ogni blocco ha una sua logica di formazione e il riscontro non è su tutte ma solo in altri blocchi calcolati prima o dopo oppure con altri blocchi specifici della stessa specie sparsi sul foglio. Il risultato, se possibile è preferito, che venga scritto a fine sestina del 1° range.

Anthony47 ha scritto
Vorrei anche avere la conferma che i numeri presenti nelle sestine non sono in ordine crescente o decrescente.
Risposta
I numeri presenti nelle sestine li crea in automatico la macro che gestisce la formazione delle 15 sestine quindi non
dovrebbero essere né crescenti né decrescenti ma è possibile che qualche sestina può essere crescente o decrescente.

Ricapitolando per essere certo di aver scritto tutto e bene descrivo un altro esempio di cosa cerco.

1a) Nel codice scrivo il nome della 1à cella per il 1° range ad esempio C33. La macro conta sei cella verso dx e trova la H33 e compone il primo range C33:H33(end)

2b) Nel codice scrivo il nome della 2à cella per il 2° range ad esempio S24. La macro conta sei cella verso dx e trova la X24 e compone il secondo range S24:X24(end)

3c) memorizzo la 1à sestina del 1° range (59 62 64 65 69 72) e la confronto con tutte le altre del 2° range e se ci sono riscontri positivi li scrivo in cella I33

4d) memorizzo la 2à sestina del 1° range (57 59 65 67 69 72) e la confronto con tutte le altre del 2° range e se ci sono riscontri positivi li scrivo in cella I34.

5e) memorizzo la 3à sestina del 1° range ecc. ecc.

Ringraziandoti come sempre mille e mille volte cordialmente ikwae

*************************
Ho il computer pulito “lindo” non è collegato alla rete e lavoro solo con materiale “locale” non capisco come mai ultimamente ci sono questi problemi per scaricare i file.

E, per dirla tutta, non ho fatto altro che scaricare un file e poi lo stesso l’ho postato con altro link e non ha dato l’errore di prima. Non so proprio…
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Verifica sestine con range auto configurante

Postdi Anthony47 » 02/07/22 23:29

Una possibile soluzione:
Codice: Seleziona tutto
Sub MatchBlocks()
Dim Bk1 As Range, Bk2 As Range, oRow As Range
Dim kList(), iList(), oMatch()
Dim cKey As String, I As Long, J As Long, cMat As Long
'
Sheets("Riscontro").Select
Set Bk1 = Application.InputBox("Inizio Blocco 1?", , , , , , , 8)
Set Bk2 = Application.InputBox("Inizio Blocco 2?", , , , , , , 8)
'
Set Bk1 = Range(Bk1.Cells(1, 1), Bk1.Cells(1, 1).End(xlDown).Offset(0, 5))
Set Bk2 = Range(Bk2.Cells(1, 1), Bk2.Cells(1, 1).End(xlDown).Offset(0, 5))
ReDim oMatch(1 To Bk1.Rows.Count, 1 To 1)
ReDim kList(1 To Bk2.Rows.Count)
ReDim iList(1 To Bk2.Rows.Count)
'Crea keys
For I = 1 To Bk2.Rows.Count
    Set oRow = Bk2.Cells(I, 1).Resize(1, 6)
    For J = 1 To 6
        kList(I) = kList(I) & Format(Application.WorksheetFunction.Small(oRow, J), "00-")
    Next J
Next I
'Scan Block 1
For I = 1 To Bk1.Rows.Count
    Set oRow = Bk1.Cells(I, 1).Resize(1, 6)
    cKey = ""
    For J = 1 To 6
        cKey = cKey & Format(Application.WorksheetFunction.Small(oRow, J), "00-")
    Next J
'Controlla se esiste:
    mymatch = Application.Match(cKey, kList, False)
    If Not IsError(mymatch) Then
        oMatch(I, 1) = Bk2.Cells(mymatch, 1).Address(0, 0)
        cMat = cMat + 1
    End If
Next I
'Scrive risultati:
Bk1.Offset(0, 6).Resize(UBound(oMatch), 1).Value = oMatch
Application.WorksheetFunction.Count (oMatch)
MsgBox (cMat & " Match")
End Sub

Avvia la macro; un inputbox ti chiedera’ di selezionare l’inizio del primo blocco (selezioni col mouse la cella di partenza del blocco e l’indirizzo verra’ visualizzato nell’inputbox) e poi l’inizio del secondo blocco. Poi verranno fatti i controlli; il risultato sara’ scritto 6 colonne piu’ a destra dell’inizio del blocco e un msgbox sintetizza il risultato.
In caso di sestina in comune tra i due blocchi verra’ scritto (sul primo blocco) l’indirizzo dove si e’ verificato il match.
Ad esempio, comparando C2 con AA10, in I14 verra’ scritto AA18


Quanto ai problemi di condivisione di file, io uso principalmente Dropbox; il piano gratuito consente di usare "solo" 2 GB (oppure con 120 €/anno hai 2 TB), poi puoi rendere accessibile in lettura un file specifico (come serve qui sul forum), e tante altre cose.

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

Re: Verifica sestine con range auto configurante

Postdi ikwae » 03/07/22 02:12

Gentilissimo Anthony ho provato la tua magnifica e aggiungo stupenda macro e dà indicazioni di
confronti precisi ma purtroppo ci sono dei piccolissimi nei. :roll:

Ho notato che copiando la prima e l’ultima sestina del 1° blocco e l’ho incollate in tre punti diversi sul 2° blocco.
Tre volte la prima e due volte la seconda e, mandato in esecuzione macro, riporta solo due indirizzi di cella
(K13 e K30) mentre dovrebbe riportare a fine riga, delle due sestine, il numero 3 e il numero 2.

Ho notato anche che non mi permette di scrivere il nome delle celle per avere i due range e modificando,
arbitrariamente, Set Bk1 = C2 e Set Bk2 = K2 la macro va in errore.

Hai fatto un ottimo lavoro ma se la puoi modificare quanto basta per eliminare i piccolissimi nei
e aggiungere le tre voci seguenti sarei molto felice.

1a) Nel codice scrivo il nome della 1à cella per il 1° range ad esempio C33. La macro conta sei cella verso dx e trova la H33 e compone il primo range C33:H33(end)
2b) Nel codice scrivo il nome della 2à cella per il 2° range ad esempio S24. La macro conta sei cella verso dx e trova la X24 e compone il secondo range S24:X24(end)
5e) se trova una o più sestine uguali scrivere il risultato stesso rigo della sestina del 1° range ossia col Q(Q32)

Se quanto chiedo non sia possibile tramutarlo in codice ti prego di modificare solo il punto 5e).
la macro la userò manualmente e massicciamente per i collaudi dei cicli.

Mentre per avere tutto il resto ti chiederò aiuto con un altro quesito similare risolvendo, felicemente tutto, ugualmente.

Ringraziandoti come sempre mille e mille volte cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Verifica sestine con range auto configurante

Postdi Anthony47 » 03/07/22 09:35

Immagino che tu abbia voluto dirmi che se la macro trova piu' corrispondenze su uno stesso rigo di Blocco1 ne segnala solo una (la prima); immaginavo che non fosse un problema, vista la rarita' delle sestine. Ho modificato la fase di "Controlla se esiste" per individuare e riportare tutte le trovate. La parte modificata:
Codice: Seleziona tutto
'Controlla se esiste:
    For J = 1 To UBound(kList)
        mymatch = Application.Match(cKey, kList, False)
        If Not IsError(mymatch) Then
            oMatch(I, 1) = oMatch(I, 1) & Bk2.Cells(mymatch, 1).Address(0, 0) & " "
            kList(mymatch) = "zzz"
            cMat = cMat + 1
        Else
            Exit For
        End If
    Next J
Next I
'Scrive risultati:


Se vuoi scrivere a mano nel codice gli indirizzi, sostituisci i due Set Bk1/2 = Application.InputBox(etc etc) (che secondo me evitano di fare errori) con Set Bk1/2 = Range("XXX")

Le fasi 1a e 2b sono gia' nel codice; la fase 5e dovrebbe essere la modifica per individuare piu' corrispondenze.

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

Re: Verifica sestine con range auto configurante

Postdi ikwae » 03/07/22 11:53

Gentilissimo Anthony ho modificato come da te specificato e la macro adesso agisce come da richiesta.

Per la modifica del punteggio, dopo una serie di raffiche di errore ho trovato il rigo di codice giusto e
adesso segna a fine sestina un numero anziché il nome della cella (spero di aver modificato bene).

Il numero serve alla macro del conta.se per sapere quanti 2 o 3 o 4 o 5 ci sono in colonna.

Che dire dovrei essere contento ma ho un senso di angoscia provocato dalle ripetizioni
di modifica della macro che ti ho chiesto di fare facendoti lavorare oltre misura.

Ringraziandoti come sempre mille e mille volte per il tuo lavoro e, soprattutto, per la tua
“Santa Pazienza” cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Verifica sestine con range auto configurante":


Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti