+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

Copiare righe in base a condizione

  1. #1
    andreas21 non  in linea Novello
    Salve a tutti...ho una tabella compresa tra A2 e E7.
    Devo copiare tutte le righe che presentano una determinata condizione a partire dalla cella A12
    La condizione che se trovo nella colonna C un valore minore o uguale del valore della cella B10

    Ho provato questo codice ma non va:

    Sub copiarighe()
    Sheets("Foglio1").Select
    ActiveSheet.Range("$C$2:$C$7").AutoFilter Field:=1, Criteria1:="<=Range("B10)"
    Range("A2:E7").Select
    Selection.Copy
    Sheets("Foglio1").Select
    Range("A12").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A12").Select
    Sheets("Foglio1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Range("A12").Select
    End Sub

    Sapete dirmi cosa sbaglio o se c' un codice che pi facile da applicare? Grazie

  2. #2
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Ciao
    evidentemente questa riga ti segnala errore e quindi la macro non parte:

    ActiveSheet.Range("$C$2:$C$7").AutoFilter Field:=1, Criteria1:="<=Range("B10)"
    da sostituire con:
    ActiveSheet.Range("$C$2:$C$7").AutoFilter Field:=1, Criteria1:="<=" & Range("B10")
    
    Puoi semplificare considerando che il Copy ha insito il Past, per esempio:
    Sub copiarighe()
     Sheets("Foglio1").Select
     ActiveSheet.Range("$C$2:$C$7").AutoFilter Field:=1, Criteria1:="<=" & Range("B10")
     Range("A2:E7").Select
     Selection.Copy Destination:= Range("A12")
     Selection.AutoFilter
     Range("A12").Select
    End Sub
    
    Che necessit hai poi di avere nello stesso foglio valori duplicati...lo sai tu...

    saluti

  3. #3
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Ciao
    chiedo scusa ma "predico bene" e "razzolo male"...:
    Sub copiarighe()
     Sheets("Foglio1").Select
     Range("$C$2:$C$7").AutoFilter Field:=1, Criteria1:="<=" & Range("B10")
     Range("A2:E7").Copy Destination:=Range("A12")
     Selection.AutoFilter
     Range("A12").Select
    End Sub
    
    Funzionava lo stesso, ma....

    saluti

  4. #4
    andreas21 non  in linea Novello
    Quote Originariamente inviato da dodo47 Visualizza il messaggio
    Ciao
    chiedo scusa ma "predico bene" e "razzolo male"...:
    Sub copiarighe()
     Sheets("Foglio1").Select
     Range("$C$2:$C$7").AutoFilter Field:=1, Criteria1:="<=" & Range("B10")
     Range("A2:E7").Copy Destination:=Range("A12")
     Selection.AutoFilter
     Range("A12").Select
    End Sub
    
    Funzionava lo stesso, ma....

    saluti
    Ti ringrazio, purtroppo si verifica un problema. Mi copia tutte le righe che sono minori del valore B10, per mi copia anche la prima riga in cui il valore maggiore di B10, ma sinceramente non capisco il motivo

  5. #5
    Potremmo pensare ad un ciclo For Next e una condizione IF <= all'interno del ciclo.
    Che ne dite?

    A disposizione.

    Giuseppe

  6. #6
    andreas21 non  in linea Novello
    Quote Originariamente inviato da GiuseppeMN Visualizza il messaggio
    Potremmo pensare ad un ciclo For Next e una condizione IF <= all'interno del ciclo.
    Che ne dite?

    A disposizione.

    Giuseppe
    Sono riuscito a farlo riuscire mettendo la colonna che mi interessava in ordine crescente di numero.
    Adesso il mio problema questo, come faccio a copiare tutte le righe che soddisfano il codice che mi ha scritto "dodo47", che siano non nulle. Cio mi si presentano delle righe vuote, e facendo la condizione <= di un certo numero, mi copia anche queste. Come faccio a non farle copiare eseguendo quel codice?

  7. #7
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Ciao
    forse saggio seguire le indicazioni di Giuseppe (ciao).
    L'ordinamento (secondo me) non c'entra nulla. Un filtro un filtro.
    Se il criterio <= x, le righe di col. C che presentano celle vuote, vengono filtrate e, quindi non visibili.

    Facci un esempio concreto di quello che hai e quello che vuoi.

    Rileggendo bene tu dici: "La condizione che se trovo nella colonna C un valore minore o uguale del valore della cella B10"
    Ora con quella routine il filtro viene applicato comunque a tutta la tabella (da A2 a E7) - prova in debug e vedrai - pertanto il "field" deve essere 3 (cio colonna C).

    Tieni presente che se in A1..E1 hai le intestazioni, le devi includere. Nel caso prova:
    ...
    Range("$A$1:$E$7").AutoFilter Field:=3, Criteria1:="<=" & Range("B10")
    ....

    saluti

  8. #8
    andreas21 non  in linea Novello
    Quote Originariamente inviato da dodo47 Visualizza il messaggio
    Ciao
    forse saggio seguire le indicazioni di Giuseppe (ciao).
    L'ordinamento (secondo me) non c'entra nulla. Un filtro un filtro.
    Se il criterio <= x, le righe di col. C che presentano celle vuote, vengono filtrate e, quindi non visibili.

    Facci un esempio concreto di quello che hai e quello che vuoi.

    Rileggendo bene tu dici: "La condizione che se trovo nella colonna C un valore minore o uguale del valore della cella B10"
    Ora con quella routine il filtro viene applicato comunque a tutta la tabella (da A2 a E7) - prova in debug e vedrai - pertanto il "field" deve essere 3 (cio colonna C).

    Tieni presente che se in A1..E1 hai le intestazioni, le devi includere. Nel caso prova:
    ...
    Range("$A$1:$E$7").AutoFilter Field:=3, Criteria1:="<=" & Range("B10")
    ....

    saluti
    Ho risolto tutti problemi, l'unico che mi rimasto che quando eseguo il codice mi copia sempre la prima riga, v faccio l'esempio:

    ho una tabella cos fatta (va da A2 a E8, compresa l'intestazione)
    JOB | pi | ri | di | wi
    1 | 2 | 22 | 24 | 1
    2 | 6 | 3 | 9 | 9 |
    3 |5 | 7 | 13 | 1
    fino ad arrivare a 6.

    ho un cella che inizialmente impostata a 3 (cella H5). Voglio che tutte le righe il cui valore nella colonna ri minore o uguale della cella H5, vengano copiate a partire dalla cella A19.

    Il codice che ho usato questo:

    Sheets("Foglio1").Select
    Range("$C$3:$C$8").AutoFilter Field:=1, Criteria1:="<=" & Range("H5")
    Range("A3:E8").Copy Destination:=Range("A19")
    Selection.AutoFilter
    Range("A19").Select

    Perci se lo eseguo mi copia le prime 2 righe, ovvero la prima che non capisco il motivo poich il valore maggiore di 3, e la seconda che giusta

  9. #9
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Ciao
    ti ho gi risposto, salvo errori:
    ...Field:=3...

    saluti

  10. #10
    andreas21 non  in linea Novello
    ti ringrazio davvero, ho finito il mio lavoro. Grazie infinite!

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 20
    Ultimo Post: 23-07-2017, 14:26
  2. Risposte: 3
    Ultimo Post: 31-05-2016, 15:57
  3. copiare tabella sotto condizione
    Da Monica67 nel forum Microsoft Excel
    Risposte: 8
    Ultimo Post: 18-07-2013, 11:33
  4. Eliminare record da un elenco in base a una condizione
    Da andreas21 nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 04-02-2013, 16:43
  5. Risposte: 0
    Ultimo Post: 08-10-2012, 17:18