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
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".
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