Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Cambiare testo in formula con condizione

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Cambiare testo in formula con condizione

Postdi BG66 » 17/02/19 08:29

Buongiorno,
l'obiettivo è quello di modificare il testo della formula nel range P4:Q75 se il mese indicato in I21 è diverso da quello presente in I23.
Ho prima provato a sviluppare una mio script:
Codice: Seleziona tutto
Sub cambia_mese0()
Dim xFind As Range, xRep As Range, xRg As Range
On Error Resume Next
xRg = Range("P4:Q75") 'Cells
xFind = Range("I21")
xRep = Range("I23")
'If xRep <> xFind Then
If xFind = “False” Or xRep = “False” Then Exit Sub
If xRep <> xFind Then
xRg.Replace xFind, xRep, xlPart, xlByRows, False, False, False, False
End Sub

Risultato: :(

Poi ho provato (rinunciando al controllare se i mesi fossero differenti) ad adattare una macro di Anthony:
Codice: Seleziona tutto
Sub CambiaMese2()
        Dim fCell As Range, aForm As String, oPart As Variant, nPart As Variant
        Dim Ws As Worksheet
        '
        oPart = ("I23")
    If Len(oPart) = 0 Or oPart = False Then
        MsgBox ("Stringa non valida; la macro viene terminata")
        Exit Sub
    End If
    nPart = ("I21")
    If Len(oPart) = 0 Or oPart = False Then
        MsgBox ("Stringa non valida; la macro viene terminata")
        Exit Sub
    End If
        '
        Dim Rng As Range
        Set Rng = Range("P4:Q75")

        Application.DisplayAlerts = False
        Application.EnableEvents = False
               If IsNull(Rng.HasFormula) Or Rng.HasFormula Then   'MMM
                For Each fCell In Rng
                    aForm = fCell.Formula
                    If InStr(1, aForm, oPart, vbTextCompare) > 0 Then
                         aForm = Replace(aForm, oPart, nPart, , , vbTextCompare)
                        fCell.Formula = aForm
                    End If
                DoEvents
                Next fCell
            End If
        Application.EnableEvents = True
        Application.DisplayAlerts = True
        End Sub

Risultato: :(

Cosa....tra le tante cose... non ho capito!!
https://www.dropbox.com/s/farwvv0v937px7e/cambiaMese_forum.xlsm?dl=0
Grazie per l'aiuto.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 193
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Cambiare testo in formula con condizione

Postdi Anthony47 » 17/02/19 14:26

Allora, immagino che bisogna sostituire nelle formule il mese indicato in I23 con quello indicato in I21.
Potrebbe essere:
Codice: Seleziona tutto
Sub CambiaMese23()
Dim myRan As String, myC As Range, nForm As String, oMese As String
'
oMese = Range("I23")        '<<< Il vecchio mese (e' in I23, vero?)
myRan = "P4:Q75"
For Each myC In Range(myRan)
    If myC.HasFormula Then
        nForm = myC.Formula
        If InStr(1, nForm, oMese, vbTextCompare) > 0 Then
            myC.Formula = Replace(nForm, oMese, Range("I21").Value, , , vbTextCompare)
        End If
    End If
Next myC
End Sub


Volendo anche affrontare la domanda "Cosa non ho capito", segnalo, qua e là:
Uno
Codice: Seleziona tutto
On Error Resume Next

Ottimo modo per non capire dove qualcosa va storto


Due
Codice: Seleziona tutto
Dim xFind As Range, xRep As Range, xRg As Range
On Error Resume Next
xRg = Range("P4:Q75") 'Cells
xFind = Range("I21")
xRep = Range("I23")
Range e' un Object, non puoi usare xRg = Qualcosa; ma devi usare Set:
Codice: Seleziona tutto
Set xRg = Range("P4:Q75")


Tuttavia immagino che, nella logica del codice, sono le Dim di xFind e xRep errate, e avrebbero dovuto essere as String
Come pure probabilmente hai invertito xFind con xRep


Tre
Codice: Seleziona tutto
If xFind = “False” Or xRep = “False”…
L'uso delle "virgolette inglesi" (“ e ”) dà luogo a situazioni molto subdole; e comunque ricorda che le Virgolette (quelle normali) indicano una stringa, mentre tu probabilmente volevi usare la costante False
Codice: Seleziona tutto
If Qualcosa = False then



Quattro
Codice: Seleziona tutto
        Dim oPart As Variant
        '
        oPart = ("I23")
Questa istruzione imposta la variant oPart come stringa e le assegna come valore la stringa "I23"; probabilmente volevi far riferimento invece al contenuto della cella I23, nel qual caso avresti dovuto usare
Codice: Seleziona tutto
oPart = Range("I23").Value


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cambiare testo in formula con condizione

Postdi BG66 » 17/02/19 15:29

[RISOLTO]

Ciao Anthony,
grazie per tutto (soluzione e tirate d'orecchie)

Alla prossima.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 193
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Cambiare testo in formula con condizione":


Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti