Condividi tramite

Verificare se un numero esiste già in un range definito ed avvisare con Msgbox

Anonimo
2023-04-13T19:00:49+00:00

Buona sera a tutti.

Ho bisogno di una routine Vba per Excel che mi verifichi, ad ogni inserimento del nuovo numero se nella cella A1 quel numero è già presente e cioe:

  1. Tramite InputBox inserisco un numero es.10:
  2. Eseguire un controllo della cella A1 se quel numero che ho inserito nella InputBox esiste già;
  3. in caso di numero già presente nella cella A1, un Msgbox mi deve avvisare del dato già presente e non lo inserisce in cella A1;
  4. in caso di numero non presente lo inserisce nella cella A1.

In sostanza la routine mi deve dire se quel numero che ho inserito nella InputBox esiste già nella cella A1 oppure no.

Spero di essere stato chiaro.

Ciao,Nicola

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
2023-04-14T19:14:21+00:00

Ciao Nicola,

Ciao Norman, ciao Gianfranco.

Il mio amico sentito poco fa mi ha confermato che la verifica del dato inserito nella InputBox deve essere verificato in un range definito.

Nel suo caso la verifica riguarda la colonna C:C.

Spero di essere stato chiaro.

Quindi Norman, come va modificato la tua routine per eseguire il controllo del dato nella colonna C:C

Prova qualcosa del genere:

'========>>

Option Explicit

'-------->>

Public Sub Tester()

Dim WB As Workbook 

Dim SH As Worksheet 

Dim FindRng As Range, srcRng As Range, destRng As Range 

Dim vVal As Variant 

Dim sMsg As String 

Dim iButtons As Long 

Dim bFlag As Boolean 

Const sFoglio As String = **"Foglio1"                                   '<<=== Modifica** 

Const sCella\_Destinazione As String = **"A1"                       '<<=== Modifica** 

Const sColonna\_Ricerca As String = **"C:C"                          '<<=== Modifica** 

Set WB = ThisWorkbook 

Set SH = WB.Sheets(sFoglio) 

With SH 

    Set srcRng = .Range(sColonna\_Ricerca) 

    Set destRng = .Range(sCella\_Destinazione) 

End With 

vVal = Application.InputBox(Prompt:="Inserisci il valore da verificare", Title:="VALORE di RICERCA", Default:=10, Type:=3) 

If vVal = False Then 

    sMsg = "Hai cancellato!" 

    iButtons = vbCritical 

    GoTo XIT 

ElseIf vVal = vbNullString Then 

    sMsg = "Non Hai fornito un valore!" 

    iButtons = vbCritical 

    GoTo XIT 

End If 

Set FindRng = srcRng.Find( \_ 

    What:=vVal, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 

If Not FindRng Is Nothing Then 

    sMsg = "Il valore " & vVal & " esiste gia nella cella  " & FindRng.Address(0, 0) 

    iButtons = vbInformation 

Else 

    destRng.Value = vVal 

    sMsg = "Il valore della cella " & sCella\_Destinazione & " è stato cambiato in " & vVal 

    iButtons = vbInformation 

End If 

XIT:

Call MsgBox(Prompt:=sMsg, \_ 

    Buttons:=iButtons, \_ 

    Title:="REPORT") 

End Sub

'<<========

Ho aggiornato il mio file di prova Nicola20230413.xlsm

===

Regards,

Norman

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2023-04-13T22:46:28+00:00

    ciao

    normalmente le richieste di VBA tento di sorvolarle

    ma questa mi ha incuriosito per la particolarità.

    si verifica di non scrivere lo stesso numero su una singola cella

    (normalmente si verifica di non avere doppioni in determinate matrici)

    visto che sono curioso come un gatto

    mi spieghi per favore il perchè del controllo?

    io mi chiedo se anche in A1 ho il numero 10 e da inputbox reinserisco il numero 10

    cosa mi cambia........teoricamente niente........a meno che

    quel numero non attivi qualcos'altro.

    ma anche in questo caso.....cosa me ne frega di controllare attiverà

    sempre una routine inerente al valore e visto che quest'ultimo non cambia

    avrò sempre lo stesso risultato.

    Se gentilmente mi spieghi soddisfi la mia malsana curiosità

    grazie

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2023-04-13T21:43:30+00:00

    Ciao Norman, grazie per il tuo gentile riscontro. Provo la tua ultima versione e ti aggiorno.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-04-13T21:01:28+00:00

    Ciao Nicola.

    La seguente versione modificata è più robusta perchè gestisce anche la possibilità che l'InputBox venga cancellato:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim Rng As Range

    Dim sMsg As String

    Dim vVal As Variant

    Dim bFlag As Boolean

    Const sFoglio As String = "Foglio1" '<<=== Modifica

    Const sCella As String = "A1" '<<=== Modifica

    Set WB = ThisWorkbook

    Set SH = WB.Sheets(sFoglio)

    Set Rng = SH.Range(sCella)

    vVal = Application.InputBox(Prompt:="Inserisci il valore da verificare", Title:="VALORE di RICERCA", Default:=10, Type:=3) 
    
    If vVal = False Then 
    
        sMsg = "Hai cancellato!" 
    
        GoTo XIT 
    
    End If 
    
    If Rng.Value &lt;&gt; vVal Then 
    
        Rng.Value = vVal 
    
        sMsg = "Il valore della cella " & sCella & " è stato cambiato in " & vVal 
    
    Else 
    
        sMsg = "Il valore della cella " & sCella & " era gia " & vVal 
    
    End If 
    

    XIT:

    Call MsgBox(Prompt:=sMsg, \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '<<========

    Ho aggiornato il mio file di prova Nicola20230413.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-04-13T19:23:25+00:00

    Ciao Nicola,

    Ho bisogno di una routine Vba per Excel che mi verifichi, ad ogni inserimento del nuovo numero se nella cella A1 quel numero è già presente e cioe:

    1. Tramite InputBox inserisco un numero es.10:
    2. Eseguire un controllo della cella A1 se quel numero che ho inserito nella InputBox esiste già;
    3. in caso di numero già presente nella cella A1, un Msgbox mi deve avvisare del dato già presente e non lo inserisce in cella A1;
    4. in caso di numero non presente lo inserisce nella cella A1.

    In sostanza la routine mi deve dire se quel numero che ho inserito nella InputBox esiste già nella cella A1 oppure no.

    Prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim WB As Workbook 
    
    Dim SH As Worksheet 
    
    Dim Rng As Range 
    
    Dim sMsg As String 
    
    Dim vVal As Variant 
    
    Dim bFlag As Boolean 
    
    Const sFoglio As String = **"Foglio1"               '&lt;&lt;=== Modifica** 
    
    Const sCella As String = **"A1"                         '&lt;&lt;=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    Set SH = WB.Sheets(sFoglio) 
    
    Set Rng = SH.Range(sCella) 
    
    vVal = Application.InputBox(Prompt:="Inserisci il valore da verificare", Title:="VALORE di RICERCA", Default:=10, Type:=3) 
    
    If Rng.Value &lt;&gt; vVal Then 
    
        Rng.Value = vVal 
    
        sMsg = "Il valore della cella " & sCella & " è stato cambiato in " & vVal 
    
    Else 
    
        sMsg = "Il valore della cella " & sCella & " era gia " & vVal 
    
    End If 
    
    Call MsgBox(Prompt:=sMsg, \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '<<========

    Potresti scaricare il mio file di prova Nicola20230413.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento