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