Trovare e Copiare Numeri Doppi
Hai un problema con Excel? 
Trovare e Copiare Numeri Doppi
di Kirotta data: 06/02/2014 19:31:17
Ciao a tutti
Stò seguendo i passi di un esercizio.
In un foglio di excel inserisco dei numeri nella colonna B da form tramite una casella di testo collegata a un pulsante
Questi numeri vengono inseriti a uno a uno quindi può capitare che in B ci siano due numeri
Io vorrei che appena inserisco un numero già presente oltre ad apparire in B venga copiato anche in un'altra colonna ad es L nella stessa riga del numero doppione (quindi se inserisco in B 1 2 3 poi 2 il due è presente quindi 2 lo copio ad es in L5)
In P5 perchè io inizio l'inserimento in B partendo da B2
Se inserisco un altro numero già presente oltre ad apparire in B venga copiato anche nella colonna M (sempre nella stessa riga del numero doppione)
Se inserisco un altro numero già presente oltre ad apparire in B venga copiato anche nella colonna N (sempre nella stessa riga del numero doppione)
E così via
Poi seguendo l'esempio precedente se i numeri successivi sono diversi da 2 sotto il numero 2 in L5 il programma deve inserirmi 1 2 3 4 ecc finchè non si ripresenta in B un 2 se questo succede in L nella stessa riga di questo 2 devo mettere un segno di riconoscimento se si può un pallino
Comunque x ora vorrei almeno capire come riconoscere il numero doppio e copiarlo.
Vi allego il mio progetto
Grazie
Questo è il mio codice di base ma non va
Dim LastRow As Long, K As Long
Dim Ncol1 As Integer
Application.ScreenUpdating = False
With ActiveSheet
LastRow = [COUNTA(B:B)]
For Ncol1 = 12 To 22
For K = LastRow To 2 Step -1
If .Cells(K, 2) = .Cells(K - 1, 2) Then
Sheets(1).Cells(Ncol1, Ncol1) = Val(txtStart)
End If
Next
Next
End With
Application.ScreenUpdating = True
End Sub |
di patel data: 06/02/2014 19:37:15
ti dispiace spiegare la logica del tuo codice ?
di Kirotta data: 06/02/2014 20:15:59
Ero partita da un codice trovato su Internet (qui sotto postato) che ho cercato di adattare alle mie esigenze
quindi ho tolto:
.Columns("B").Sort .[B2], Header:=xlGuess
xchè non voglio che i numeri nella colonna B vengano riordinati
Poi con ciclo For visto che in questo caso elimina la cella doppia pensavo che potesse copiare anche un valore doppio quindi al posto di:
.Rows(K).EntireRow.Delete
o messo inizialmente:
Sheets(1).Cells(LRL, 12) = Val(txtStart)
che funzionava si e no
poi ho messo Sheets(1).Cells(Ncol1, Ncol1) = Val(txtStart)
xchè stavo provando al assegnare ogni numero doppio a una colonna
invece è un disastro e non sò come uscirne
Grazie
'controlla la colonna A a partire dalla seconda riga
Sub Elina_Tutti_I_Doppioni_2()
Dim LastRow As Long, K As Long, MemoCanc As Variant
Application.ScreenUpdating = False
With ActiveSheet
.Columns("A").Sort .[a1], Header:=xlGuess
LastRow = [COUNTA(A:A)]
For K = LastRow To 2 Step -1
If .Cells(K, 1) = .Cells(K - 1, 1) Or MemoCanc = .Cells(K, 1) Then
MemoCanc = .Cells(K, 1)
.Rows(K).EntireRow.Delete
End If
Next
End With
Application.ScreenUpdating = True
End SubStep -1
If .Cells(K, 2) = .Cells(K - 1, 2) Then
Sheets(1).Cells(LRL, 12) = Val(txtStart)
End If
Next
End With
Application.ScreenUpdating = True
End Sub |
di Vecchio Frac data: 06/02/2014 21:03:02
cit. "Comunque x ora vorrei almeno capire come riconoscere il numero doppio e copiarlo. "
---> Ti suggerisco di utilizzare .Find applicato a un range. Se il risultato è Nothing il numeor non è stato trovato e quindi non è un doppione.
Esempio rapido:
set trovato = range("A:A").Find(1, LookAt:=xlWhole) restituisce True se nella colonna A esiste il valore 1, e quindi è un doppione, False se non lo trova.
di Kirotta data: 06/02/2014 22:17:45
Ciao
Ho provato ad usare:
set trovato = range("A:A").Find(1, LookAt:=xlWhole) restituisce True se nella colonna A esiste il valore 1, e quindi è un doppione, False se non lo trova.
Adattandolo al mio progetto ma non succede niente
Grazie
Dim trovato As Range
With Sheets("Foglio1")
For Cercato = 0 To 12
'restituisce True se nella colonna B esiste il valore Cercato, e quindi è un doppione, False se non lo trova.
Set trovato = Range("B:B").Find(Cercato, LookAt:=xlWhole)
If Cercato = True Then
Sheets(1).Cells(LRL, 12) = Cercato
End If
Next
End With
End Sub |
di patel data: 06/02/2014 22:51:03
per imparare a programmare occorre prima pensare alla sequenza delle operazioni da fare e poi tradurre in linguaggio vba, questa logica la devi creare tu e non cercarla in rete, altrimenti vai a tentoni e rischi di non uscirci più.
Prova a scrivere la sequenza delle operazioni da fare e noi ti aiutiamo a tradurla.
di patel data: 06/02/2014 22:54:38
Ciao VF, ben tornato
di Kirotta data: 06/02/2014 23:13:28
Partendo dal presupposto che parto da un foglio bianco di excel perchè i numeri gli inserisco io da Form
uno per uno (quindi mi appare una riga per volta compilata) partendo dalla seconda riga
Se inserendo un numero nella colonna B questo è già presente allora copio il numero nella colonna L nella stessa riga del numero doppio appena uscito
Se nell'inserire altri numeri in B capita ancora che un altro numero è già presente allora copio il numero nella colonna M nella stessa riga del numero doppio appena uscito
E così via
Grazie
di patel data: 07/02/2014 08:25:21
forse mi sono spiegato male, questa è la descrizione del problema, il prossimo passo e l'analisi, quali operazioni devi fare per risolverlo ? non ti hanno insegnato a fare il diagramma a blocchi ?
un esempio
1) inserisco il primo dato
2) se il numero dei dati è > 1 definisco il range su cui cercare
3) cerco se il dato è già presente
4) se sì quante volte ?
5) ......
Vuoi Approfondire?