Condividi:        

EXCEL Macro imperfetta

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

EXCEL Macro imperfetta

Postdi Francesco53 » 14/06/12 18:40

Buona serata a tutto il Forum,
ho una difficoltà su una macro, probabilmente dipende dalla mancanza di un ciclo For.Next.
Allego file con spiegazione di ciò che volevo realizzare, se non chiaro attendo vostre domande.
http://www.mediafire.com/?yfl2q55oty5ylz5

Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: EXCEL Macro imperfetta

Postdi Flash30005 » 14/06/12 23:32

Ci sono cose rimaste oscure
1) Le tabelle In H2:L10 e N2:R10 (e successive) sono necessarie? (la prima è solo un duplicato dell'archivio, la seconda detrae il valore di B40 alla prima tabella).
se sì,
2) Il valore da detrarre è sempre in B40 o aumenta con le estrazioni, ad esempio B72?
3) le formule della tabella U2:Y10 già fanno quello che richiedi, quindi cosa ti occorre?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL Macro imperfetta

Postdi Francesco53 » 15/06/12 09:00

Buongiorno Flash,
1) le tabelle delle colonne H:L le ricopia la macro quando in colonna A rileva la presenza del numero 1, si possono
anche evitare di scrivere, è stato fatto solo per far vedere cosa succedeva, per poi andare avanti.
Le colonne N:R sono il risultato che dipende dalla differenza tra il numero della colonna B al fianco dell' 1 rilevato
e i numeri relativi alla tabella di colonna H:L. per cui nell'esempio postato, abbiamo che il primo 1 della colonna in A1
è corrisponde come numero 55, per cui i numeri da H2:L10, andrebbero sottratti al 55, come leggi in tabella U2:Y10.
e cosi per il secondo 1 in A14 a cui corrisponde in B14 il 52 e pertanto la tabella da H15:L23 dovrebbe sottrarre il 52
ad ogni numero rilevato. La macro che è nel foglio, purtroppo non riesco a farla lavorare per ogni tabella relativa al
numero corrispondente, ma come nel foglio postato, sottrae a tutte le tabelle l'ultimo numero rilevato e non i corrispondenti.
Inserisco la macro che ho rappezzato (presente nel foglio inviato) a cui penso manchi un blocco che ad ogni uno rilevato faccia
il calcolo per poi riprende l'analisi sino al successivo 1.
Codice: Seleziona tutto
Sub Ricerca()
Dim SP As Long
Application.ScreenUpdating = False
Application.Calculation = xlManual
Application.EnableEvents = False
NS = 1  '1° num uscito in colonna B
EU = 1  'uscita num.1 in colonna A
NR = 1
Range("H1:R100").Clear
ReDim EX(1000, 5)
ReDim US(1 To 90)
    For x = 1 To 50
        y = NS
            If Cells(x, y) = EU Then
            SP = Cells(x, y + NS)
            For RC = 1 To 9
                    For ZT = 1 To 5
                        EX(x + RC, ZT) = Cells(x + RC, 1 + ZT)
                    Next
            Next
            End If
    Next
For T = 1 To 50
    For COL = 1 To 5
        Cells(T, 7 + COL) = EX(T, COL)
        SOM = Cells(T, 7 + COL).Value
            If SOM > SP Then
                RIS = SOM - SP
                Cells(T, 13 + COL) = RIS
            End If
            If SOM < SP Then
                RIS = SOM + 90 - SP
                Cells(T, 13 + COL) = RIS
            End If
            If SOM = SP Or SOM = "" Then
                Cells(T, 13 + COL) = EX(T, COL)
            End If
    Next
Next
Range("A1").Select
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub


2) essendo un archivio la dimensione è superiore, solo per comodità ho inserito solo le prime 50 righe.
3) per evitare di avere un foglio pieno di formule come nelle colonne U:Y ho realizzato la macro.
Spero di essere riuscito a far capire cosa cerco di realizzare per evitare di inserire un mare di formule.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: EXCEL Macro imperfetta

Postdi Flash30005 » 15/06/12 09:43

Prova Questa macro
Codice: Seleziona tutto
Sub CreaTabelle()
Columns("N:Y").ClearContents
UR1 = Range("A" & Rows.Count).End(xlUp).Row
For RR1 = UR1 To 1 Step -1
    If Range("A" & RR1).Value = 1 Then
    RigaU = RR1
    ValU = Range("B" & RR1).Value
    GoTo EsciRR1
    End If
Next RR1
EsciRR1:
For RR1 = 1 To RigaU - 1
    If Range("A" & RR1).Value = 1 Then
    ValI = Range("B" & RR1).Value
        For NR = RR1 + 1 To RR1 + 9
            For NC = 2 To 6
            ValN = Cells(NR, NC).Value - ValU
            If ValN < 1 Then ValN = ValN + 90
            ValX = Cells(NR, NC).Value - ValI
            If ValX < 1 Then ValX = ValX + 90
                Cells(NR, NC + 12).Value = ValN
                Cells(NR, NC + 19).Value = ValX
            Next NC
        Next NR
    End If
Next RR1
End Sub

Ho evitato di ricopiare la tabella H2:L10 in quanto, come tu stesso hai detto, è inutile

Ciao

P.s. per velocizzare la macro puoi inserire le righe di codice che conosci, all'inizio macro
Codice: Seleziona tutto
Application.ScreenUpdating = False
Application.Calculation = xlManual

e le due righe alla fine per ripristinare calcolo e aggiorna schermo
Codice: Seleziona tutto
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL Macro imperfetta

Postdi Francesco53 » 15/06/12 10:01

Grazie Flash,
sembra tutto ok, farò ulteriori prove e se c'è qualche difficoltà ti farò sapere.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: EXCEL Macro imperfetta

Postdi Flash30005 » 15/06/12 11:04

Fai attenzione quando fai le prove perché ho trovato una discordanza tra la tua tabella e i risultati della macro
più precisamente in O10, la tua tabella riporta 3 mentre la macro calcola 90.
Penso che sia giusta la macro :D

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL Macro imperfetta

Postdi Francesco53 » 15/06/12 13:25

Ciao Flash,
le colonne da U a Y sono giuste, e sono quelle che mi servono, le colonne da N a R come giustamente
hai detto è inutile scriverle e perdere decimi di secondi. Ho dovuto modificare la macro in quanto non
teneva conto dell'ultimo caso valido e se analizzato, cercando sulle nove successive scriveva anche dove
non c'erano dati. Adesso è tutto ok, pubblico modifica nel caso qualche utente possa essere interessato.
Codice: Seleziona tutto
Sub CreaTabelle()
    Columns("N:Y").ClearContents
    UR1 = Range("A" & Rows.Count).End(xlUp).Row
    PF = Cells(1, 27) 'Estrazione scelta
    CP = Cells(1, 28) 'Colpi di ricerca
    For RR1 = UR1 To 1 Step -1
        If Range("A" & RR1).Value = PF Then 'colonna con numero estrazione
        RigaU = RR1
        ValU = Range("B" & RR1).Value       'colonna con 1 estratto
        GoTo EsciRR1
        End If
    Next RR1
EsciRR1:
    For RR2 = 1 To RigaU ' - 1
      If Range("A" & RR2).Value = PF Then   'colonna con numero estrazione
      ValI = Range("B" & RR1).Value         'colonna con 1 estratto
            For NR = RR2 + 1 To RR2 + CP
    If NR = UR1 + 1 Then
    GoTo EsciRR2
    End If
                For NC = 2 To 6             'colonne archivio
                   ValX = Cells(NR, NC).Value - ValI
                        If ValX < 1 Then ValX = ValX + 90
                           Cells(NR, NC + 19).Value = ValX
                Next NC
            Next NR
        End If
    Next RR2
EsciRR2:
End Sub

Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: EXCEL Macro imperfetta

Postdi Flash30005 » 15/06/12 16:52

Ma sbaglio o manca qualcosa?
Ora la macro scrive, la tabella che era nelle colonne N:R nelle colonne U:Y
e la tabella che occupava le colonne U:Y (con le formule)?
Francesco53 ha scritto:3) per evitare di avere un foglio pieno di formule come nelle colonne U:Y ho realizzato la macro.
(toglieva al numero estrazione in esame, il primo valore dell'ultima estrazione avente 1 nella colonna A: ValU)

:roll:

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL Macro imperfetta

Postdi Francesco53 » 15/06/12 17:54

Ciao Flash,
la tabella con le formule, l'avevo inserita per far veder il risultato finale che cercavo.
3) per evitare di avere un foglio pieno di formule come nelle colonne U:Y ho realizzato la macro.
Nella macro da te postata, ho tolto solo la stampa della tabella 1 da H a L escludendo queste righe:
Codice: Seleziona tutto
ValN = Cells(NR, NC).Value - ValU
            If ValN < 1 Then ValN = ValN + 90

In quanto il risultato cercato lo elaborava ValX, che è la sottrazione tra i numeri usciti successivamente
all'estratto della estrazione in esame (1,2,..,9,U).
ValU continua ad esistere come puoi vedere nella macro corretta, ho solo evitato la scrittura della prima tabella,
conservando la seconda ed eliminando quella dell'esempio creato con le formule.
Funziona benissimo e ti ringrazio, avrei anche altro da chiedere ma non voglio occupare lo spazio a discapito di altri.
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: EXCEL Macro imperfetta

Postdi Francesco53 » 15/06/12 18:06

Questo è il file dopo la modifica:
http://www.mediafire.com/?rndq712p1143r1w
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: EXCEL Macro imperfetta

Postdi Flash30005 » 15/06/12 19:30

Ecco! Adesso si! (hai i valori che evidenziavi con "Corretti" della ex tabella in U:Y)
la macro precedentemente postata invece forniva i valori della ex tabella N:R ed era dovuto ad un tuo errore durante la modifica della macro, infatti la riga
Codice: Seleziona tutto
      ValI = Range("B" & RR1).Value         'colonna con 1 estratto

è errata perché stai nel ciclo for next RR2 mentre "ValI" prende il valore di RR1 della routine precedente :D

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL Macro imperfetta":


Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti