Passare alla colonna sucessiva



  • Passare alla colonna sucessiva?
    di Zagor71 data: 12/03/2013 18:11:11

    Come si vede dall'istruzione è un ciclo "for" che quando trova un determinato dato lo inserisce nella cella e poi passa a quella sottostante. Ora quello che sto cercando di fare è che se le celle stanno in un altro foglio dentro a una tabella di cinque righe e possibile che quando le celle colonna 1 superano i 5 dati passare alla colonna 2 se superano i 10 passano alla colonna 3


     
    Sub prova()
    
     Dim x As Integer
    
        With Foglio1
    
       For x= 5 To 278
                If Cells(x, 6).Value = Cells(284, 26) Then
                    .Cells(95 + riga, 1) = Cells(x, 2) & Cells(x, 3)
                    .Cells(95 + riga, 2) = Cells(x, 4)
                    riga = riga + 1
                End If
         Next x
        End With



  • di totygno71 data: 12/03/2013 20:06:27

    Io definirei il range!



  • di Vecchio Frac data: 12/03/2013 20:34:35

    Ti serve conoscere la funzione Mod che restituisce il resto di una divisione.
    0 Mod 5 restituisce 5 (perchè 0 diviso 5 dà 0 col resto di 5)
    1 Mod 5 restituisce 1 (perchè 1 diviso 5 dà 0 col resto di 1)
    6 Mod 5 restituisce ancora 1 (6 diviso 5 fa 1 col resto di 1)
    A te interessa sia il risultato intero che il resto, perchè il risultato intero ti dà la posizione della riga, aumentato di uno perchè la prima riga sarebbe la n° 0; mentre il resto ti fornisce la posizione nella colonna relativa di cinque elementi.

    Cioè in pratuica il 157° dato si trova alla (1575 + 1) = 32.ma riga e alla 157 mod 5 = 2.a colonna.
    Fai tu i tuoi conti :)




  • Mi sono spiegato Male :(
    di zagor71 (utente non iscritto) data: 16/03/2013 00:19:35

    Scusate forse mi sono spiegato male
    Volevo dire se si puole fare con un ciclo For alternare con due colonne i dati per recuperare dello spazio.
    ES: dato 1 in cella A1 dato 2 in cella B1
    dato3 in cella A2 dato 4 in cella B2
    e cosi via .....




  • di totygno71 data: 16/03/2013 09:24:49

    @Zagor71

    mmm... Se prima avevo capito poco... ora son certo di NON aver capit nulla.... O_o
    POtresti allegare un esempio anche minimo?

    Ciao



  • di Vecchio Frac data: 16/03/2013 10:37:58

    In effetti le richieste dei due post sono diverse ^_^
    Voto anch'io a favore di un esempio pratico :)




  • Mi sono spiegato Male2 la vendetta :-)
    di zagor71 (utente non iscritto) data: 16/03/2013 14:50:13

    Provo a spiegarmi meglio,
    Nel Foglio1 nella prima colonna ho la nazione, nella seconda colonna il nome, nella terza cognome.
    Nel foglio2 ho creato una serie di tabelle da 10 righe (A1:A10) x 4 colonne(A1:D1) ogni tabella è una nazione.
    Ora, ogni volta che mi trova Italia mi inserisce il nome e cognome nella apposita tabella (foglio2) e qui tutto bene, il problema è che se trova piu' di dieci Dati (ES:italiani) escono dalla tabella.
    La mia domanda era: Se è possibile che i dati una volta completate le 10 righe (Foglio2 A10) possano passare alla colonna B1 e le successive?
    O ancora meglio, se è possibile alternare ES: A1 (primo nome e cognome di persona) B1(secondo nome e cognome di persona) A2(terzo nome e cognome di persona) B2(quarto nome e cognome di persona) e cosi via..
    Spero di essere migliorato nella spiegazione della mia richiesta :)
    Grazie per la pazienza...

     
     Dim x As Integer
    
        With Foglio2
    
       For x= 1To 100
                If Cells(x, 1).Value =  "italia"  Then
                    .Cells(1 + riga, 1) = Cells(x, 2) & Cells(x, 3)
                    riga = riga + 1
                End If
         Next x
        End With



  • di Zagor71 data: 17/03/2013 15:27:14

    NUSSUNO



  • di rita (utente non iscritto) data: 18/03/2013 13:45:35

    ho minimamente capito quello che vuoi
    prova l'istruzione ... molto spartana qui sotto se puo' fare al caso tuo

     
    Sub ESTRAI()
    Application.ScreenUpdating = False
    CONTA = Application.WorksheetFunction.CountA(Foglio1.Range("A1:A65000"))
    NUM = 1
    For I = 1 To CONTA
    If Range("a" & I) = "ITALIA" Then
    VALORE = Range("B" & I) & " " & Range("C" & I)
    Foglio2.Range("A" & NUM) = VALORE
    NUM = NUM + 1
    End If
    Next I
    Foglio2.Select
    If Range("A11") <> "" Then
    Range("A11:A65000").Cut
    Range("B1").Select
    ActiveSheet.Paste
    End If
    If Range("B11") <> "" Then
    Range("B11:B65000").Cut
    Range("C1").Select
    ActiveSheet.Paste
    End If
    If Range("C11") <> "" Then
    Range("C11:C65000").Cut
    Range("C1").Select
    ActiveSheet.Paste
    End If
    If Range("D11") <> "" Then
    Range("D11:D65000").Cut
    Range("D1").Select
    ActiveSheet.Paste
    End If
    Application.ScreenUpdating = True
    End Sub
    


  • Mi sono spiegato Male2 la vendetta :-)
    di zagor71 (utente non iscritto) data: 21/03/2013 18:39:27

    Graze rita, quello che volevo era una cosa del genere .
    ma ho un problema, come vedi nel secondo esempio e non nel primo che è sbagliato, nel foglio1 ho i dati e nel foglio2 o una decica di tabelle alte 10 linee e larghe 4 colonne che partono dalla prima linea a scendere .
    Ora se eseguo la macro tutto funziona bene, ma se trova +1O dati( le tabelle sono alte 10 linee) mi escono dalla tabella del foglio2.
    Quello che mi hai consigliato potrebbe andare anche bene l'unica cosa e che taglia tutte le altre tabelle :(
    Grazie
    Ricordo che sono alle prime armi

     
        Sub riposo()
     Dim ripososett As Integer, col As Integer
    
       col = 5 + Cells(1, 38)      'Giorno del mese (cambiando il N° nella cella cambia il giorno la "colonna" ) 
        With Serv
        'RIPOSO SETTIMANALE
       For ripososett = 5 To 278
                If Cells(ripososett, col).Value = Cells(284, 26) Then
                    .Cells(95 + riga, 1) = Cells(ripososett, 2) & Cells(ripososett, 3)
                    .Cells(95 + riga, 2) = Cells(ripososett, 4)
                    riga = riga + 1
                End If
         Next ripososett
        End With
    End Sub