Loop che procede a step



  • Loop che procede a step
    di Gianli (utente non iscritto) data: 26/04/2016 14:39:46

    Ciao a Tutti,

    da premettere che sono poco più che un neofita nella compilazione di codice VBA.

    In sostanza, avevo l'esigenza di avere una macro che associata ad un pulsante mi selezionasse da una colonna (Colonna C) un campione di valori ( il cui numero venisse prelevato da una determinata casella E3: es. 24 valori su 128 presenti in colonna C) e li rilasciasse nella colonna F o in qualsiasi altra colonna.

    Ciò che ho occasionalmente ottenuto è ciò che volevo, ma piuttosto che rilasciare i 24 valori tutti insieme li rilascia ad uno ad uno. Quindi, se il pulsante agisce in presenza del valore 24 in cella F3 allora dovrò effettuare 24 click, etc.

    Dove ho sbagliato? Cosa non riesco a comprendere?
    ecco il codice.

    Vi ringrazio fin da ora.

    Gianli
     
    Sub showRandomWord()
    Dim ws As Worksheet
    Dim stRow As Long, endRow As Long, dataCol As Long
    Dim dispRow As Long, dispCol As Long
    Dim i As Long
    Dim y As Variant
    Dim x As Variant
    Dim yStep As Integer
    
    Set ws = Sheets("GREEN_Camp")
    i = Range("E3")
    y = Range("E4")
    x = i - y
    z = 0
    stRow = 8
    dataCol = 3
    dispRow = 8 + x - 1
    dispCol = 5
    
        
       
            
                With ws
                    If Range("E4").Value < Range("E3").Value Then
                        endRow = .Cells(.Rows.Count, dataCol).End(xlUp).Row
                        .Cells(dispRow, dispCol).Value = _
                          .Cells(Application.RandBetween(stRow, endRow), dataCol).Value
                  
                    End If
                End With
             
     
    
    End Sub
    Sub showRandomWord()
    Dim ws As Worksheet
    Dim stRow As Long, endRow As Long, dataCol As Long
    Dim dispRow As Long, dispCol As Long
    Dim i As Long
    Dim y As Variant
    Dim x As Variant
    
    
    Set ws = Sheets("GREEN_Camp")
    i = Range("E3")
    y = Range("E4")
    x = i - y
    z = 0
    stRow = 8
    dataCol = 3
    dispRow = 8 + x - 1
    dispCol = 5
    
        
       
            
                With ws
                    If Range("E4").Value < Range("E3").Value Then
                        endRow = .Cells(.Rows.Count, dataCol).End(xlUp).Row
                        .Cells(dispRow, dispCol).Value = _
                          .Cells(Application.RandBetween(stRow, endRow), dataCol).Value
                  
                    End If
                End With
             
     
    
    End Sub
    



  • di alfrimpa data: 26/04/2016 15:36:20

    Ciao Gianli

    Per essere un neofita complimenti per il codice che mi sembra abbastanza complesso.

    Comunque per aspettarti una risposta da parte di chi volesse aiutarti devi quantomeno allegare il tuo file di esempio con situazione iniziale e risultato atteso dove poter testare la tua macro.

    Perché qualcun altro dovrebbe ricostruirselo quando tu ce l'hai già?

    Alfredo





  • di patel data: 26/04/2016 18:19:54

    oppure aspetta una settimana che lo ricostruisco io





  • di gianliborio data: 26/04/2016 23:24:36

    Ho allegato il file adesso...scusate ma prima avevo la testa altrove...



  • di Mister_x (utente non iscritto) data: 27/04/2016 00:05:32

    ciao

    da come ho capito la sub() deve effettuare quante volte trova il valore esposto in E3

    se e' questo basta impostare un ciclo for con step a valore di E3

    fai sapere se questo che intendi

    ciao
     
    Sub showRandomWord()
    Dim ws As Worksheet
    Dim stRow As Long, endRow As Long, dataCol As Long
    Dim dispRow As Long, dispCol As Long
    Dim i As Long
    Dim y As Variant
    Dim x As Variant
    Dim yStep As Integer
    
    Set ws = Sheets("GREEN_Camp")
    
    i = Range("E3")
    '''''''' variabile a ciclo for
    Dim xx As Long
    For xx = 1 To i
    y = Range("E4")
    x = i - y
    Z = 0
    stRow = 8
    dataCol = 3
    dispRow = 8 + x - 1
    dispCol = 5
                With ws
                    If Range("E4").Value < Range("E3").Value Then
                        endRow = .Cells(.Rows.Count, dataCol).End(xlUp).Row
                        .Cells(dispRow, dispCol).Value = _
                          .Cells(Application.RandBetween(stRow, endRow), dataCol).Value
                  
                    End If
                End With
    Next xx
    End Sub
    
    
    
    






  • di gianliborio data: 27/04/2016 13:06:00

    Grazie!

    Avevo provato a inserire un ciclo FOR ma evidentemente lo inserivo in maniera sintatticamente scorretta poichè mi generava un loop perpetuo sul primo valore campionato.

    Ancora grazie,

    Preziosissimi