Incrocio di numeri



  • Incrocio di numeri
    di Pasquale (utente non iscritto) data: 05/07/2013 10:55:08

    Buongiorno

    avrei bisogno di una macro che mi ricerchi due numeri e mi trovi i corrispondenti su una tabella....per esempio

    01 02 03 04 05 per esmpio 1 20 corrispondenti 5 16
    06 07 08 09 10
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25 altro esempio 21 68 corrispondenti 23 66
    26 27 28 29 30
    31 32 33 34 35
    36 37 38 39 40
    41 42 43 44 45
    46 47 48 49 50
    51 52 53 54 55
    56 57 58 59 60
    61 62 63 64 65
    66 67 68 69 70
    71 72 73 74 75
    76 77 78 79 80
    81 82 83 84 85
    86 87 88 89 90

    riepilogando io ho 2 numeri in due celle 1 e 20 la macro mi dovrebbe dare i relativi corrispondenti sulla tabella e cioè 5 e 16 riportandomeli su altre due celle.
    Inoltre se sono sulla stessa linea non dovrebbe darmi alcun risultato......per esempio 47 e 48 oppure 81 e 85, etc.
    La mia tabella è di 5 celle in orizzontale per 18 in verticale

    Grazie



  • di Textomb data: 05/07/2013 13:33:46

    scusami Pasquale.
    Ma io non ho capito bene.
    Anzi. Direi che non ho capito niente.
    Potresti fare qualche altro esempio?




  • di Vecchio Frac data: 05/07/2013 13:37:21

    Anche a me sfugge un criterio logico, che deve esserci ^_^
    Perchè 1, 20 --> 5, 16 ? perchè 21, 68 --> 23, 66 ? il criterio è la distanza, in posizioni relative sulla riga, tra i primi due numeri?





  • di Pasquale (utente non iscritto) data: 05/07/2013 13:57:34

    ....infatti non è molto logico.......ma spero che ci sia un modo che i due numeri da ricercare incrociandoli mi diano i reltivi corrispondenti nella posizione opposta
    01 02 03 04 05
    16 17 18 19 20
    nell'esempio da me riportato come vedi sulla riga dell'1 in corrispondenza del 20 si trova il 5 e sulla rila del 20 in corrispondenza dell'1 si trova il 16.....naturalmente ho saltato le altre righe per rendere più evidente il tipo di incrocio che io intendo!!!!!! Ovviamente se i due numeri da ricercare si trovano sulla stessa linea in orrizzontale o in verticale l'operazione non si può fare!!!
    spero di essermi spiegato!!!!

    come sempre grazie di tutto!!!!



  • di totygno71 (utente non iscritto) data: 05/07/2013 14:09:51

    Prova il file... nn so se ho capito il ragionamento...



  • di Pasquale (utente non iscritto) data: 05/07/2013 14:22:45

    Grazie Totygno71!!!!

    E' perfetto........se posso chiederti solo un'ultima cosa......quando inserisco i due numeri non c'è un modo che mi faccia automaticamente il calcolo senza premere "CALCOLA"?

    Se non è possibile Grazie lo stesso, era cmq quello che cercavo!!!!!!

    Grazie ancora



  • di totygno71 (utente non iscritto) data: 05/07/2013 14:28:46

    Si puoi sfruttare l'evento change se intercetta il cambiamento sulle celle G3:H3_
    Provaci



  • di Pasquale (utente non iscritto) data: 05/07/2013 14:35:08

    Scusami ancora

    siccome ho un'altra tabella uguale ma con numeri diversi, ti volevo chiedere come posso modificare la macro!!! I numeri sono i seguenti:

    01 32 63 04 35
    06 37 68 09 40
    11 42 73 14 45
    16 47 78 19 50
    21 52 83 24 55
    26 57 88 29 60
    31 62 03 34 65
    36 67 08 39 70
    41 72 13 44 75
    46 77 18 49 80
    51 82 23 54 85
    56 87 28 59 90
    61 02 33 64 05
    66 07 38 69 10
    71 12 43 74 15
    76 17 48 79 20
    81 22 53 84 25
    86 27 58 89 30


    Saluti



  • di totygno71 (utente non iscritto) data: 05/07/2013 14:38:11

    puoi usare lo stesso
    basta che la tabella inizi da A1!



  • di Pasquale (utente non iscritto) data: 05/07/2013 14:45:33

    ...ho provato.....ma i numeri non corrispondono.........e, abusando della tua bontà, se potevi spiegarmi meglio l'evento change.......scusa ma sulle macro non ho molta praticità!!!!!!!

    Grazie



  • di totygno71 (utente non iscritto) data: 05/07/2013 14:56:24

    Invece si funziona lo stesso...
    prova il file 2



  • di totygno71 (utente non iscritto) data: 05/07/2013 14:58:12

    L'evento "change" posto sul foglio1 attiva la macro se intercetta un cambiamento nelle celle desiderate_



  • di Vecchio Frac data: 05/07/2013 16:04:49

    Bravo totygno, ho visto il file (a parte il "caccolo finito" ^_^).
    Codice inguardabile, ma funziona a puntino, riproducendo la logica richiesta :)





  • di Vecchio Frac data: 05/07/2013 16:21:06

    @pasquale
    inserisci il codice che segue nel codice del foglio per intercettare il cambiamento delle celle g3 e h3 e quindi scatenare la macro che si occupa del rialcolo:

    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [g3,h3]) Is Nothing Then Exit Sub
    Call caccola_vfrac
    End Sub


    E incolla la mia versione nel modulo1; è più bella, più concisa, più elegante, più limpida, più semplice, ecc. ecc. LOOL ^_^
     
    Sub caccola_vfrac()
    Dim table As Range, first As Range, second As Range
    
        Set table = [a1:e18]        '<-- range che contiene i numeri, da A a E
        
        Set first = table.Find([g3], lookat:=xlWhole)
        Set second = table.Find([h3], lookat:=xlWhole)
        
        If first Is Nothing Or second Is Nothing Then
            MsgBox "Caccolo fallito_ Inserisci 2 dumeri compresi tra 1 e 90! O_o"
            Exit Sub
        End If
        
        If first.Row = second.Row Or first.Column = second.Column Then
            MsgBox " I numeri scelti devono essere su righe/colonne differenti"
            Exit Sub
        End If
        
        [j3] = Cells(second.Row, first.Column)
        [k3] = Cells(first.Row, second.Column)
    
    End Sub






  • di Pasquale (utente non iscritto) data: 05/07/2013 16:21:36

    Grazie Totygno......perfetto!!!!

    Mi potresti spiegare meglio l'evento change......nel senso se mi potevi indicare passo passo, nel limite del possibile, come inserirlo visto che non so da dove devo partire.......scusa la mia ignoranza!!!!!!!!

    Un grosso GRAZIE!!!!!!!!!!!!!



  • di Vecchio Frac data: 05/07/2013 16:23:31

    :'-(
    il mio codice non piace a nessuno ?

    ^_^
    per l'evento Change ti ho già risposto io un attimo fa.
    Apri con Alt-F11 l'editor del codice, Ctrl-R per la finestra progetti, doppio clic sul "foglio1" ed ecco la sezione codice del foglio. Incollaci il codice che ti ho già mostrato e sei a posto.





  • di Vecchio Frac data: 05/07/2013 16:25:18

    Ovviamente intendevo questo codice, per l'evento Change del foglio.
     
    Option Explicit 
    
    Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, [g3,h3]) Is Nothing Then Exit Sub 
    Call caccola_vfrac     '<-- se usi la mia; altrimenti metti il nome della routine di totygno: call caccola :)
    End Sub 






  • di Pasquale (utente non iscritto) data: 05/07/2013 16:31:40

    PERFETTTTTTTTTTTTTTTOOOOOOOOOOOOOOOOOOOOOOO!!!!!!!!!

    Tutto funziona alla grande!!!!!

    Incredibile la velocità di risposta che ho ricevuto!!!!!

    UN GRANDISSSSSIMOOOOOO GRAZIEEEEEEEE!!!!!!!!!!!!!!!!!!!!!!!!



  • di totygno71 (utente non iscritto) data: 05/07/2013 16:36:42

    @ Pasquale
    Prego è stato un piascere....

    @VF
    Sei solo invidioso... il mio codice piasce assai piu del tuo.... ^_^



  • di totygno71 (utente non iscritto) data: 05/07/2013 16:42:08

    @VF

    P.S.
    Il difficile non era scivere il codicillo... ma capire cosa voleva ottenere l'amico Pasquale.... Io ci riusciiii e tu NO. U_U
    P.S.S Da oggi per me sarai Mr "Find" ^_^



  • di Vecchio Frac data: 05/07/2013 16:48:16

    @totygno
    Vero, all'inizio...
    Solo dopo che ha fatto la precisazione su MIA richiesta ci ho capito qualcosa ^_^
    poi sai com'è... io lavoro anche... non ho il tempo che hai tu... :)





  • di Pasquale (utente non iscritto) data: 05/07/2013 16:51:06

    .........LO SO CHE STO APPROFITTANDO DELLA VOSTRA BONTA'...........ma io ve lo chiedo lo stesso.............potreste spiegare, visto che non è un listato molto lungo, con parole un po più comprensibili per noi miseri mortali........in poche parole capire ogni riga cosa fa!!!!!!
    Se sto chiedendo troppo grazie lo stesso!!!!!!!



  • di totygno71 (utente non iscritto) data: 05/07/2013 17:01:36

    @VF
    Il caro pasquale dice a te se puoi spiegare a noi "poveri mortali" come hai taroccato il mio codicillo...
    "ATTENZIONE!" Protei chiederti i diritti d'autore! U_U (faccina da sapientino)



  • di Textomb (utente non iscritto) data: 05/07/2013 19:52:56

    Ragazzi siete troppo forti.

    @Pasquale
    ti commento il codice di VF perchè il file di Totygno non l'ho scaricato e quindi non so cosa ci sia dentro.

    Il buon VF inizialmente tipicizza le variabili table, first e second. Cosa di fondamentale importanza.
    Va fatto sempre prima di iniziare un progetto.
    Sostanzialemte imposta le variabili di tipo Range.

    Set table = [a1:e18] '<-- range che contiene i numeri, da A a E
    Ovviamente dopo averle impostate, deve anche dargli un indirizzo preciso.
    Quindi assegna alla variabile table l'intero range dei valori "a1:e18"

    Set first = table.Find([g3], lookat:=xlWhole)
    Set second = table.Find([h3], lookat:=xlWhole)
    Alle varibili first e second assegna il range che viene trovato nella tabella dei valori "a1:e18" in base ai valori scritti sulle celle g3 e h3.
    importante è l'istruzione xlWhole. Poichè infatti cerca l'intero valore e non una parte.

    If first Is Nothing Or second Is Nothing Then
    MsgBox "Caccolo fallito_ Inserisci 2 dumeri compresi tra 1 e 90! O_o"
    Exit Sub
    End If
    Il primo If intercetta un possibile errore e, dopo il relativo messaggio di avviso, esce dalla routine.

    If first.Row = second.Row Or first.Column = second.Column Then
    MsgBox " I numeri scelti devono essere su righe/colonne differenti"
    Exit Sub
    End If
    Così anche il secondo if


    [j3] = Cells(second.Row, first.Column)
    [k3] = Cells(first.Row, second.Column)
    Se riesce a sfuggire dagli errori, allora vuol dire che ha trovato i valori che servono.
    Quindi li riporta nelle celle j3 e k3.
    Per far questo approfitta delle proprietà Row e Column riferite ai Range first e second.

    Ovviamente detto così potrebbe risultare poco chiaro.
    Così mi vendico sul fatto che quando ho letto il tuo quesito non avevo capito nulla.



  • di Vecchio Frac data: 05/07/2013 20:11:29

    Grazie Textomb ^_^
    Adesso scaricati il file di totygno e guarda la sua interpretazione del fatto, confronta i due codici e dai un voto :)





  • di totygno71 (utente non iscritto) data: 05/07/2013 20:46:43

    -_-'



  • di Pasquale (utente non iscritto) data: 06/07/2013 00:40:48

    Grazie Textomb

    sto cercando di capirci qualcosa con le macro e la tua spiegazione è abbastanza chiara!!!!

    Rinnovo i miei complimenti per le vostre competenze e non comune disponibilità verso coloro che hanno tanto da imparare!!!!

    Ancora un grazie @ vecchio frac e totygno71!!!!!



  • di Pasquale (utente non iscritto) data: 06/07/2013 11:27:18

    Buongiorno,

    ho notato che quando io vado a dare alla cella g3 e h3 l'istruzione che è uguale al contenuto di un'altra cella, l'evento change non funziona più automaticamente ma se si da la funzione esegui lo fa e quindi non funziona più in maniera automatica!!!! Come si può ovviare a questo incoveniente???

    Grazie



  • di Vecchio Frac data: 06/07/2013 20:21:08

    cit. " quando io vado a dare alla cella g3 e h3 l'istruzione che è uguale al contenuto di un'altra cella"
    ---> Cioè? quale "istruzione" ? tu devi solo inserire dei numeri, presenti nella tabella dei numeri esistenti.






  • di Pasquale (utente non iscritto) data: 07/07/2013 01:38:42

    Ciao,
    grazie per aver risposto................
    mi spiego meglio ......sul foglio excel ho altre tabelle che sono automatizzate anch'esse, per cui io alla cella g3 ho digitato l'istruzione =AR3 ed a h3 =AS3. A questo punto i numeri cambiano ugualmente ma non mi da più i corrispondenti della tabella......!!! Riassumendo nelle caselle g3 e h3 non scrivo più i numeri manualmente ma me li riporta da altre due caselle ed a questo punto non funziona più l'evento change!!!!



  • di Vecchio Frac data: 07/07/2013 08:43:11

    cit. " nelle caselle g3 e h3 non scrivo più i numeri manualmente ... ed a questo punto non funziona più l'evento change"
    ---> no, infatti Change è l'evento che gestisce le modifiche di cella fatte manualmente dall'utente.
    Non ti resta che lanciare manualmente la macro, trasformandola da evento Change a una sub qualunque.
    Se queste "altre due caselle" vengono modificate a mano, puoi intercettare l'evento Change di queste e lanciare il codice da lì.





  • di pasquale (utente non iscritto) data: 08/07/2013 12:25:03

    OK!!!! l'avevo immaginato!!!!

    Grazie ancora per la risposta!!!!

    Saluti