Condividi:        

modifica macro,sembra facile ma....

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

modifica macro,sembra facile ma....

Postdi papiriof » 30/12/22 19:02

Ho questa macro che mi fece anni fa Anthony:

Codice: Seleziona tutto
Sub PapiRowSel()
Dim i As Long, myMatch, cRow As Long, x As Long
x = ActiveCell.Row
cRow = Selection.Cells(1, 1).Row
Range("I12:AG12").ClearContents
For i = 9 To (9 + 24)
    Set lFor = Range(Cells(cRow + 1, i), Cells(cRow + 1, i).End(xlDown))  '<<<<<<<<<
    myMatch = Application.Match(Cells(x, i).Value, lFor, False)
    If IsError(myMatch) Then myMatch = " " & lFor.Rows.Count
    Cells(12, i).Value = " " & Cells(cRow, i).Value & ":" & myMatch   
Next i
End Sub

Pensavo bastasse cambiare così "End(xlUp)" per ottenere il contrario di quello che fa adesso con End(xlDown)
Adesso mi posiziono su una riga (qui x) le colonne sono 33 mi controlla a partire dalla colonna 9 fino alla 33 si trovano dei numeri
che la macro mi scrive nel Range("I12:AG12") i relativi ritardi se avvenuti nella medesima colonna . se non si sono ripetuti mi scrive
un ritardo che coincide con l'ultima cella.
Ora vorrei invece fare il contrario cioè sempre posizionandomi su una riga mi dicesse quando (in precedenza)quei numeri della riga
si sono riprodotti nella stessa colonna.
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Sponsor
 

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 01/01/23 17:00

Forse hai semplificato troppo...

Comunque una macro non si capisce che cosa fa senza conoscere il layout dei dati su cui lavora; va da sè che e' altrettanto impossibile (forse anche di piu') capire quale e' il contrario.
Insomma dovresti allegare i dati da elaborare, a quel punto probabilmente tutta la richiesta sara' comprensibile.

Ti aspettiamo...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: modifica macro,sembra facile ma....

Postdi papiriof » 02/01/23 10:27

Scusa Anthony, un mese fa mi si è scassato il vecchio portatile ,il display tutto di un verde e la cerniera scassata , in teoria funzionava ancora ma il costo per ripararlo non valeva la pena.
Detto ciò ho un portatile nuovo che non riesco ad organizzarlo , per dirne una : volevo mandare un 'immagine e segueguendo le istruzioni
di :"Come fare per.." trovato paint quello nuovo non sono riuscitoa neanche a trasportare l'immagine su questa risposta :(
Così, in attesa che mi scafi con questo nuovo computer tento un'altra spiegazione.
Nella stessa cartella dove è contenuta la macro di cui al punto 1 è contenuta anche questa macro d'evento(penso si dica così):
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lFor As Object, myMatch'
Set lFor = Range(Target.Cells(2, 1), Target.Cells(2, 1).End(xlDown))
myMatch = Application.Match(Target.Value, lFor, False)
If IsError(myMatch) Then myMatch = ">" & lFor.Rows.Count
MsgBox ("Ritardo del " & Target.Value & ": " & myMatch)
Cancel = True
End Sub
Cosa fa questa macro? E presto detto : mi metto ad es. sulla cella "L 2000" (la Colonna L contiene numeri da L13 fino alla riga 2100 ) in questa cella diciamo c'è il numero 9 faccio doppio doppio clic su di essa ("L 2000" ) ela macro va a scandagliare se partendo dal 2000
e andando verso il basso 20001,2002,2003.....2100 trova il n° 9 se per prima lo trova al 2016 a nche se successivamente ne trova un altri sulla stessa colonna "L" mi apparirà un messaggio "MsgBox ("Ritardo del " & Target.Value & ": " & myMatch)" se non lo trova mi apparirà con ritardo 100
Questa macro te l'ho chiesta prima e successivamente ti ho chiesto quella di cui al n°1 che sostanzialmente fa la stessa cosa non solo su una colonna ma su 25 .Quello che chiedo (parlo adesso del queesito 1)è che partendo sempre da L2000 mi faccia l'inverso cioè selo trova il9 al L1999 9:1 se lo trova aL1995 "9: 5" se lo trova a L1900 mi scriverà "9:100"
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 02/01/23 20:02

Provo a vedere se questa descrizione si mappa con uno dei file che avevi condiviso in passato e ti aggiorno
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: modifica macro,sembra facile ma....

Postdi papiriof » 07/01/23 08:17

Anthony47 ha scritto:Provo a vedere se questa descrizione si mappa con uno dei file che avevi condiviso in passato e ti aggiorno

Trovato niente??
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 08/01/23 01:08

Mah, ho trovato un file di fine settembre 2020 intitolato Xforum25.xlsm, dove pero' il ritardo veniva calcolato per il numero in riga 3, a partire dalla riga selezionata fino a file elenco.
Prendendo per buona la tua descrizione (cioe' calcolare il ritardo "all'indietro" del numero presente sulla riga selezionata) potrebbe funzionare questa macro:
Codice: Seleziona tutto
Sub PapiRowSelRev()
Dim I As Long, myMatch, cRow As Long
Dim lFor As Range
'
cRow = Selection.Cells(1, 1).Row
Range("I2:AG2").ClearContents
For I = 9 To (9 + 24)
    Set lFor = Range(Cells(3, I), Cells(cRow - 1, I))
    myMatch = Evaluate("MAX(IF(" & lFor.Address & "=" & Cells(cRow, I).Value & ",ROW(" & lFor.Address & "),""""))")
    If myMatch = 0 Then
        myMatch = ">" & lFor.Rows.Count
    Else
        myMatch = cRow - myMatch - 1
    End If
'    Debug.Print Cells(1, I).Address(0, 0), "Rit " & Cells(cRow, I).Value & ": " & myMatch
    Cells(2, I).Value = "Rit " & Cells(cRow, I).Value & ": " & myMatch
Next I
End Sub

Ma se non fosse quel che cerchi allora serve necessariamente almeno una "immagine" dei tuoi dati.
Per questo non cercare Paint, ma "Strumento di cattura"; poi con questa utility e l'opzione Nuovo catturi un rettangolo di dati su Excel, lo salvi come immagine, la carichi su https://postimages.org/ e usi il link che ti viene restituito.

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

Re: modifica macro,sembra facile ma....

Postdi papiriof » 08/01/23 10:45

gentile sign. Anthony
la macro ultima che mi ha fatto purtroppo non corrisponde a quanto desiderato , colpa mia perchè non riesco a spiegarmi comunquesono riuscito aindividuare la mia richiesta originaria , qui allego l'indirizzo:
viewtopic.php?f=26&t=111379
Se si legge quanto scritto negli ultimi 4 punti della discussione si capisce quello che volevo allora tanto è vero che lei concordava dopo che io ero riuscito a correggere (miracolo!!!)la sua ultima macro.
La macro cosi corretta e con i suoi riferimenti finali trovava (dopo che mi posizionavo su una riga qualsiasi) 25 risultati cioè i numeri contenuti nelle 25 colonne oggetto della ricerca con i rispettivi ritardi (meglio dire ripetizioni) qualora trovati nella stessa colonna
Esempio: il P2275 (riga di partenza) trovo il num 61 in P2278 (riga più recente) trovo ancora il 61 la macro mi da i risultati sempre nell'intervallo I12:AG25 e in P12 scrive 61:3 cioè il 61 si è ripetuto 3 estrazioni DOPO (nelle estrazioni successive).
E allora , cosa chiedo ? Semplicemente ,frermo restando tuttao quanto detto sopra voglio sapere quante estrazioni PRIMA nella stessa colonna è uscito il 61 cosi come tutti i numeri della riga 2275 .
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 08/01/23 12:02

Quello che conta sono i dati, devi riuscire ad allegare almeno una immagine; e con "Strumento di cattura" (come ho scritto nel msg di ieri sera) non dovrebbe essere difficile seguendo le istruzioni contenute qui: viewtopic.php?f=26&t=103893&p=605488#p605488

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

Re: modifica macro,sembra facile ma....

Postdi papiriof » 14/01/23 18:13

Immaginespero sia la volta buona
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi papiriof » 14/01/23 18:20

Immagine
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi papiriof » 14/01/23 19:18

Finalmente ci sono riuscito!Allora questa immagine non è altro che il ricavato della macro di cui dicevo all'inizio della discussione; cosa fa ? Mi ssono messo sulla RIGA 2275 , non ha importanza la cella, una qualsiasi della predetta RIGA !! a questo punto ho cliccato sul pulsante a cui avevo aggangiato la predetta macro e quello che si vede è il risultato .la macro mi fa vedere la prima ripetizione nella stessa colonna limitatamente ai numeri situati da I 2275: AG 2275 con i loro ritardi nelle ripetizioni successive nell'intervallo I 12: AG 12.
Ho evidenziato il num 61 perchè si ripete dopo 3 estraz. nella stessa colonna ed è più facile capire quello che intendo . Esempio:Se mi mettessi in una cella qualsiasi della RIGA 2278 questa volta mi aspetterei che la nuova macro mi mettesse tutti i numeri limitatamente ai numeri situati da I 2278: AG 2278 con i loro ritardi nelle ripetizioni precedenti nell'intervallo I 12: AG 12. In questo caso il 61 verrebbe :" 61: 3"
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 15/01/23 20:38

Prova con questa:
Codice: Seleziona tutto
Sub PapiRowBack()
Dim i As Long, myMatch, cRow As Long, x As Long
Dim rOut As Long
'
rOut = 2                                '<<< La riga dove si riporta il risultato
x = ActiveCell.Row
cRow = Selection.Cells(1, 1).Row
Cells(rOut, 9).Resize(1, 25).ClearContents
If x > rOut Then
    For i = 9 To (9 + 24)
        Set lFor = Range(Cells(cRow - 1, i), Cells(rOut + 1, i))
        myMatch = Application.Match(Cells(x, i).Value, lFor, False)
        If IsError(myMatch) Then
            myMatch = ">" & lFor.Rows.Count
        Else
            myMatch = cRow - myMatch - rOut
        End If
        Cells(rOut, i).Value = "'" & Cells(cRow, i).Value & ":" & myMatch
    Next i
Else
    MsgBox ("Selezione errata; riga " & x)
End If
End Sub

La riga marcata <<< va personalizzata: io ho usato 2 ma nel tuo caso dovrebbe essere 12

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

Re: modifica macro,sembra facile ma....

Postdi papiriof » 15/01/23 23:16

Anthony47 ha scritto:Prova con questa:
Codice: Seleziona tutto
Sub PapiRowBack()
Dim i As Long, myMatch, cRow As Long, x As Long
Dim rOut As Long
'
rOut = 2                                '<<< La riga dove si riporta il risultato
x = ActiveCell.Row
cRow = Selection.Cells(1, 1).Row
Cells(rOut, 9).Resize(1, 25).ClearContents
If x > rOut Then
    For i = 9 To (9 + 24)
        Set lFor = Range(Cells(cRow - 1, i), Cells(rOut + 1, i))
        myMatch = Application.Match(Cells(x, i).Value, lFor, False)
        If IsError(myMatch) Then
            myMatch = ">" & lFor.Rows.Count
        Else
            myMatch = cRow - myMatch - rOut
        End If
        Cells(rOut, i).Value = "'" & Cells(cRow, i).Value & ":" & myMatch
    Next i
Else
    MsgBox ("Selezione errata; riga " & x)
End If
End Sub

La riga marcata <<< va personalizzata: io ho usato 2 ma nel tuo caso dovrebbe essere 12

Ciao

non ci siamo :cry: si la riga l'ho cambiata 12 invece di 2 (in 2 ho messo questa formula per farmi dare il ritardo pulito "=SE(STRINGA.ESTRAI(P12;4;1)=":";STRINGA.ESTRAI(P12;5;3);STRINGA.ESTRAI(P12;4;3))in quanto nella riga 12 il risultato , a causa del poco spazio è più difficile da individuare.Comunque con questa ultima macro i risultati non sono quelli attesi.
Posso soltanto ribadire quello che ho detto sopra "Ho evidenziato il num 61 perchè si ripete dopo 3 estraz. nella stessa colonna ed è più facile capire quello che intendo . Esempio:Se mi mettessi in una cella qualsiasi della RIGA 2278 questa volta mi aspetterei che la nuova macro mi mettesse tutti i numeri limitatamente ai numeri situati da I 2278: AG 2278 con i loro ritardi nelle ripetizioni precedenti nell'intervallo I 12: AG 12. In questo caso il 61 verrebbe :" 61: 3" " invece con l'ultima macro il risultato mi da " 61: 184" che non ha senso .
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 16/01/23 10:27

Eh he, quando ho scritto il codice avevo in mente una prestazione futura di Excel :D

Questa l'ho pure collaudata:
Codice: Seleziona tutto
Sub PapiRowBack()
Dim I As Long, myMatch, cRow As Long, x As Long, lFor
Dim rOut As Long
'
rOut = 2                                '<<< La riga dove si riporta il risultato
x = ActiveCell.Row
cRow = Selection.Cells(1, 1).Row
Cells(rOut, 9).Resize(1, 25).ClearContents
If x > rOut Then
    For I = 9 To (9 + 24)
        Set lFor = Range(Cells(cRow - 1, I), Cells(rOut + 1, I))
        myMatch = Evaluate("Max(If(" & lFor.Address & "=" & Cells(x, I).Value & ",Row(" & lFor.Address & "),""""))")
        If myMatch = 0 Then
            myMatch = ">" & lFor.Rows.Count
        Else
            myMatch = cRow - myMatch
        End If
        Cells(rOut, I).Value = "'" & Cells(cRow, I).Value & ":" & myMatch
    Next I
Else
    MsgBox ("Selezione errata; riga " & x)
End If
End Sub

Ri-prova...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: modifica macro,sembra facile ma....

Postdi papiriof » 16/01/23 11:00

forse ho almeno ho capito come viene fuori quel 184 presunto ritardo invece di 3 che dovrebbe venire.
Primo il ritardo (o meglio la ripetizione del 61) segnalato nel post precedente non è 184 ma 1848
<Secondo non prevedevo ritardi di ripetizione di 4 cifre in effetti non ci sono possono esserci ritardi di riproposizione di poco superiori a 1000 , quindi devo correggere la formula nella riga 2 (che riprende le ultime cifre della riga 3 cioè le cifre che vengono do i due punti e un vuoto!
Terzo partendo dal num 61 come da es andando indietro il primo 61 lo troviamo dopo di " 3 " ! risultato che voglio;
Quarto in effetti quel 1848 corrisponde al PRIMO 61 che trova partendo dal rigo 13 ma contando le estrazioni che vanno dal n° 2278 al 2277. 2276 2275......... 1848 .
1 2 3 ......... 1848 tovata la ragione di come si comporta la ma cro spero di riuscire ...
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 16/01/23 11:35

Probabilmente non hai ancora letto la risposta che ho dato prima...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: modifica macro,sembra facile ma....

Postdi papiriof » 16/01/23 14:10

Anthony47 ha scritto:Probabilmente non hai ancora letto la risposta che ho dato prima...

Grazie Anthony, adesso si!!!!! giusato :) :) :)
ti posso chiedere quale è stata la cosa che ti ha messo sulla giusta via;A parte l'immagine sono stato utile in qualche modo?
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: modifica macro,sembra facile ma....

Postdi Anthony47 » 16/01/23 15:13

ti posso chiedere quale è stata la cosa che ti ha messo sulla giusta via
Mi ha messo sulla giusta via l'averci dormito su :D :D

A parte l'immagine sono stato utile in qualche modo?
Abbiamo perso tanto tempo a capire quale era il tuo formato dati; la prossima volta insistero' di piu' per averlo subito. E, se ricrearlo richiede "piu' di 2 (due) minuti", insistero' per avere un file gia' compilato (come del resto hai fatto sempre in passato).
Alla prossima!
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "modifica macro,sembra facile ma....":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti