Trovare e Copiare Numeri Doppi



  • 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) ......