Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

chiamiamola aiuto formazione comprensione macro

Ultimo Aggiornamento: 17/05/2023 11:53
Post: 96
Registrato il: 25/05/2015
Età: 53
Utente Junior
2007
OFFLINE
17/05/2023 04:36

Sub Nuova_fase_macro_3_sostituisci_con_D2()
' definizione del nome della macro
Sheets("D2").Select
'seleziona il foglio in cui opera la macro
Dim colStart As Integer, colEnd As Integer, rigaStart As Integer, rigaEnd As Long, i As Integer
' definisce le variabili colonna di inizio, fine, riga di inizio, fine e "i" e le loro proprietà
colStart = 2
'indica la colonna 2 cone nizio controllo
colEnd = 32
'indica la colonna 2 cone fine controllo
rigaStart = 10
'uguale per riga inizio
rigaEnd = 69
'e fine
For c = colStart To colEnd
'dice che c (che non è stata dichiarata prima) va da 2 a 32 ed è sia il verso che il range di controllo
For r = rigaStart To rigaEnd
'dice che r (che non è stata dichiarata prima) va da 10 a 69 ed è sia il verso che il range di controllo
If Cells(r, c) = "D" Then
'se le celle che equivalgono a c ed r cioè alla griglia da colonna 2 riga 10 a riga 69 colonna 32 contengono D e
If c > 2 Then
'se c è maggiore di 2 allora
k = 0
' k che compare ora dal nulla è uguale a 0
For i = 2 To c - 1
'questa non la capisco anzi da quì in poi è confuso
If Cells(r, i) = "D2" Then
k = 1
Exit For
End If
Next i
If k = 0 Then
Cells(r, c) = "D2"
GoTo salto
End If
Else
Cells(r, c) = "D2"
Exit For
End If
End If
Next r
salto:
Next c
End Sub

Mi è stata fornita in questo forum questa macro che uso nel mio foglio, che per me è molto complessa , ho aggiunto delle righe di commento che dicono cosa penso facciano tali righe , vorrei se qualcuno di voi ne ha voglia sapere se ho capito bene , dove sbaglio e perché e il significato e la funzione delle altre righe in modo da cominciare a comprendere e provare a modificarla come dico io, e poi se non riesco eventualmente chiedere aiuto. grazie
Post: 7.262
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
17/05/2023 07:51

Ciao Non hai dichiarato le variabili r-c-k

il K=0 è un flag cioè un controllo dichiaro prima che k=0 quendo eseguo un ciclo ed ammettendo che dovrei trovare un valore
questo è uno spezzone del tuo codice, meglio usare i rientri"Identatura", in questo modo riesci a capire in quale punto ti trovi e quale operazione sta effettuando la macro

If c > 2 Then 'se c è maggiore di 2 allora
    k = 0 ' k che compare ora dal nulla è uguale a 0
    'ho inserito il flag di controllo<<<<<<<<<<<<
    For i = 2 To c - 1  'questa non la capisco anzi da quì in poi è confuso
        'il c-1 conta a partire dalla colonna2=B fino alla colonna che è stata trovata nel 1° ciclo "For c = colStart To colEnd" meno 1
        If Cells(r, i) = "D2" Then
            k = 1'se il dato è stato trovato allora il flag diventa 1 ed esce dal ciclo
            Exit For
        End If
    Next i
    If k = 0 Then ' a questo punto se non è stato trovato K=0 allora la cella prende il valore di "D2"
        Cells(r, c) = "D2"
        GoTo salto
    End If
endif


non so se la spiegazione che ti ho dato sia stata esauriente, nel caso scrivi ciò che non hai compreso.

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 3.504
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
17/05/2023 11:53

Quella macro te l'ho fornita io in QUESTA discussione.

Se a suo tempo mi avessi chiesto i dettagli te li avrei forniti volentieri.

Comunque questa è la descrizione riga per riga di quanto fa quella macro, basata su quanto richiesto in prima istanza:
Richiesta:

Nel foglio che allego è presente una griglia con un turno rappresentato da lettere e sigle, nella prima colonna per motivi di privacy i nomi del personale sono sostituiti da numeri progressivi. Nel suddetto turno sono presenti molte lettere "D" , io vorrei che :
-la macro prendesse in esame ogni colonna singolarmente da sinistra a destra, sostituendo la prima "D" che trova con"D1" dovranno essere presenti alla fine dell'esecuzione di questo passaggio non più una "D1" per ogni riga e per ogni colonna che ovviamente contenga delle "D".



Saluti

Sub PrimaParte()
Dim colStart As Integer, colEnd As Integer, rigaStart As Integer, rigaEnd As Long, i As Integer
colStart = 2
colEnd = 32
rigaStart = 3
rigaEnd = 66
For c = colStart To colEnd ' per ogni colonna a partire da B a AF
    For r = rigaStart To rigaEnd ' per ogni riga a partire da 3 a 66
        If Cells(r, c) = "D" Then ' se la cella (r,c) contiene D
            If c > 2 Then ' e la colonna è maggiore di 2 (B)
                k = 0 ' variabile di controllo
                For i = 2 To c - 1 ' controllo in orizzontale se c'è un D1
                    If Cells(r, i) = "D1" Then
                        k = 1 ' pone la variabile di controllo=1
                        Exit For ' se trova un D1 esce dal controllo
                    End If
                Next i
                If k = 0 Then ' se la variabile di controllo è =0 (cioè se in orizzontale _
                                non ha trovato nessun D1
                    Cells(r, c) = "D1" ' allora mette D1 nella cella in esame
                    GoTo salto ' e salta alla prossima colonna
                End If
            Else ' se la cella (riga,colonna) NON contiene D
                Cells(r, c) = "D1" ' pone nella cella D1
                Exit For
            End If
        End If
    Next r
salto:
Next c
End Sub






[Modificato da dodo47 17/05/2023 11:55]
Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 10:25. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com