Risolto Excel 2016 - due celle affiancate se scrivi la prima la seconda diventa zero e viceversa

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
ciao a tutti, a mezzo di formula matematica come si potrebbe dare una regola condizionale a due celle vicine A1, B1 che:

se compilo A1, B1 è zero, mentre se compilo B1, A1 è zero.. e se all'inizio compilo B1, A1 deve essere zero..

Grazie mille per i suggerimenti

mu
 

cromagno

Excel/VBA Expert
Supermoderatore
9 Agosto 2015
7.697
245
41
Sardegna
2019 (32 bit)
412
Ciao,
non puoi farlo con formule classiche, in una cella puoi mettere una formula O scrivere un valore manualmente.
Bisogna usare il VBA sfruttando l'evento Change del foglio e il metodo Intersect.

Puoi leggere questo tutorial di ges @ges ( cappello_saluta ) dove vengono usati sia l'evento che il metodo per inserire un orario ma è abbastanza semplice adattarlo alla tua situazione:
 
Ultima modifica:

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
ti ringrazio per la risposta, all'inizio le celle sono tutte e due zero sia A1 che B1... solo che ci deve essere la condizione se A1 è piena B1 deve essere zero, e viceversa..

grazie ancora
 

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
Gentili tutti, se utilizzassi VBA all'apertura del file, mi darebbe qualche avviso di warning? ho visto l'esempio suggerito, ma non riesco ad implementarlo nel mio caso, perché questo onChange lo devo fare su le colonne A1 e B1.. A2 e B2.. cioè tutte le coppie delle colonne A e B. grazie
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
37.883
2.445
67
Napoli
Office 365
1.208
M @maria uni

Per limitare l'esecuzione della macro ad uno specifico intervallo (le colonne A e B) va utilizzato il metodo Intersect.

Prova questa macro da inserire nel modulo del foglio interessato (non modulo standard)

Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:B")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
Application.EnableEvents = False
    If Target.Column = 1 Then
        If Target.Value <> "" Then
        Target.Offset(0, 1).Value = 0
        End If
        Else
        Target.Offset(0, -1).Value = 0
    End If
  Application.EnableEvents = True
End If
End Sub
 

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
sembra non funzionare
M @maria uni

Per limitare l'esecuzione della macro ad uno specifico intervallo (le colonne A e B) va utilizzato il metodo Intersect.

Prova questa macro da inserire nel modulo del foglio interessato (non modulo standard)

Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:B")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
Application.EnableEvents = False
    If Target.Column = 1 Then
        If Target.Value <> "" Then
        Target.Offset(0, 1).Value = 0
        End If
        Else
        Target.Offset(0, -1).Value = 0
    End If
  Application.EnableEvents = True
End If
End Sub
dove sbaglio?
allego pdf screenshot dove ho inserito il codice che gentilmente hai postato e allego file.

grazie mille
 

Allegati

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
37.883
2.445
67
Napoli
Office 365
1.208
Il file che hai allegato è un .xlsx quindi non ha codice al suo interno.

Come potrebbe funzionare?

Ti ho detto che la macro va messa nel modulo del foglio interessato non in quello di QuestaCartelladiLavoro come hai fatto (almeno come sembra dall'immagine)
 
Ultima modifica:

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
Il file che hai allegato è un .xlsx quindi non ha codice al suo interno.

Come potrebbe funzionare?

Ti ho detto che la macro va messa nel modulo del foglio interessato non in quello di QuestaCartelladiLavoro come hai fatto (almeno come sembra dall'immagine)
come si procede? ho cliccato su "sviluppo"->Visual Basic -> foglio 1 ho inserito il codice.. come deve essere salvato il file?
grazie ancora
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
37.883
2.445
67
Napoli
Office 365
1.208
Nell'editor di VBA in alto a sinistra fai doppio clic su Foglio1 ed a destra incolli il codice.

Torna al foglio e funzionerà.

Poi salvi il foglio con estensione .xlsm cioè cartella di lavoro con macro.
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
37.883
2.445
67
Napoli
Office 365
1.208
Beh di certo il pc non esplode.

Basta abilitare le macro.

P.S. Ma mi spieghi nella pratica una macro del genere a che serve?
 

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
Nell'editor di VBA in alto a sinistra fai doppio clic su Foglio1 ed a destra incolli il codice.

Torna al foglio e funzionerà.

Poi salvi il foglio con estensione .xlsm cioè cartella di lavoro con macro.
Non capisco, perché non funziona, ho cambiato le colonne da A:B a B:C

inoltre per rispondere a cosa serve, nel campo PRO moltiplica il valore di A2*1+B2/100 o A2*1+C2/100 a seconda se è stato inserito il valore VAL1 (cella B) o il valore VAL2 (cella C).. per questo l'utente deve scegliere o B o C.. esiste un altro modo?

grazie mille
 

Allegati

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
37.883
2.445
67
Napoli
Office 365
1.208
Non funziona perchè se si cambiano le carte in tavola nel senso come modo di operare la macro non va più bene.

Prima si parlava delle colonne A e B quindi l'istruzione

Visual Basic:
 If Target.Column = 1 Then
era corretta.

Ma ora tu parli delle colonne B e C

quindi la precedente istruzione come va modificata?

Lascio a te l'onere di scoprire come.

Ti dico solo che il target è la cella che stiamo modificando che è un oggetto di tipo Range con tutte le proprietà e metodi di tale tipo di oggetto (per oggetto intendo "oggetto" di Excel).

Quando si riceve un codice bisogna capire quello che fa e non applicarlo pedissequamente come si diceva una volta "a pappardella".
 

maria uni

Utente junior
2 Giugno 2021
88
8
excel
1
Non funziona perchè se si cambiano le carte in tavola nel senso come modo di operare la macro non va più bene.

Prima si parlava delle colonne A e B quindi l'istruzione

Visual Basic:
 If Target.Column = 1 Then
era corretta.

Ma ora tu parli delle colonne B e C

quindi la precedente istruzione come va modificata?

Lascio a te l'onere di scoprire come.

Ti dico solo che il target è la cella che stiamo modificando che è un oggetto di tipo Range con tutte le proprietà e metodi di tale tipo di oggetto (per oggetto intendo "oggetto" di Excel).

Quando si riceve un codice bisogna capire quello che fa e non applicarlo pedissequamente come si diceva una volta "a pappardella".
eccolo il codice modificato. Grazie mille per gli utilissimi insegnamenti.

Codice:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:C")) Is Nothing Then
If Target.Rows.Count > 2 Then Exit Sub
Application.EnableEvents = False
    If Target.Column = 2 Then
        If Target.Value <> "" Then
        Target.Offset(0, 1).Value = 0
        End If
        Else
        Target.Offset(0, -1).Value = 0
    End If
  Application.EnableEvents = True
End If
End Sub
 
Ultima modifica di un moderatore:

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
37.883
2.445
67
Napoli
Office 365
1.208
Brava ma ricorda che il codice va inserito tra i TAG CODE: per come fare consulta gli avvisi dello staff (stavolta lo faccio io)

P.S. È un piacere quando gli “insegnamenti” sono recepiti con profitto.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!