Excel Forum Per condividere esperienze su Microsoft Excel

Eliminare valore unico

  • Messaggi
  • OFFLINE
    gattodimarmo1980
    Post: 335
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 09/09/2020 11:47
    Buon Mercoledi Forum , nel mio foglio allegato ,facendo una ricerca verticale partendo dalla cella K2 finendo alla cella AL500 mi servirebbe una macro che mi tiene i valori uguali se
    trovati nel Range indicato e mi cancella il valore
    se trovato da solo (univico).Faccio qualche esempio valore 134 presente in K2 e non presente in altre celle,questo valore la macro deve cancellarlo.Valore 101 presente in L2 e in M2 la macro deve tenere tutti e 2 i valori .Valore 904 presente in K3 ,la macro deve cancellarlo perchè unico.Valore 9826 presente in 28 celle la macro deve tenerli tutti e 28 e via via per tutti gli altri numeri.Spero di essere stato chiaro.Saluti Matteo
  • OFFLINE
    alfrimpa
    Post: 4.466
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 09/09/2020 12:15
    Devi impostare un ciclo For Each sull’intervallo.

    Poi con un If ed un CONTA.SE() lato VBA (WorksheetFunction.CountIf) valuti se il valore della cella è presente più di una volta.

    Se presente una volta cancelli il contenuto della cella.

    È una macro semplicissima.

    Alfredo
  • OFFLINE
    gattodimarmo1980
    Post: 335
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 09/09/2020 14:28

    Sub cancella Univoci

    Application.ScreenUpdating = False
    Dim NRcX As Long, Nrc As Long, x As Long
    Dim Rcr As Integer
    Dim z As Integer, w As Integer, j As Integer
    Dim y As Byte, k As Byte
    For y = 11 To 28



    Buon Giorno Alfredo grazie della indicazioni ma non ho le tue competenze per quanto riguarda Vba. Provo a partire con la macro sopra
    se me la finisci potresti indicarmi passo passo le istruzioni cosi imparerei qualcosa di nuovo,ti ringrazio Matteo
  • OFFLINE
    alfrimpa
    Post: 4.467
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 09/09/2020 15:12
    No il codice non te lo do.

    Se non si studia la competenza non si forma mai (credi che son nato con il VBA in testa?)

    Comincia a studiare questo link sul ciclo For Each (ma ne trovi quanti ne vuoi basta solo volerlo) e prova a scrivere qualcosa di sensato piuttosto che buttare giù del codice a casaccio giusto per far vedere.

    https://macrovba.wordpress.com/tag/ciclo-for-each-next/

    Mi sembra che con oltre 300 post sia quanto meno doveroso farlo.

    Alfredo
  • OFFLINE
    gattodimarmo1980
    Post: 336
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 09/09/2020 18:10
    Sub cancellaUnivochi()
    Dim setArea As Range
    Dim cel As Range
    setArea = Range("K2:AL500")
    For Each cel In setArea
    If cel.Value = " " Or cel.Value = " " Or cel.Value = " " Then
    cel.EntireRow.ClearContents
    End If
    Next cel
    End Sub

    Buongiorno Alfrimpa https://macrovba.wordpress.com/tag/ciclo-for-each-next/ molto interessante non sapevo di questo sito,non voglio un codice chiavi in mano ma potresti aiutare un po di piu,non metto giù i codici a caso.Sono arrivato fino a qui ora come posso proseguire?Saluti
    [Modificato da gattodimarmo1980 09/09/2020 19:15]
  • OFFLINE
    alfrimpa
    Post: 4.468
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 09/09/2020 21:00
    Mi spieghi cosa intendevi fare con questa istruzione?

    vb
    If cel.Value = " " Or cel.Value = " " Or cel.Value = " " Then


    E poi dove sono le istruzioni per rilevare i valori univoci? Quel WorksheetFunction.CountIf che ti ho segnalato prima?

    Alfredo
  • OFFLINE
    gattodimarmo1980
    Post: 337
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 10/09/2020 10:42
    Sub cancellaUnivochi()
    Dim setArea As Range
    Dim cel As Range
    setArea = Range("K2:AL500")
    Dim Intervallo ("K2:AL500")
    Dim Riga As Long
    Set Intervallo = setArea
    For Each cell IN setArea
    If Application.CountIf(Intervallo, cell.Value) = 0 Then '
    End if
    Next
    End Sub

    Buon Giorno Alfredo vorrei far trovare alla macro le corrispondenze uguali e cancellare tutto il resto,da solo non riesco,
    può andare bene un codice tipo cosi ovviamente ritoccandolo?Saluti
  • OFFLINE
    alfrimpa
    Post: 4.469
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 10/09/2020 11:27
    Mi puoi spiegare istruzione per istruzione cosa intendevi fare?

    Nel codice che hai postato c’è qualcosa di corretto ma anche strafalcioni da doppio frego blu.

    Se non studi come puoi pensare di scrivere codice che abbia una logica ed un senso?

    Alfredo
  • OFFLINE
    alfrimpa
    Post: 4.470
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 10/09/2020 12:34
    Forse posso sembrare “cattivo” nel mio comportamento.

    Però a me interessa relativamente risolvere il tuo problema.

    Mi interessa molto di più che tu impari in modo da essere in grado di risolverlo da solo.

    Alfredo
  • OFFLINE
    gattodimarmo1980
    Post: 338
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 10/09/2020 13:25
    Buon giorno Alfredo non ti ritengo Cattivo,anzi un ottimo Guru,ti seguo anche sul Web ma se vuoi aiutare inizia
    a sottolineare gli errori e sottolinea le cose giuste spiegando il perchè degli errori io non ho fretta ti avere il codice in mano ne tanto meno di avere la pappa pronta.Saluti Matteo.
  • OFFLINE
    alfrimpa
    Post: 4.471
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 10/09/2020 13:53
    Inizia tu con lo spiegare secondo quale ragionamento hai scritto le istruzioni del codice che hai postato ed io ti dirò che cosa c’è di sbagliato nel ragionamento e cosa no.

    Alfredo
  • OFFLINE
    tanimon
    Post: 1.325
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    00 10/09/2020 14:06
    Ciao a tutti
    ciao Matteo,
    Alfredo (un saluto [SM=g27811] )
    ti ha già fornito il ragionamento al post #2.

    È composto da 3 passaggi, analizzarli uno la volta, ed uno alla volta
    mettili.in pratica.

    DOPO e ripeto, DOPO,
    assembla tutto in un'unica macro.

    Ciao
    Frank







    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
  • OFFLINE
    gattodimarmo1980
    Post: 339
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 11/09/2020 16:30
    Sub MacroEliminareValoriunici()
    '
    ' MacroEliminareValoriunici Macro
    '

    '
    Range("K2:AL500").Select
    Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).DupeUnique = xlDuplicate
    With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent3
    .TintAndShade = 0.399945066682943
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    End Sub





    Buon Giorno Alfredo buongiorno Taninom che bello rivederti dopo tanto tempo,non voglio fare di testa mia è solo una considerazione magari non vi piacerà ma è solo una considerazione ripeto,arrivato a questo punto la macro sopra che vedete,posso dire ad excel di cancellarmi tutto il resto a parte le celle formattate con testo grigio?A presto matteo
  • ABCDEF@Excel
    00 11/09/2020 17:45
    Sub a()
    Dim x, y, c
    For x = 11 To 38
    c = Cells(Rows.Count, 1).End(xlUp).Row
    For y = 2 To c
    If Application.WorksheetFunction.CountIf(Range("K2:AL500"), Cells(y, x)) = 1 Then Cells(y, x) = ""
    Next
    Next
    MsgBox "fatto"
    End Sub
  • OFFLINE
    gattodimarmo1980
    Post: 340
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 11/09/2020 17:52
    Buona giornata ABCDEF@Excel,ho provato la tua macro ma alla fine mi arriva il messaggio "fatto" ma non cancella nessun valore,in attesa di una tua eventuale modifica ti ringrazio Matteo
  • ABCDEF@Excel
    00 11/09/2020 23:46
    Per il futuro....

    Sub cancellaUnivochi()
    ' errore ... Dim setArea As Range
    Dim cel As Range
    Dim Intervallo As Range '''''manca
    ' errore ... setArea = Range("K2:AL500")
    ' errore ... Dim Intervallo ("K2:AL500")
    ' errore ... Dim Riga As Long
    ' errore ... Set Intervallo = setArea
    Set Intervallo = Range("K2:AL500") '''''''manca
    ' errore ... For Each cell IN setArea
    For Each cel In Intervallo
    If Application.CountIf(Intervallo, cel.Value) = 1 Then 'cel & 1
    cel = "" 'manca cosa deve fare
    End If
    Next
    Set Intervallo = Nothing '''''''manca
    End Sub

    Per risparmiare CPU, ad Each preferisco due cicli for = 590 celle contro 13972
    Facile dire che non funziona, il motivo...l'allegato che non funziona?
  • OFFLINE
    gattodimarmo1980
    Post: 341
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    00 12/09/2020 10:47
    Ciao ABCDEF@Excel, grazie per gli errori segnalati,allego il file senza aver formattato le celle,ho messo la tua macro ma nell'eseguirla non ho nessuna cancellazione.Saluti Matteo
  • ABCDEF@Excel
    00 12/09/2020 13:05
    >>> c = Cells(Rows.Count, 1).End(xlUp).Row
    c = Cells(Rows.Count, x).End(xlUp).Row
  • OFFLINE
    gattodimarmo1980
    Post: 342
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Senior
    2003
    10 12/09/2020 14:26
    Grazie ABCDEF@Excel del codice.Saluti e buon sabato Matteo
  • 15MediaObject5,00119 1