Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Posizioni precedentemente occupate

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

Posizioni precedentemente occupate

Postdi Statix » 10/06/11 20:35

Ciao a tutti,
mi servirebbe una formula o una macro,
avendo una serie di estrazioni, come immagine a sinistra, in un'altra tabella (destra)vorrei
calcolare la posizione di ogni nuovo numero estratto, la posizione che occupava in precedenza ,
nell'esempio ho evidenziato il numero 66 in giallo,il numero è uscito in 3 posizione(prima tabella) ma il precedente era in 2a posizione quindi nella nuova tabella al 3a posizione metto 2,il 90 in arancione uscito in 5a posizione, nella nuova tabella metto in 5a posizione 1,cioè la posizione che occupava precedentemente.
e così per tutte le altre estrazioni,
un numero non ancora uscito in precedenza prende la stessa posizione di uscita.


Immagine
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Sponsor
 

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 10/06/11 22:29

Ehm....
non avrei voluto rispondere perché ho dei forti dubbi per alcuni controsensi :roll:
Dici di inserire la posizione di appartenenza della precedente estrazione
questo significa iniziare la scansione dall'ultima estrazione e retrocedere
però fai l'esempio che mostra l'inizio dalla prima estrazione a scendere (opposto alla richiesta sopra citata)

Una macro che esegue una delle due richieste la si può costruire, ma quale? :undecided:
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Statix » 10/06/11 22:33

Ciao Avatar3,
le estrazioni partono dall'alto a scendere,
quella postata non è completa ,
è solo una parte completata per far capire l'esempio.
partendo dalla prima riga delle estrazioni , i risultati devono essere come nella colonna delle posizioni
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 10/06/11 22:36

Ok fornisci almeno il riferimento riga e colonna prima estrazione e dove vorresti la tabella "risultati"

(a intuito alla fine avrai un "casino" di numeri ma rispetto il tuo desiderio/quesito)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Statix » 10/06/11 22:43

le estrazioni C4:G1000
risultati in L4:P1000
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 00:08

Prova qualcosa del genere
Codice: Seleziona tutto
Sub CopilaTab()
UR = Range("C" & Rows.Count).End(xlUp).Row
Range("L4:P" & UR).ClearContents

Dim VettN(5) As Integer
Dim VettN1(5) As Integer
For CC = 3 To 7
    For RR = UR To 4 Step -1
        VettN(CC - 2) = Cells(RR, CC).Value
    For RR1 = RR - 1 To 3 Step -1
    For CC1 = 3 To 7
        VettN1(CC1 - 2) = Cells(RR1, CC1).Value
    If VettN(CC - 2) = VettN1(CC1 - 2) Then
    Cells(RR, CC + 9).Value = CC1 - 2
    Else
    If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2

    End If
    Next CC1
    Next RR1
    Next RR
Next CC
End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 08:37

Ciao Avatar3,
provato non va bene,allego foto
in rosso sono quelli sbagliati,
ti faccio un altro esempio nella riga 2 ,il numero 3 è uscito in 5a posizione,
nella riga 3 esce di nuovo il numero 3 in 2a posizione,quindi in questa posizione va scritto 5 cioè la posizione che occupava precentemente il numero 3,spero di essere stato chiaro,
PS.Volevo chiederti se potevi darmi ulteriori spiegazioni della macro nel caso decida di spostare i range per future esigenze.


Immagine
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 09:17

Ciao Pietro, temo che a sbagliare sei tu. A me risultano corretti!

Immagine

Saluti
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 09:39

Lucio Peruggini ha scritto:Ciao Pietro, temo che a sbagliare sei tu. A me risultano corretti!

Immagine

Saluti


Dimenticavo l'altra immagine

Immagine
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 09:42

Ciao Lucio,
non va,
vedi il numero 85,non viene rilevato

Immagine
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 09:54

Ci siamo sovrapposti.

Certo che viene rilevato l'85, guarda immagine ottenuta dalla macro:

L'85 esce nell'estrazione 7441 in terza posizione e rilevando la precedente in quinta.

Se può interessarti, questa è l'immagine con schema definitivo sulle varie posizioni dalla 7440 all'ultima in archivio.

Immagine

Ciao
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 10:04

Ho capito cosa intendevi.

Effettivamente, il terzo 85 estrazione 7443 uscito in seconda posizione, dovrebbe calcolare l'85 precedente uscito nella 7441 in terza posizione; invece dà la quinta. Ok, c'è errore!

Saluti
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 11:14

L'errore era dovuto al proseguimento della macro anche dopo averlo trovato pertanto in caso di due o più numeri uguali forniva sempre la posizione dell'ultima uscita.
Ho inserito un salto provate questa (non ho i vostri archivi e le prove le sto facendo solo du una dozzina di estrazioni (primo esempio di Statix)
Codice: Seleziona tutto
Sub CopilaTab()
UR = Range("C" & Rows.Count).End(xlUp).Row
Range("L4:P" & UR).ClearContents

Dim VettN(5) As Integer
Dim VettN1(5) As Integer
For CC = 3 To 7
    For RR = UR To 4 Step -1
        VettN(CC - 2) = Cells(RR, CC).Value
    For RR1 = RR - 1 To 3 Step -1
    For CC1 = 3 To 7
        VettN1(CC1 - 2) = Cells(RR1, CC1).Value
    If VettN(CC - 2) = VettN1(CC1 - 2) Then
    Cells(RR, CC + 9).Value = CC1 - 2
    GoTo saltaRR
    Else
    If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2
    End If
    Next CC1
    Next RR1
saltaRR:
    Next RR
Next CC

End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 11:26

Mi sembra OK! Ma attendo conferma anche da Pietro che ha inserito la richiesta.
Aggiungo che è anche più veloce rispetto a prima.
Ottimo lavoro, grazie Avatar.
Saluti
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 11:30

Ciao Avatar3,
è perfetta,
volevo chiederti se potevi darmi alcune spiegazioni riguardo la macro ,
nell'eventualità volessi spostare i range.
grazie
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 11:58

Certo!
come avrai visto dichiaro due vettori all'inizio della macro
ogni vettore è composta da 5 valori (i cinque numeri di ogni estrazione)
CC incece sono le colonne da 3 a 7 (C, G)
VettN assume Il valore della colonna C ma essendo il primo vettore numerico 1 devi detrarre 2 alla colonna 3 (3-2=1) e (7-2=5)
RR sono le righe (iniziano da 4 fino all'ultima riga UR)
però scansiono le estrazioni partendo dall'ultima a salire (con step-1)
Stessa cosa per VettN1
che inizia dalla riga RR-1 alla riga 3 che è vuota
In caso di corrispondenza
Codice: Seleziona tutto
Cells(RR, CC + 9).Value = CC1 - 2

Inserirà il nella colonna CC+9 quindi in caso di CC = Colonna C il valore sarà inserito nella colonna L a proseguire il numero della colonna CC1-2 quindi da 1 a 5
Altrimenti
Codice: Seleziona tutto
 Else
    If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2

e se la cella è vuota inserirà il numero della colonna CC-2 quindi da 1 a 5

Mentre scrivevo questo post mi sono anche accorto di un'incongruenza :oops:
ma che non cambia il risultato :)
Si devono scansionare le colonne di ogni riga quindi andrebbero invertiti i for...next di righe e colonne della prima parte
in questa maniera
Codice: Seleziona tutto
Sub CopilaTab2()
UR = Range("C" & Rows.Count).End(xlUp).Row
Range("L4:P" & UR).ClearContents

Dim VettN(5) As Integer
Dim VettN1(5) As Integer
    For RR = UR To 4 Step -1   '<<<<<<<
For CC = 3 To 7   '<<<<<<<

        VettN(CC - 2) = Cells(RR, CC).Value
    For RR1 = RR - 1 To 3 Step -1
    For CC1 = 3 To 7
        VettN1(CC1 - 2) = Cells(RR1, CC1).Value
    If VettN(CC - 2) = VettN1(CC1 - 2) Then
    Cells(RR, CC + 9).Value = CC1 - 2
    GoTo saltaRR
    Else
    If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2
    End If
    Next CC1
    Next RR1
saltaRR:

Next CC  '<<<
    Next RR   '<<<<
End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 12:43

ok,va benissimo,
ecco cioè che volevo da sempre,
quando si posta una macro o una formula,sarebbe opportuno spiegarne anche come è stata costruita,
in questo modo si riesce ad imparare quel qualcosa in più,che ci aiuta a crescere nel nostro piccolo,
grazie infinite. ;) ;)
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 16:43

Per maggior comprensione e per come è stata realizzata alla fine la macro (rispetto ad un ipotesi di progetto inziale)
i vettori in questo caso non occorrono ma servono solo delle variabili che vengono assunte al variare della colonna CC e CC1
quindi la macro potrebbe essere realizzata così, e avere lo stesso funzionamento
Codice: Seleziona tutto
Sub CopilaTab2()
UR = Range("C" & Rows.Count).End(xlUp).Row
Range("L4:P" & UR).ClearContents

Dim VN As Integer '<<<< variabile
Dim VN1 As Integer '<<<<< variabile1
For RR = UR To 4 Step -1
For CC = 3 To 7

        VN = Cells(RR, CC).Value
    For RR1 = RR - 1 To 3 Step -1
    For CC1 = 3 To 7
        VN1 = Cells(RR1, CC1).Value
    If VN = VN1 Then
    Cells(RR, CC + 9).Value = CC1 - 2
    GoTo saltaRR
    Else
    If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2
    End If
    Next CC1
    Next RR1
saltaRR:

Next CC
    Next RR
End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 17:53

Ok,provata anche questa macro,
però mi sembra leggermente più lentina della prima,
le estrazioni sono 900
ho inserito all'inizio della macro
Application.Calculation = xlManual
e alla fine
Application.Calculation = xlAutomatic,
così va da scheggia. :) :)
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 18:07

Hai fatto bene ad inserire quel codice (nei miei test non lo inserisco poi a volte mi dimentico di metterlo nel progetto finale)
c'è anche ScreenUpdate false e true
Codice: Seleziona tutto
Application.ScreenUpdating = False
Application.Calculation = xlManual
'...
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic


Molto strano che con il vettore sia più veloce perché in effetti è solo utilizzato come variabile
Ma se hai fatto prove con molte righe e ti risulta così, ci sarà sicuramente un motivo
Se vuoi avere i tempi effettivi
inserisci all'inizio della macro
Start = timer
...
...
e alla fine
Msgbox Timer -Start (avrai la differenza effettiva in secondi)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Posizioni precedentemente occupate":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti

cron