Il problema dei 3 corpi: Attraverso continenti e decadi, cinque amici geniali fanno scoperte sconvolgenti mentre le leggi della scienza si sgretolano ed emerge una minaccia esistenziale. Vieni a parlarne su TopManga.
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

numeri ripetuti

Ultimo Aggiornamento: 20/11/2016 15:51
Post: 690
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
20/11/2016 08:59

Ciao a tutti.
Ho questa formula:
=SE(CONTA.SE($A$2:A8810;A8810)>1;"ripetuto";"")
che mi segnala se un numero è ripetuto.
Il range è molto lungo, più di 15000 righe e per "caricarsi" la formula è molto lenta.
Con una macro si può velocizzare, tipo:
se in nel range A2:A15000 inserisco un nuovo valore se è ripetuto nella cella adiacente B scrivi ripetuto.
Un grazie in anticipo.
max

____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 987
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
20/11/2016 09:45

Ciao
puoi sfruttare l'evento change del foglio:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Application.EnableEvents = False
If Application.WorksheetFunction.CountIf(Range("A1:A" & Target.Row - 1), Target.Value) > 0 Then
    Cells(Target.Row, Target.Column).Offset(, 1) = "ripetuto"
    End If
End If
Application.EnableEvents = True
End Sub


saluti
Domenico
Win 10 - Excel 2016
Post: 3.468
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
20/11/2016 09:45

allega un file di esempio con 100 righe con le tue formule

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 690
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
20/11/2016 13:42

Ciao dodo la macro è o.k. [SM=g27811]
Ho aggiunto all'inizio della macro:

'-------------------------------------------------------
Sheets("sommati").Select
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.Unprotect "123456"
 Foglio6.Range("A2:B65000").Select
  Selection.ClearContents
 '[A2].Select
 ActiveSheet.Protect "123456"
     Application.ScreenUpdating = True
 Application.EnableEvents = True
 Sheets("cicli_creati").Select
'-------------------------------------------------------


che cliccando nel foglio "cicli_creati" la macro cancella tutto il contenuto del foglio "sommati".
Funziona solo un piccolo problema "visivo" cioè si vede il passaggio tra un foglio e l'altro. E' possibile non visualizzare questo passaggio?
La macro completa:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)


'-------------------------------------------------------
Sheets("sommati").Select
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.Unprotect "123456"
 Foglio6.Range("A2:B65000").Select
  Selection.ClearContents
 '[A2].Select
 ActiveSheet.Protect "123456"
     Application.ScreenUpdating = True
 Application.EnableEvents = True
 Sheets("cicli_creati").Select
'-------------------------------------------------------

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

Application.EnableEvents = False

ActiveSheet.Unprotect "123456"

If Application.WorksheetFunction.CountIf(Range("A2:A" & Target.Row - 1), Target.Value) > 0 Then
    Cells(Target.Row, Target.Column).Offset(, 1) = "ripetuto"
    End If
End If

Application.EnableEvents = True

ActiveSheet.Protect "123456"

End Sub


Un saluto e ancora grazie.
max

____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 0
Registrato il: 20/11/2016
Utente Junior
OFFLINE
20/11/2016 15:28

Quoto molto bene
Post: 990
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
20/11/2016 15:51

Ciao
ho capito poco: che necessità hai di cancellare un range tutte le volte che in cicli_creati inserisci il numero da controllare?
Spiega bene cosa vuoi fare, perché mi sembra inutile cancellare quel range tutte le volte.

Ciò premesso, per cancellare un range in un foglio protetto (o no), non è necessario selezionarlo.

Provo "a naso" a ricostruire parte della tua macro (ma il foglio6 cos'è: "sommati" ??):

Application.ScreenUpdating = False
Application.EnableEvents = False
Sheets("sommati").unprotect "123456"
Foglio6.Range("A2:B65000").clearcontents ' <<< che è sto foglio?? perché cancelli ogni volta??
Sheets("sommati").protect "123456"
If Not Intersect(Target, Range("A:A")) Is Nothing Then
ActiveSheet.Unprotect "123456"
If Application.WorksheetFunction.CountIf(Range("A2:A" & Target.Row - 1), Target.Value) > 0 Then
Cells(Target.Row, Target.Column).Offset(, 1) = "ripetuto"
End If
End If
ActiveSheet.Protect "123456"
Application.ScreenUpdating = true
Application.EnableEvents = True


saluti
[Modificato da dodo47 20/11/2016 15:56]
Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
CERCA I NUMERI RICHIESTI (2 messaggi, agg.: 16/10/2020 15:43)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 02:41. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com