Condividi:        

EXCEL , Correlazione Max

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

Re: EXCEL , aiuto formula

Postdi Anthony47 » 13/06/09 20:40

Non hai mai applicato le modifiche date il 9-6 mattina presto (vedi viewtopic.php?f=26&t=80654&p=459887#p459331), tra l' altro accompagnate da un messaggio privato che non hai ancora letto :evil: :
Codice: Seleziona tutto
For I = range(OrigA).row -1 To LastR - Altz - OrigA.Row + 1
For J = range(OrigB).row -1 To LastR - Altz - OrigA.Row + 1


Sono ancora attuali e necessarie, ma con le modifiche successive il For J deve essere
Codice: Seleziona tutto
For J = range(OrigB).row -1 To LastJ

Inoltre va modificata ulteriormente il calcolo di LastJ, da If JSi Then LastJ = LastR - Altz - OrigA.Row + 1 Else LastJ = 0 '<<<<ADD a
Codice: Seleziona tutto
If JSi Then LastJ = LastR - Altz - OrigA.Row + 1 Else LastJ = range(OrigB).row -1 '<<<<ADD & Modif

Per quanto riguarda lo 0 in M34, errore mio; non FreCells.Value = I: FreCells.Offset(0, 1) = J ma
Codice: Seleziona tutto
FreCells.Value = I: FreCells.Offset(0, 1) = ScDue.value '


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

Sponsor
 

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 14/06/09 10:25

Le modifiche del 9/6 le ho applicate , ho creato un paticcio ora ti spigo :

quando mi dici di fare delle modifiche o di togliere qualcosa spesso creo una copia del foglio , che mi serve come riserva in caso che per errore mio combini un guaio irrimediabile , devo avere commesso uno sbaglio dovuto a uno scambio di foglio.

Questa è la macro modificata secondo le tue indicazioni che cerco sempre di seguire diligentemente e il più presto possibile , ma ricordati che tu nel programmare sei anni luce più avanti rispetto a me , certe cose che ti sembrano una ovvietà per me possono apparire come grosse montagne ;)

Ti ringrazio ancora per la tua pazienza.

ecco la macro spero sia modificata in maniera corretta

Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A2") 'Prima origine dati
Set OrigB = Range("B2") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti


JSi = Val(Range("J1").Value) > 0 '<<<<ADD; J1 e' la cella flag

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row

If JSi Then LastJ = LastR - Altz - OrigA.Row + 1 Else LastJ = Range(OrigB).Row - 1 '<<<<ADD & Modif

For I = Range(OrigA).Row - 1 To LastR - Altz - OrigA.Row + 1

ScUno.Value = I
OrigA.Offset(ScUno, 0).Select


For J = Range(OrigB).Row - 1 To LastJ

If JSi Then ScDue.Value = J '<<<<MOD


'OrigB.Offset(ScDue, 0).Select

If IsError(CorCel.Value) Then PLM = 0 Else PLM = CorCel.Value
If PLM > CurCor Then


CurCor = CorCel.Value

FreCells.Value = I: FreCells.Offset(0, 1) = ScDue.Value '

FreCells.Offset(0, 2) = CurCor

End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub



attualmente mi da questo errore :

Immagine

il debug indica questa riga
For I = Range(OrigA).Row - 1 To LastR - Altz - OrigA.Row + 1

Immagine


ciao Anthony
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 14/06/09 23:44

Grrrrr..
Con le definizioni date NON avrei dovuto scrivere (ad es) Range(OrigA).Row MA OrigA.Row; vanno corrette queste istruzioni (ti do' la versione da correggere, modifica la parte in rosso come nell' esempio sopra)
For I = Range(OrigA).Row - 1 To LastR - Altz - OrigA.Row + 1
For J = Range(OrigB).Row - 1 To LastJ
If JSi Then LastJ = LastR - Altz - OrigA.Row + 1 Else LastJ = Range(OrigB).Row - 1


Che sia la volta buona?

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

Re: EXCEL , Correlazione Max

Postdi Alessandro999 » 15/06/09 15:56

Ciao Anthony ,ho eseguito le tue ultime istruzioni :

Ho interpretato che dove c'era RangeOrig(b).Row-1 questa doveva essere cambiata in OrigB.Row e RangeOrigA(a) in OrigA.Row ,,,,,, dico giusto :?: ( l'esempio lo hai fatto con OrigA )

dunque se ho eseguto bene l'indicazioni siamo a questo punto ...........

ora la macro è come segue .

Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A2") 'Prima origine dati
Set OrigB = Range("B2") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti


JSi = Val(Range("J1").Value) > 0 '<<<<ADD; J1 e' la cella flag

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row

If JSi Then LastJ = LastR - Altz - OrigA.Row + 1 Else LastJ = OrigB.Row - 1 '<<<<ADD & Modif

For I = OrigA.Row - 1 To LastR - Altz - OrigA.Row + 1

ScUno.Value = I
OrigA.Offset(ScUno, 0).Select


For J = OrigB.Row - 1 To LastJ

If JSi Then ScDue.Value = J '<<<<MOD


'OrigB.Offset(ScDue, 0).Select

If IsError(CorCel.Value) Then PLM = 0 Else PLM = CorCel.Value
If PLM > CurCor Then


CurCor = CorCel.Value

FreCells.Value = I: FreCells.Offset(0, 1) = ScDue.Value '

FreCells.Offset(0, 2) = CurCor

End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub


Ho fatto alcune prove è sembra funzionare bene :) sei proprio un fenomeno :idea: .

A questo punto il più dovrebbe essere fatto !!!

Per lavorare quei dati come si fa a farglieli riportare in una colonna apposita , mi spiego :

Nell' esempio in figura sopra la macro ha trovato che la sequenza numerica fissa di riferimento partente in B26 composta da 4 elementi come specificato in cella G1 ha una correlazione di 0,99 con una sequenza di pari lunghezza ( cioè 4 elementi consecutivi ) trovati in colonna A a partire dalla cella A10 .

Ora questa sequenza come si fa a fargliela scrivere diciamo in una colonna , e prendiamo ad esempio la colonna X

in parole povere fargli riportare per esempio in questo caso A25 , A26 , A27 ossia la sequenza che da 0,99 in colonna X :?:


Immagine


Grazie 10Mila volte del tuo aiuto , e dando un' occhiata generale a questo forum quando posso devo dire che è grandioso :D
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , Correlazione Max

Postdi Anthony47 » 16/06/09 01:54

Ah... finalmente.

Per la nuova domanda, perdona ma reputo la duplicazione di dati una cosa inutile.
I dati sono presenti a partire dall' offset verticale valorizzato in cella L34, chiunque puo' prelevarli dalla loro posizione originale usando appunto la funzione Scarto.
Oppure nelle celle dove vuoi duplicare, inserisci appunto una formula basata su Scarto, partendo da quella usata nella formula di CORRELA e aumentando poi l' offset verticale ad ogni riga.

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

Re: EXCEL , Correlazione Max

Postdi Alessandro999 » 17/06/09 13:08

spero di cavarmela :lol:


Immagine
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "EXCEL , Correlazione Max":


Chi c’è in linea

Visitano il forum: Nessuno e 52 ospiti