Come inserire simbolo automaticamente in base al valore della cella (VBA)

Anonimo
2024-03-21T16:49:18+00:00

Volevo sapere come si può impostare con l'uso del VBA su Excel che, quando modifico il valore di una cella, rispetto il valore di un’altra cella collegata, si inserisca in alto a dx della cella un simbolo (ad esempio l’asterisco * oppure una lettera) per indicare che quel valore è stato modificato. Ad esempio, io nella cella B3 utilizzo la seguente formula nella formattazione condizionale: =B3<>PROPOSTE!B3. 

Come posso inserire nella cella B3 (se il valore è diverso dalla cella B3 del foglio “proposte”) * in alto a dx della cella? Grazie dell’aiuto.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2024-03-29T10:23:16+00:00

O mamma mia ... questa cosa sembra più complicata del quadro RU che ho predisposto, e ancora non completato, di una dichiarazione di una società piena di crediti d'imposta :)

Prova a scaricare questo file: File Esempio modificato

La risposta è stata utile?

0 commenti Nessun commento

60 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2024-03-28T12:40:03+00:00

    la ringrazio; l'unica cosa... se nella cella C4 del foglio preso in considerazio (che comunque si chiama "SCRUTINIO"), inserisco 6 e nella cella C4 del foglio "PROPOSTE" c'è 5, il testo della C4 in SCRUTINIO diventa 6 c *.... l'unica cosa: mi servirebbe che quel C e * deve comparire all'apice della cella (non come contenuto)... io tra l'altro ho impostato una formattazione condizionale: se il valore della cella è pari o maggiore di 6 deve essere riempimento verde, se minore di 6 il riempimento rosso. Se il testo è 6 c * non funziona poi la formattazione condizionale e comunque non voglio che compaia come testo nella cella ma se si puù inserire come apice... in alto a dx o in basso a dx... può andare bene anche che la C compare in alto a dx e * in basso a dx... forse in questo modo riesce meglio.. non so....

    poi se io nella cella C4 di "PROPOSTE" ho 5 e nella cella C4 di "SCRUTINIO" ho 4, non deve comparire solo 4 ma 4 con apice C (senza * che si deve inserire solo quando il valore inizialmente <6 diventa =6 o >6)

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2024-03-28T11:30:09+00:00

    Volendo si potrebbe gestire anche l'ipotesi di inserimento multiplo di dati con un ciclo che verifiche se ogni cella del Target si intersechi con le celle dell'intervallo interessato alla verifica.

    In questo modo si potrebbe evitare di bloccare l'esecuzione con "If Target.Count > 1 Then Exit Sub" che può portare all'errore.

    Se, invece, si volesse gestire solo una cella alla volta si potrebbe confrontare Target(1) con l'intervallo.

    In questo modo la procedura non viene mai bloccata ma eseguita sempre per la prima cella dell'intervallo eventualmente modificato contemporaneamente.

    Il problema è capire cosa desidera l'OP :-)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Gianfranco55 25,270 Punti di reputazione Moderatore volontario
    2024-03-28T11:18:21+00:00

    ciao

    fatto solo che bene

    io di vba ne capisco ben poco.

    ora la studio ma domani l'ho già dimenticata😀

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2024-03-28T10:57:10+00:00

    Dovrebbe essere sufficiente aggiungere queste istruzioni (evidenziate in rosso):

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim valoreCellaAttiva As Variant

    Dim valoreCellaFoglio2 As Variant

    On Error Resume Next

    If Target.Count > 1 Then Exit Sub

    Application.EnableEvents = False

    If Not Intersect(Target, Range("B3:AX20")) Is Nothing Then

      valoreCellaAttiva = Target.Value 
    
      valoreCellaFoglio2 = Sheets("PROPOSTE").Range(Target.Address).Value 
    
         If valoreCellaFoglio2 &gt;= 6 And valoreCellaAttiva &lt;&gt; 7 Then 
    
            With Target 
    
               .Value = valoreCellaAttiva & " c" 
    
               .Characters(Len(valoreCellaAttiva) + 1, Len(" c")).Font.Superscript = True 
    
            End With 
    
         ElseIf valoreCellaAttiva &gt; valoreCellaFoglio2 And valoreCellaFoglio2 &lt; 6 Then 
    
            With Target 
    
               .Value = valoreCellaAttiva & " c\*" 
    
               .Characters(Len(valoreCellaAttiva) + 1, Len(" c\*")).Font.Superscript = True 
    
            End With 
    
         End If 
    

    End If

    Application.EnableEvents = True

    End Sub

    He eliminato le dichiarazioni delle variabili "foglio1" e "Foglio2" in quanto non utilizzate.

    Ho inserito un On Error Resume Next per evitare l'errore di overflow nel caso le celle modificate siano di un numero tale da mandare in errore di memoria Excel.

    Edit: quei caratteri aggiunti, volendo, potrebbero essere formattati in modo diverso dal resto del testo (es. grassetto, rosso, diversa dimensione carattere.

    La risposta è stata utile?

    0 commenti Nessun commento