Office 2003 - Assegnazione di un valore ad una cella dopo averne valutato il contenuto.__

Anonimo
2010-11-03T00:09:36+00:00

Salve a tutti, spero di trovare l'aiuto sperato! :)

Vorrei avere un consiglio riguardo questo (a parole) semplice problema in Excel 2003.

Problema:

Ho una cella (per esempio la cella: A1) in cui devo inserire un nome di persona.

Vorrei inserire un controllo il quale, nel momento in cui digito il nome (per esempio) "carlo" e premo invio, automaticamente mi modifichi il valore di quella cella da "carlo" a "Carlo". Oppure da "Cost." a "Costantino". Insomma solo per questi 2 valori ben predeterminati.

Come si può fare?

Provavo a inserire una formula simile in una cella qualunque:   =SE(A1="carlo"; A1="Carlo"; "");

Ma ovviamente non funziona... Consigli? :S

Attendo delucidazioni! Grazie! :)

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
2010-11-04T07:52:10+00:00

Ciao ad entrambi!

Grazie mille! Si, sembra funzionare.

Ora se volessi, però, fare questo check..questo controllo su diverse caselle spaiate? Devo fare un elenco infinito di ELSE IF ?

Scusate ma io di VBA proprio non so nulla. Avete da consigliarmi qualche guida di base per cominciare?

 

Non è così difficile. Sempre da copia/incollare nel  modulo del foglio  dove vuoi questa cosa:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range

On Error GoTo RigaErrore

    Set rng = Me.Range("A1:A5,B5,C10,F4:F8")

    If Not Intersect(Target, rng) Is Nothing Then

        If Target.Cells.Count = 1 Then

            Application.EnableEvents = False

            If LCase(Target.Value) = "carlo" Then

                Target.Value = "Carlo"

            ElseIf LCase(Target.Value) = "cost." Then

                Target.Value = "Costantino"

            End If

        End If

    End If

RigaChiusura:

    Set rng = Nothing

    Application.EnableEvents = True

    Exit Sub

RigaErrore:

    Resume RigaChiusura

End Sub

Concentrati, per favore, su questa riga di codice:

Set rng = Me.Range("A1:A5,B5,C10,F4:F8")

che è la riga che determina su quali celle andrai ad applicare quanto richiesto. I riferimenti ai Range da controllare sono all'interno delle parentesi, racchiusi fra doppi apici e separati da una virgola. Come vedi posso utilizzare intervalli(A1:A5, F4:F8) e/o singole celle(B5,C10). Modificherai quei riferimenti per il tuo contesto. Credo sia abbastanza chiaro(lo spero). Fai sapere se risolvi e se hai bisogno siamo(quasi) sempre qui. Grazie per l'attenzione.


--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-11-03T16:12:04+00:00

    <cut>

    Aggiungo una nota su di una funzione quasi sconosciuta: StrConv. La guida da tutte le delucidazioni. Qui un semplice esempio: 

    Public Sub m()

        Dim s As String

        s = StrConv("carlo", vbProperCase)

        MsgBox s

    End Sub


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-11-03T08:35:46+00:00

    Entra nel Visual Basic Editor (ALT+F11 o strumenti / macro / visual basic editor) e nel foglio (sul foglio fai aggiungi codice) dove devi effettuare i test aggiungi questa sub:

    Private Sub Worksheet_Change(ByVal Target As Range)

        If LCase(Target.Value) = "carlo" Then Target.Value = UCase(Left(Target.Value, 1)) & LCase(Mid(Target.Value, 2))

        If LCase(Target.Value) = "cost." Then Target.Value = "Costantino"

    End Sub

    Ciao, Ste'

    Se utilizzi la tua routine e provi, una volta scritto qualche nome, di selezionare e cancellare più celle, ottieni un errore. Se(se) vuoi questa cosa su più celle, devi gestire l'errore o intercettare il numero di celle passate da Target, esempio:

    Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo RigaErrore

        If Target.Cells.Count = 1 Then

            Application.EnableEvents = False

            If LCase(Target.Value) = "carlo" Then

                Target.Value = "Carlo"

            ElseIf LCase(Target.Value) = "cost." Then

                Target.Value = "Costantino"

            End If

        End If

    RigaChiusura:

        Application.EnableEvents = True

        Exit Sub

    RigaErrore:

        Resume RigaChiusura

    End Sub

    L'OP ha chiesto un esempio per A1. Grazie comunque per aver dato l'opportunità di postare codice per tutte le celle del foglio e per l'attenzione.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-11-03T08:14:23+00:00

    Salve a tutti, spero di trovare l'aiuto sperato! :)

    Vorrei avere un consiglio riguardo questo (a parole) semplice problema in Excel 2003.

    Problema:

    Ho una cella (per esempio la cella: A1) in cui devo inserire un nome di persona.

    Vorrei inserire un controllo il quale, nel momento in cui digito il nome (per esempio) "carlo" e premo invio, automaticamente mi modifichi il valore di quella cella da "carlo" a "Carlo". Oppure da "Cost." a "Costantino". Insomma solo per questi 2 valori ben predeterminati.

    Come si può fare?

    Provavo a inserire una formula simile in una cella qualunque:   =SE(A1="carlo"; A1="Carlo"; "");

    Ma ovviamente non funziona... Consigli? :S

    Attendo delucidazioni! Grazie! :)

    Puoi farlo, ad esempio, ricorrendo al vb. Un semplice esempio basandomi su quanto hai chiesto, potrebbe essere questo:

    Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo RigaErrore

        If Target.Address = "$A$1" Then

            Application.EnableEvents = False

            If LCase(Target.Value) = "carlo" Then

                Target.Value = "Carlo"

            ElseIf LCase(Target.Value) = "cost." Then

                Target.Value = "Costantino"

            End If

        End If

    RigaChiusura:

        Application.EnableEvents = True

        Exit Sub

    RigaErrore:

        Resume RigaChiusura

    End Sub

    Da copia/incollare nel modulo di codice *del foglio* dove vuoi questa cosa. Se non hai mai utilizzato il vb di Excel, qui trovi alcune dritte su dove e come inserire il codice:http://www.maurogsc.eu/excel/xlsdoveinserirecodice.aspx . Ovviamente possiamo espandere il controllo su più celle. Sinceramente non so cosa devi fare, ma ti ricordo che potresti anche costringere l'utente ad utilizzare dati predefiniti. Ad esempio:

    • Seleziona le celle B1:B10
    • Dati-->Convalida
    • Scheda: Impostazioni
    • In Consenti, seleziona: Elenco
    • In Origine, scrivi: Carlo;Costantino  (c'è un punto e virgola che separa i nomi)
    • Ok

    Se adesso selezioni una delle celle B1:B10, ti verrà consentito di validare la cella con i dati che hai messo nell'elenco. Ogni altro dato, darà un errore. Puoi ovviamente creare un elenco con n dati, sempre separati uno dall'altro dal punto e virgola. Fai sapere se hai risolto e grazie per l'attenzione.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-11-03T08:07:38+00:00

    Entra nel Visual Basic Editor (ALT+F11 o strumenti / macro / visual basic editor) e nel foglio (sul foglio fai aggiungi codice) dove devi effettuare i test aggiungi questa sub:

    Private Sub Worksheet_Change(ByVal Target As Range)

        If LCase(Target.Value) = "carlo" Then Target.Value = UCase(Left(Target.Value, 1)) & LCase(Mid(Target.Value, 2))

        If LCase(Target.Value) = "cost." Then Target.Value = "Costantino"

    End Sub

    Ciao, Ste'

    La risposta è stata utile?

    0 commenti Nessun commento