uso del SE



  • uso del SE
    di jhonny (utente non iscritto) data: 09/11/2015 13:37:51

    in una cella vorrei una condizione, se vero scrive SI e se falso vorrei poter scrivere io ogni volta a mano il valore.

    è fattibile? se no, come posso aggirare il problema?



  • di Santuberto (utente non iscritto) data: 09/11/2015 13:41:17

    Buongiorno.
    Poniamo che la cella da valutare sia l A1: =se(a1>0;"SI";"") In questo modo, nella cella non si vede nulla.



  • di jhonny (utente non iscritto) data: 09/11/2015 13:44:44

    si, però se vado a inserire un valore nella cella dove no si vede nulla, si cancella la formula, giusto?

    non esiste il modo di usare due SE allo stesso tempo, uno che scrive si ed uno che lascia la cella praticamente vuota (in modo tale da poter scriverci dentro quando sia necessario)?



  • di Santuberto (utente non iscritto) data: 09/11/2015 13:52:47

    Cito: non esiste il modo di usare due SE allo stesso tempo, uno che scrive si ed uno che lascia la cella praticamente vuota (in modo tale da poter scriverci dentro quando sia necessario)?

    Io non credo, però i maghi del Vba...
    PS: una domanda: me se tu ci scrivi sopra, che importanza ha se cancelli la funzione?



  • di jhonny (utente non iscritto) data: 09/11/2015 14:49:41

    Hai ragione, farò così fino a quando qulcuno suggerisca qualcosa in VBA.

    Grazie e saluti



  • di Santuberto (utente non iscritto) data: 09/11/2015 16:56:03

    Cito: "...farò così fino a quando qulcuno suggerisca qualcosa in VBA."
    Mah. Secondo me, si potrebbe sostituire il il SI (e quindi, la funzione), con una formattazione condizionale. Ad esempio, se il risultato è VERO, la cella potrebbe risultare colorata. In questo modo, avresti comunque un riscontro diretto: non c'è il SI, ma il colore.



  • di Arrampicatore data: 09/11/2015 17:56:43

    Secondo me, potresti usare =SE(A1>0;"SI";B1)
    e in B1 (o la prima cella che hai libera sulla riga) inserisci il tuo testo/valore senza perdere la formula. Anche perché se il valore in A1 dipende da altre celle, sovrascrivendo la formula perderesti il controllo, in caso di aggiornamento dei valori.

    Altrimenti imposti il SE così:
    =SE(A1>1;"SI";mio_testo())

    e nell'editor del VBA, in un nuovo modulo inserisci questo:
     
    Public Function mio_testo() As String
    mio_testo = InputBox("Testo da scrivere:")
    End Function



  • di Marius44 data: 09/11/2015 18:09:48

    Ciao a tutti
    Il problema principale è che non si posta mai un file su cui lavorare e su cui viene indicato il risultato atteso.
    Occorre tenere presente che in Excel in una cella può starci:

    - o un valore inserito dall'utente

    - o una formula che restituisce un valore

    Entrambe le cose NON POSSONO coesistere. Ovviamente, salvo VBA.

    Ciao,
    Mario



  • di Cucù data: 09/11/2015 18:39:27

    Credo questo argomento sia stato trattato più volte, prova a fare una ricerca nello storico.
    Cmq utilizzando vba è estremamente semplice ottenere quello che chiedi.
    Cucù



  • di jhonny (utente non iscritto) data: 09/11/2015 20:40:28

    Cucu, per favore aiutami TU!!!



  • di Cucù data: 09/11/2015 21:52:36

    Nel file allegato
    Colonna A

    Se scrivi un numero superiore a 10 restituisce "SI"
    se inferiore a 10 restituisce "NO" ed è editabile scrivendoci quello che ti pare.
    Ciao




  • di jhonny (utente non iscritto) data: 11/11/2015 12:35:02

    Ciao Arrampicatore,

    La tua soluzione creando un modulo etc, si attiva in tutti i fogli e celle anche quando non dovrebbe.

    Esiste un modo per arginare il problema?



  • di Cucù data: 11/11/2015 12:54:10

    @jhonny
    E la mia proposta?



  • di jhonny (utente non iscritto) data: 11/11/2015 12:56:45

    Salve Cucu,

    Avrei bisogno che la macro mi scrivesse SI se il valore nella cella X è uguale a 1, altrimenti non tocca la cella per niente.

    Praticamente mi serve per avere un si automatico se il valore di un'altra cella è 1 e se non lo è, non tocca in assoluto la cella, mi lascia la possibilità di scriverci dentro a posteriori senza cancellare formule etc...



  • di Cucù data: 11/11/2015 13:04:43

    Ma hai provato il file allegato? e se Sì, cosa non va bene?



  • di jhonny (utente non iscritto) data: 11/11/2015 13:15:16

    Cucu, per favore dai un occhiata al file che ho allegato (filecucu).



  • di Cucù data: 11/11/2015 13:44:43

    Prova il file allegato...
    PS Certo che capire senza un file allegato è sempre una "Mission Impossible"
    Cucù



  • di Arrampicatore data: 11/11/2015 13:47:12

    Ciao jhonny,

    in allegato il file che fa quel che ti serve.
    Riguardo al codice precedente, dovrebbe richiederti l'inputbox solo nelle celle in cui tu inserisci la funzione mio_testo()



  • di jhonny (utente non iscritto) data: 11/11/2015 13:52:00

    Grande Cucu.

    E se il valore Rosso non si trova nella colonna A dello stesso foglio, sennò in un altro foglio? Che modifiche devo apportare al tuo codice?



  • di Cucù data: 11/11/2015 13:58:35

    Cit"E se il valore Rosso non si trova nella colonna A dello stesso foglio"

    Questo codice sfrutta l'evento change del fogli in cui fa le modifiche (Quindi dove scrivi ROSSO, GIALLO e cosi via) e li deve rimanere... mentre devi cambiare nel codice le celle di destinazione (Dove scrivera il "SI" per capirci). Ma siccome anche stavolta non sei stato preciso e attento nello spiegare il problema, continuando a cambiare le carte in tavola, lascio a te scoprire come.
    Bye
    Cucù
     
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrHandler
    Application.EnableEvents = False
    
    If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
        
        If Not Intersect(Target, Range("A:A")) Is Nothing Then
            If Target.Value = "ROSSO" Then
                   Target.Offset(0, 1).Value = "SI"
                Else
                   Target.Offset(0, 1).Value = ""
            End If
        End If
    
    ErrHandler:
    Application.EnableEvents = True
    
    End Sub



  • di Arrampicatore data: 11/11/2015 14:08:58

    Cucù mi illumineresti per cortesia sul metodo Intersect? non l'ho mai usato e non ho capito dalla guida come lavora...



  • di jhonny (utente non iscritto) data: 11/11/2015 14:10:47

    Cucu,

    Perdon, pero per me il VBA non è semplice da capire. Capisco di non essere stato chiaro, pero sto varando varie possibilità.

    Una è avere il rosso nella colonna A dello stesso foglio (foglio1) e l'altra è do averlo nella colonna B del foglio2.

    help me please..



  • di Cucù data: 11/11/2015 14:19:38

    "Cucù mi illumineresti per cortesia sul metodo Intersect?"

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

    In soldoni sarebbe se il target interseca il range ("A:A") con una doppia negazione (Not e Nothing)



  • di Arrampicatore data: 11/11/2015 15:14:50

    Perfetto! grazie mille



  • di jhonny (utente non iscritto) data: 11/11/2015 15:52:55

    Qualcuno con un anima pia per favore...



  • di Arrampicatore data: 11/11/2015 18:23:01

    ma il colore lo inserisci tu a mano? è il risultato di una formula? di un'altra macro?

    se non alleghi un file, uguale e spiccicato a quello che hai (senza dati sensibili, s'intende) e non metti a mano i valori dei risultati attesi, diventa un'impresa erculea aiutarti.



  • di jhonny (utente non iscritto) data: 11/11/2015 22:30:46

    il file è filecucu dove spiego il funzionamento di quello di cui ho bisogno. Solo che la colonna non è più la A nello stesso foglio, sennò la B nel foglio2.



  • di Arrampicatore data: 12/11/2015 14:36:23

    Copia e incolla il codice di cucù nel codice del foglio2, sotto l'evento change e modifichi il Range("A:A") con Range("B:B")



  • di jhonny (utente non iscritto) data: 12/11/2015 16:29:46

    fatto.

    adesso come faccio per far si che nelle colonne O e P del foglio1 scriva Si (o non scriva niente) se il colore è rosso nella colonna B del foglio2?



  • di Arrampicatore data: 12/11/2015 17:16:46

    la macro che ti ha scritto cucù usa il metodo OFFSET per scrivere che richiede 2 parametri: (Riga_offset, Colonna_offset) che indicano a VBA di quante righe e colonne spostarsi dalla cella di partenza (nel nostro caso la cella Target) ma nello stesso foglio! Infatti l'offset scritto da cucù scrive nella cella della stessa riga (riga_offset=0) ma nella colonna a destra (colonna_offset=1).
    Per scrivere in un altro foglio, devi togliere il Target.Offset e sostituirlo con:

    Sheets("Foglio1").Cells(target.row,n_colonna).value

    Questa istruzione ti permette di scrivere nella cella con la stessa riga di Target, nella colonna che vuoi tu (scrivendo al posto di n_colonna il numero della colonna che ti interessa) nel Foglio1. Spero di essere riuscito a spiegarmi.



  • di jhonny (utente non iscritto) data: 12/11/2015 18:34:56

    sei stato chiarissimo.

    a questo punto la macro che ho è questa:

    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrHandler
    Application.EnableEvents = False

    If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub

    If Not Intersect(Target, Range("B:B")) Is Nothing Then
    If Target.Value = "ROSSO" Then
    Sheets("Foglio1").Cells(Target.Row, 15).Value = "SI"
    Else
    Sheets("Foglio1").Cells(Target.Row, 15).Value = ""
    End If
    End If

    ErrHandler:
    Application.EnableEvents = True

    End Sub

    pero sembra non sortire effetto. l'ho copiata nel foglio 2 etc.

    A me servirebbe che fosse tipo un se cin cerca vert. nel senso: colonna A auto e colonna B colore.

    la macro dovrebbe scrivere SI nelle colonne O e P del foglio 1, se il nome dell'auto nella colonna D sempre del foglio1, è di colore rosso (questo dato lo verifica dalla colonna B del foglio2), altrimenti lascia la cella intatta.

    si potrebbe fare?



  • di Arrampicatore data: 12/11/2015 19:18:01

    Immagino tu stia creando il file da zero e quindi stia modificando la disposizione delle colonne, quindi più che riscrivere il codice, cercherò di passarti le informazioni di cui sono a conoscenza per personalizzarti da solo la Macro.

    Il fatto che la sub si chiami WorkSheet_Change(..) implica che tutto il codice scritto fino all'End Sub verrà eseguito solo e soltanto se il foglio in cui è inserito il codice cambia (evento Change), ad esempio scrivendo in una cella. Per lanciarlo ad ogni ricalcolo del foglio e fare in modo che si comporti similmente ad una formula, dovresti sfruttare l'evento Calculate, e cambiare di parecchio il codice.
    In più la riga If Not Intersect(Target, Range("B:B")) Is Nothing Then... assicura che la cella modificata appartenga alla colonna B, quindi se tu vai a scrivere nella colonna D la macro verrà eseguita, ma in questo particolare If il codice devierà verso End Sub senza toccare le altre celle. Se imposti un'interruzione dell'esecuzione del codice sulla riga in questione (click semplice sulla riga e poi premi F9 da tastiera), potrai verificare che tutto vada come desideri. Dopo aver scritto qualcosa in una cella, il codice arriverà in automatico fino all'interruzione. Da questo punto, premendo da tastiera F8, VBE eseguirà una riga ad ogni pressione e tu avrai modo di controllare visivamente il flusso.
    Fai qualche prova interrompendo l'esecuzione del codice su quell'If e poi:
    - scrivendo in una cella qualsiasi della colonna B. Il codice scriverà dove gli dici tu "SI", se hai scritto "ROSSO", altrimenti svuoterà la cella se è già presente un valore. Scrivendo in qualsiasi altra colonna, il codice salterà all'ultimo End If per arrivare all'End Sub.

    -Riprovi poi usando Range("D:D"): ora scrivendo in B non farà più nulla e si attiverà scrivendo solo in D.

    Fatto questo cerca di aggiustarti il codice facendo in modo che il controllo lo faccia solo nella colonna in cui avrai intenzione di scrivere il colore dell'auto e che scriva "SI" o cancelli il valore nella cella che ti serve.

    Era per questo motivo che ti si suggeriva di mettere un file con tutte le colonne e poi specificare cosa ti serviva.

    P.S. Affianca la finestra di Excel con quella del VBE, così ad ogni F8 vedrai la riga gialla spostarsi nell'editor e le celle cambiare nel foglio.



  • di jhonny (utente non iscritto) data: 12/11/2015 20:49:07

    Ti ringrazio infinitamente per la spiegazione e ti allego il file (file_2) di quello di cui ho bisogno, fatto con la formula cerca.vert.

    Mi servirebbe la stessa cosa, però fatta con una macro che mi permetta di non avere tutte le celle occupate con formule.

    Lo so di essere secccante, però non ho molte conoscenze di vba.

    Mi potresti dare una mano tu, please?



  • di Arrampicatore data: 13/11/2015 09:26:08

    ok... in arrampicatore2 trovi il file che fa quel che vuoi. Ora, ogni volta che scrivi un valore nella colonna B del foglio2 lui controlla. Ogni volta che le formule del foglio vengono ricalcolate, lui controlla.

    Fai qualche prova e fammi sapere!



  • di jhonny (utente non iscritto) data: 13/11/2015 12:22:16

    Salve arrampicatore,

    La macro funziona, lenta (perchè ci sono parecchi dati) pero funziona. è possibile velocizzarla?
    Ho notato che ogni volta che calcola, ripassa e riscrive il SI a tutta la colonna, quando sarebbe sufficiente che lo facesse solamente con la riga cella dove si sta lavorando.

    Qualche suggerimento?



  • di Cucù data: 13/11/2015 13:37:03

    @ Arrampicatore

    In effetti il codice è un po "prolisso"

    Perchè non usi, per esempio, il medoto find per cercare nel foglio1 il valore target appena inserito nella colonna B del foglio2 sfruttando l'evento change dello stesso foglio?
    il risultato sarebbe "istantaneo"
    Cucù



  • di jhonny (utente non iscritto) data: 13/11/2015 13:53:27

    Salve Cucu,

    Potresti gentilmente plasmare tu la macro finale visto che siamo quasi in dirittura d'arrivo?

    Un saludo



  • di Cucù data: 13/11/2015 14:01:29

    Ho allegato il file "Arrampicatore2"
    Cucù



  • di jhonny (utente non iscritto) data: 13/11/2015 14:18:00

    cucu, la tua macro scrive sempre SI per tutte le auto presenti nel foglio1 senza prendere in considerazione se il colore è rosso o meno...



  • di Cucù data: 13/11/2015 14:24:20

    mi sono perso un passaggio allora...
    Deve inserire si solo se rosse?



  • di jhonny (utente non iscritto) data: 13/11/2015 14:53:29

    si, solo se il colore dell'auto è rosso.

    Thanks.



  • di Cucù data: 13/11/2015 15:01:25

    Ok
    Prova il file arrampicatore3 ^_^

    Ho utilizzato il medoto find e questo è il codice.
    Cucù
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range
    Dim FCell As String
    
    On Error GoTo ErrHandler
    If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
        If Not Intersect(Target, Range("B:B")) Is Nothing Then
            Application.EnableEvents = False
            Set C = Sheets("Foglio1").Range("A:A").Find(Target, LookIn:=xlValues, lookat:=xlWhole)
                If Not C Is Nothing Then
                    FCell = C.Address
                        Do
                            If C.Offset(, 1).Value = "ROSSO" Then
                                Target.Offset(, 1).Value = "SI"
                                Exit Do
                            End If
                        Set C = Sheets("Foglio1").Range("A:A").FindNext(C)
                        Loop While C.Address <> FCell
                Else
                    Target.Offset(, 1).Value = ""
                End If
        End If
    ErrHandler:
    Application.EnableEvents = True
    
    End Sub



  • di jhonny (utente non iscritto) data: 13/11/2015 18:23:00

    funziona perfettamente grazie.

    Ho apportato solo questa modifica per far si che scriva SI in due colonne allo stesso tempo:

    If C.Offset(, 1).Value = "ROSSO" Then
    Target.Offset(, 11).Value = "SI"
    Target.Offset(, 12).Value = "SI"
    Exit Do
    End If
    Set C = Sheets("Foglio1").Range("A:A").FindNext(C)
    Loop While C.Address <> FCell
    Else
    Target.Offset(, 11).Value = ""
    Target.Offset(, 12).Value = ""
    End If

    Grazie ancora.

    Un saluto



  • di Cucù data: 13/11/2015 18:56:04

    Bye



  • di Arrampicatore data: 13/11/2015 23:10:08

    Perchè non lo conoscevo! Domani studio.