È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

[RISOLTO] macro modifica cella in base alle precedenti

Ultimo Aggiornamento: 15/06/2022 12:02
Post: 61
Registrato il: 25/05/2015
Età: 53
Utente Junior
2007
OFFLINE
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
Post: 6.812
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 124
Registrato il: 27/12/2016
Città: SIENA
Età: 50
Utente Junior
Office 2019/Office 365
OFFLINE
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
Post: 61
Registrato il: 25/05/2015
Età: 53
Utente Junior
2007
OFFLINE
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




Post: 128
Registrato il: 27/12/2016
Città: SIENA
Età: 50
Utente Junior
Office 2019/Office 365
OFFLINE
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
Post: 62
Registrato il: 25/05/2015
Età: 53
Utente Junior
2007
OFFLINE
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
Post: 63
Registrato il: 25/05/2015
Età: 53
Utente Junior
2007
OFFLINE
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

Post: 64
Registrato il: 25/05/2015
Età: 53
Utente Junior
2007
OFFLINE
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

Post: 131
Registrato il: 27/12/2016
Città: SIENA
Età: 50
Utente Junior
Office 2019/Office 365
OFFLINE
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
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]
inviare email da excell con thunderbird (2 messaggi, agg.: 06/11/2015 14:38)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 20:51. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com