Copiare i valori delle righe adiacenti

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Bruno.Corbelli
00mercoledì 23 marzo 2016 16:30
Salve, avrei la necessità di copiare alcune righe adiacenti (sopra e sotto) ad una cella con un determinato valore.

Ho visto qualcosa che potrebbe fare al caso mio al Post: 1,836 di freeant7@forum

Sarebbe possibile avere lo stesso file di esempio ?

Grazie in anticipo
alfrimpa
00mercoledì 23 marzo 2016 16:40
Ciao Bruno

Ora che hai scritto il primo post dovresti riuscire a scaricare il file che hai citato.

Qualora non facesse al caso tuo specifica meglio le tue esigenze allegando un file di esempio.
Bruno.Corbelli
00mercoledì 23 marzo 2016 18:00
Copiare i valori delle righe adiacenti
Grazie,
purtroppo non fa al caso mio.

In pratica, il mio problema e quello di copiare in un altro foglio alcune righe sopra e sotto la o le righe contenenti il testo che indicherò in un box di ricerca.
Il numero di queste righe potrebbe variare.
Es. Se mi serviranno 3 righe sopra e sotto la riga X, necessiterei di copiare un blocco di 7 righe. (3 righe sopra + riga X + 3 righe sotto)

Se qualcuno potesse aiutarmi con una macro sarebbe fantastico !

bc
patel45
00mercoledì 23 marzo 2016 18:23
dov'è il file di esempio che ti è stato chiesto ?
Bruno.Corbelli
00mercoledì 23 marzo 2016 18:54
Copiare i valori delle righe adiacenti
Il file lo ha allegato freeant7@forum

freeant7@forum, 5/29/2009 9:15 PM:

Quindi, se ho capito, non ti serve accodare i dati, devi solo prima di copiarli applicare il filtro in base ai criteri "1" e "P", altrimenti, se lanci due volte la macro avresti dei dati doppioni accodato alla pagina 2.
Ho rifatto la macro applicando il filtro al foglio1 sulla colonna b in base agli 1 e alle P poi ho temporaneamente copiato questi dati al Foglio2 e poi dopo aver tolto il filtro al Foglio1 ho spostato i dati del Foglio2 alla pagina 2 del Foglio1 con inizio cella A51
La macro è questa

Sub Copia()
Application.ScreenUpdating = False
Columns("B:B").Select
Selection.AutoFilter
ActiveSheet.Range("$B$1:$B$100").AutoFilter Field:=1, Criteria1:="<>"
Range("A2:A45").Select
Selection.Copy
Sheets("Foglio2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Foglio1").Select
Application.CutCopyMode = False
Selection.AutoFilter
Sheets("Foglio2").Select
Range("A1:A45").Select
Selection.Copy
Sheets("Foglio1").Select
ActiveWindow.SmallScroll Down:=18
Range("A51").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=-21
Range("A1").Select
Sheets("Foglio2").Select
Columns("A:A").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("A1").Select
Sheets("Foglio1").Select
End Sub

da copiare in un modulo standard, poi al pulsante (commandButton) del foglio1 associ il seguente


Private Sub CommandButton1_Click()
Call Copia
End Sub

se invece vuoi utilizzare un pulsante normale, basta che ci clicchi col tasto e associ la macro "Copia"
Ti allego l'esempio modificato.
Per allegare i file puoi farlo anche direttamente sul forum, basta che levi i dati sensibili, poi quando scrivi il messaggio metti il segno di spunta sotto accanto a "Allega un file dal tuo computer a questo messaggio" e selezioni il file (deve essere zippato).

Ciao
Antonio





questo è il link del file:

http://www.freeforumzone.com/allegato.aspx?idd=8594187&idm=94313976&ida=1880991
alfrimpa
00mercoledì 23 marzo 2016 19:09
Ciao Bruno

Perché non provi a descrivere quello che ti serve allegando un file di esempio a prescindere dal passato?
Bruno.Corbelli
00giovedì 24 marzo 2016 11:50
Copiare i valori delle righe adiacenti
Ok, ci provo.

Nel foglio1 del file allegato ho una serie di righe nelle quali devo cercare un testo che potrebbe essere anche ricorrente e, una volta trovato ne dovrò copiare, in un altro foglio, la riga contenente il testo stesso ed un numero di righe sopra e sotto, creando così un blocco di righe.
Siccome potrebbero esserci più blocchi analoghi, nel caso dovrebbero essere accodati nel foglio di destinazione.

Nel Foglio2 ho copiato ed accodato dal foglio1 i blocchi di 23 righe (11 sopra la riga trovata ed altrettante sotto) con una ricerca manuale del testo: brand>Pinko<

Avrei appunto bisogno di automatizzare questo processo con una macro o una formula complessa.

Spero di essere stato sufficientemente chiaro.


bc
ninai
00giovedì 24 marzo 2016 12:42
ciao
premetto che è un quesito "spudoratamente" da VBA, ma giusto per partecipare con le formule:
per parametrare il procedimento e renderlo dinamico:
in C1: 23 (11+11+1)
in D1: la stringa da cercare (compreso gli spazi vuoti)
in A1:
=INDICE(Foglio1!$A$1:$A$327;AGGREGA(15;6;RIF.RIGA(Foglio1!$A$1:$A$327)/(Foglio1!$A$1:$A$327=$D$1)-INT($C$1/2)+RESTO(RIF.RIGA()+$C$1-1;$C$1);1+INT((RIGHE($A$1:A1)-1)/23)))

e trascini in basso.

Non ho lasciato la riga vuota fra un blocco e l'altro.

EDIT
ho appena notato che hai il 2007 (non riconosce AGGREGA() ), devi sostituire in A1:
=INDICE(Foglio1!$A$1:$A$327;PICCOLO(SE(Foglio1!$A$1:$A$327=$D$1;RIF.RIGA(Foglio1!$A$1:$A$327)-INT($C$1/2)+RESTO(RIF.RIGA()+$C$1-1;$C$1));1+INT((RIGHE($A$1:A1)-1)/23)))
questa è da confermare con CTRL+MAIUSCOLO+INVIO
patel45
00giovedì 24 marzo 2016 12:59
soluzione vba
Sub a()
Tofind = ">Pinko<"
n = 3 ' numero righe da copiare sopra e sotto
drow = 1
With Sheets(1)
  LR = .Cells(.Rows.Count, "A").End(xlUp).Row
  With .Range("A1:A" & LR)
    Set c = .Find(Tofind, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Row
        Do
          Set c = .FindNext(c)
          crow = c.Row
          .Range("A" & crow - n & ":A" & crow + n).Copy Sheets(2).Range("A" & drow)
          drow = drow + 2 * n + 2
        Loop While Not c Is Nothing And c.Row <> firstAddress
    End If
  End With
End With
End Sub
Bruno.Corbelli
00giovedì 24 marzo 2016 13:14
Copiare i valori delle righe adiacenti
Scusa ninai ma proprio non riesco a farlo funzionare!
Potresti uploadare il file di esempio ?

Grazie

Bruno
Bruno.Corbelli
00giovedì 24 marzo 2016 13:18
Copiare i valori delle righe adiacenti
Grazie patel45
chiedo anche a te la cortesia di uploadare il file di esempio.

Siete fantasticamente rapidi.

Grazie

bc
ninai
00giovedì 24 marzo 2016 13:25
mia soluzione nel foglio3

https://www.dropbox.com/s/xp436dde240ly17/ninai%20estrai.xls?dl=0
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 02:43.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com