Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

[RISOLTO] macro modifica cella in base alle precedenti

  • Messaggi
  • OFFLINE
    fabio70m
    Post: 61
    Registrato il: 25/05/2015
    Età: 53
    Utente Junior
    2007
    00 25/05/2022 13:40
    salve , questo forum è una miniera d'oro in quanto a menti che ti danno aiuto su idee e problemi che io non sono in grado di risolvere.
    ovviamente vi ringrazio per la disponibilità.

    ora vi pongo un nuovo quesito, io vorrei una macro che quando trova la lettera H in una cella, se in una delle due celle che la precedono è contenuta una delle seguenti scritte (m2,p2,m3,p3) , modifichi in automatico la H in H2 se M2 o P2, e H3 se M3 o P3, in alternativa deve restare H e basta .


    Nel file che allego, ho colorato le celle per praticità, quindi la macro deve rilevare le H, controllare se nelle due celle precedenti della stessa riga e anche nella riga sottostante è presente una di queste diciture "M2,P2,M3,P3", e di conseguenza trasformare la H in H2 o H3, altrimenti la H rimane tale.

    mi sono ripetuto credo, nel tentativo di essere più preciso, senza riuscirci immagino.
    grazie
  • OFFLINE
    by sal
    Post: 6.812
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 25/05/2022 15:42
    Ciao Fabio per la verità non si capisce granchè cosa vuoi ottenere.

    da quello che ho capito che sono sigle per turni o forse per tipo di lavorazioni

    la prima cosa perche non crei una convalida da applicare a tutte le celle dei turni, in questo modo non ce pericolo che sbagli tra maiuscolo e minuscolo, inoltre le scelte sono obbligate non puoi inserire solo H se non è previsto dalla convalida.

    perche sono su 2 righe i turni?

    ora passiamo al problema in alcune celle è inserito solo la "H" cosa deve diventare "H2" e basta?
    lo stesso dicasi per solo la M e solo la P di conceguenza devono diventare rispettivamente "M2" e "P2"

    inoltre perche dici H3-M3-P3 non devono solo diventare H2

    fai sapere, Ciao By Sal (8-D
    [Modificato da by sal 25/05/2022 15:45]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    duccio.73
    Post: 124
    Registrato il: 27/12/2016
    Città: SIENA
    Età: 50
    Utente Junior
    Office 2019/Office 365
    00 25/05/2022 16:10
    Ciao Fabio,
    dici di controllare le due celle precedenti ma prima della H c'e' sempre "-" quindi è necessario controllare?

    se le premesse sono corrette una macro brutale potrebbe essere quella sotto

    cambia_cella
    Sub cambia_celle()
    
    For r = 7 To 13 Step 2
       For c = 5 To 30
       If Cells(r, c).Value = "H" Then
             If (Cells(r, c - 2).Value = "M2" Or Cells(r, c - 2).Value = "P2" Or Cells(r + 1, c - 2).Value = "M2" Or Cells(r + 1, c - 2).Value = "P2") Then
                 Cells(r, c).Value = "H2"
                 ElseIf (Cells(r, c - 2).Value = "M3" Or Cells(r, c - 2).Value = "P3" Or Cells(r + 1, c - 2).Value = "M3" Or Cells(r + 1, c - 2).Value = "P3") Then
                 Cells(r, c).Value = "H3"
             End If
       c = c + 2
       End If
       Next c
    Next r
       
    End Sub
    
       
    End Sub
    ---
    pensa bene a quello che cerchi, allega un file di esempio, prova il registratore di macro, imparerai e potresti già avere la soluzione
  • OFFLINE
    fabio70m
    Post: 61
    Registrato il: 25/05/2015
    Età: 53
    Utente Junior
    2007
    00 02/06/2022 13:37
    Re:
    duccio.73, 25/05/2022 16:10:

    Ciao Fabio,
    dici di controllare le due celle precedenti ma prima della H c'e' sempre "-" quindi è necessario controllare?

    se le premesse sono corrette una macro brutale potrebbe essere quella sotto

    cambia_cella
    Sub cambia_celle()
    
    For r = 7 To 13 Step 2
       For c = 5 To 30
       If Cells(r, c).Value = "H" Then
             If (Cells(r, c - 2).Value = "M2" Or Cells(r, c - 2).Value = "P2" Or Cells(r + 1, c - 2).Value = "M2" Or Cells(r + 1, c - 2).Value = "P2") Then
                 Cells(r, c).Value = "H2"
                 ElseIf (Cells(r, c - 2).Value = "M3" Or Cells(r, c - 2).Value = "P3" Or Cells(r + 1, c - 2).Value = "M3" Or Cells(r + 1, c - 2).Value = "P3") Then
                 Cells(r, c).Value = "H3"
             End If
       c = c + 2
       End If
       Next c
    Next r
    
    Ciao , la formula funziona, ma quello che non capisco è come funziona e quali sono le linee che individuano le celle su cui lavorare.
    grazie 
       
    End Sub
    
       
    End Sub




  • OFFLINE
    duccio.73
    Post: 128
    Registrato il: 27/12/2016
    Città: SIENA
    Età: 50
    Utente Junior
    Office 2019/Office 365
    00 03/06/2022 16:31
    Ciao Fabio,

    r è il numero di riga, c è quello delle colonne

    ho iniziato il conteggio dalla riga 7 fino alla riga 13 a step di 2 come nel tuo esempio e dalla colonna 5 perché ci sarà l'intestazione, 2 celle da controllare e una con il trattino fino alla colonna 30, da cambiare con il numero massimo di colonne da verificare per la lettera H.

    A questo punto vengono vengono controllate le celle per riga per vedere se contengono la lettera H o meno, in caso negativo la macro passa alla successiva cella.
    In caso positivo controlla che le cella sulla stessa riga e due colonne prima (Cells(r, c - 2).Value) o quelle sulla riga successiva (r+1) e sempre due colonne prima (Cells(r+1, c - 2).Value) contengano P2 o M2, in caso positivo cambia il valore della cella in H2 altrimenti controlla se le stesse celle contengono M3 o P3 e in caso positivo cambiano la cella in H3.

    alla fine del controllo, se ha trovato la lettera H salta di due colonne perché a destra ci sarà come minimo ci sarà la casella con M o P e il trattino

    Io ho usato questo metodo per velocizzare l'esecuzione della macro perché mi pareva inutile controllare celle con un risultato sicuramente falso, però se cambia la struttura del file puoi cambiare facilmente righe e colonne ed eventuali salti

    Se ti serve aiuto chiedi pure, se la questione è risolta avvisa gli amministratori in modo da chiudere la discussione
    ---
    pensa bene a quello che cerchi, allega un file di esempio, prova il registratore di macro, imparerai e potresti già avere la soluzione
  • OFFLINE
    fabio70m
    Post: 62
    Registrato il: 25/05/2015
    Età: 53
    Utente Junior
    2007
    00 05/06/2022 05:31
    Ti ringrazio moltissimo, la spiegazione mi è servita moltissimo così ho corretto una macro che non mi funzionava.
    come faccio a segnalare agli amministratori che la richiesta è chiusa?
    ciao
  • OFFLINE
    fabio70m
    Post: 63
    Registrato il: 25/05/2015
    Età: 53
    Utente Junior
    2007
    00 15/06/2022 10:40
    Re:
    fabio70m, 05/06/2022 05:31:

    Ti ringrazio moltissimo, la spiegazione mi è servita moltissimo così ho corretto una macro che non mi funzionava.
    come faccio a segnalare agli amministratori che la richiesta è chiusa?
    ciao



    Ciao non riesco a capire perche oggi apro il foglio di lavoro e la macro non funziona mi da errore di runtime 1004 e facendo il debug mi si evidenzia di giallo la seconda riga che inizia con if.
    potete aiutarmi a capire perchè?
    grazie

  • OFFLINE
    fabio70m
    Post: 64
    Registrato il: 25/05/2015
    Età: 53
    Utente Junior
    2007
    00 15/06/2022 10:40
    Re:
    fabio70m, 05/06/2022 05:31:

    Ti ringrazio moltissimo, la spiegazione mi è servita moltissimo così ho corretto una macro che non mi funzionava.
    come faccio a segnalare agli amministratori che la richiesta è chiusa?
    ciao



    Ciao non riesco a capire perche oggi apro il foglio di lavoro e la macro non funziona mi da errore di runtime 1004 e facendo il debug mi si evidenzia di giallo la seconda riga che inizia con if.
    potete aiutarmi a capire perchè?
    grazie

  • OFFLINE
    duccio.73
    Post: 131
    Registrato il: 27/12/2016
    Città: SIENA
    Età: 50
    Utente Junior
    Office 2019/Office 365
    00 15/06/2022 12:02
    Hai modificato qualcosa?
    prova a caricare il file per vedere il problema, ci sono diversi motivi per l'errore 1004 e non è possibile sapere a cosa è dovuto
    ---
    pensa bene a quello che cerchi, allega un file di esempio, prova il registratore di macro, imparerai e potresti già avere la soluzione