Condividi:        

Excel, cerca e copia valori da file A a file B

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel, cerca e copia valori da file A a file B

Postdi fla83 » 13/01/10 16:13

Buongiorno a tutti,

leggo spesso il forum quando smanetto su VBA, ma questa volta il problema è più serio e siccome non sono un fulmine di guerra con Vb avrei bisogno di una mano...

vorrei creare una macro con 2 contatori per copiare un valore di una cella del file B nel file A
contatore 1: in un file A che prenda, per ogni riga, il numero di un ODL-ordine di lavoro (quindi cells(x,1)), e che trovi questo numero in un file B che ha la stessa disposizione cells(y,1).
So che per passare da un file all'altro si utilizza la funzione:
windows(activewindow.index+1).activate
Il problema è che questa ricerca la farei con:
If sheets(fogliofileA).cells(x,1)=sheets(fogliofileB).cells(y,1) ...non saprei dove mettere la funzione!!

contatore 2: una volta individuato il numero ODL sul file B, vorrei fare una verifica per trovare il valore da copiare, del tipo:
for z=2 to 30
for t=2 to 30
for u=2 to 30
If sheets(fogliofileB).(cells( (4,z)&(5,t) ).value = sheets(fogliofileA).cells(2,u).value 'a sinistra ho un merge di due celle
then
'ora copio il valore dato dall'incrocio tra la riga y trovata e cells((4,z)&(5,t)) e lo incollo
cells(y,...).select
selection.copy
Windows(ActiveWindow.Index + 1).Activate
row(x).select
'qui devo selezionare la cella ha riga=x, colonna=cells(2,u)
ActiveSheet.Paste

insomma un delirio per le mie capacità!
forse non è neanche troppo chiaro!
saluti a tutti
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Sponsor
 

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 13/01/10 16:33

Ciao fla83 e benvenuto nel forum.

Per la prima domanda, userai qualcosa come
If sheets(fogliofileA).cells(x,1)=worksheets("SecondoFile.xls").sheets(fogliofileB).cells(y,1)
(lavora su "activeworkbook" e su SecondoFile.xls)

Tuttavia non sono certo che l' approccio che stai usando (un ciclo For x /For y -Next y /Next x ?) sia il piu' semplice. Ad esempio forse potrebbe essere piu' utile l' uso di WorksheetFunction.Match, che ti evita il ciclo For y-Next y.

Per il secondo quesito, se descrivi la struttura dati possiamo aiutarti meglio, altrimenti dobbiamo fare il reverse engineering di quello che tu chiami "delirio"...

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel, cerca e copia valori da file A a file B

Postdi fla83 » 13/01/10 17:30

grazie Anthony,
sì in effetti stavo pensando ad un alternativa visto che mi sembra troppo complicato con i for to.
la struttura dati invece è la seguente:

-file A: 30 righe, colonna1: numero ODL, colonna 2: "SR1", colonna3: "SR2"...fino 5 poi colonna7: "L1",...colonna11:"L5"
(il contenuto delle colonne da 2 a 15 è il risultato di un merge tra 2 celle, ad es: SR1=celle "SR"&cella"1")
-file B: stesse righe,le colonne invece hanno la seguente struttura e sono in una tabella pivot...
| SR | | | | | L | | | | | V | | | | |
| 1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5 |
odl 1| 0,3|.....|
odl 2|.....|.....|
praticamente il secondo passaggio, una volta individuata la riga, è quello di prendere il valore della cella con colonna "SR&1" (quindi "SR1"), in questo caso "0,3" e copiarlo nel file A, individuando la riga con lo stesso numero di odl e la colonna denominata "SR1".
Il ciclo continua con SR2, SR3 per passare a L1,.... fino a V5.

forse così è più chiaro.

ci sono anche 2 note:
- come notate, nella prima riga del foglio B, ho solo una voce SR, una voce L e una voce V dato che si tratta di una pivot.
- non posso utilizzare un copia range, devo per forza copiare cella per cella!

flavio
-
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 14/01/10 01:42

Mah.. la descrizione non e' venuta chiarissima perche' le colonne non sono facilmente rappresentabili nel testo.
Riesci ad allegare lo screenshot di ambedue i fogli? Trovi le istruzioni qui: viewtopic.php?f=26&t=80395&p=466013#p466013

La mia impressione e' che si possa facilmente fare con formule.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel, cerca e copia valori da file A a file B

Postdi fla83 » 18/01/10 12:02

Ciao Anthony,

ecco il link al file A: Immagine
e il link al file B: Immagine

spero vi possano essere di aiuto!

saluti
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 18/01/10 14:25

Prendiamo per esempio (su fileA) odl 1000: che cosa vuoi mettere sotto le colonne SR37 ed SR69, rispetto a quanto contenuto in FileB? Idem per L69 e 570 (L570?)
Con questi esempi spero di dedurre la logica...

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel, cerca e copia valori da file A a file B

Postdi fla83 » 18/01/10 14:53

si in effetti hai ragione, ho dimenticato di correggere il file A. "SR37" equivale è un merge di due celle (SR&37) e corrisponde, sul file B, alla colonna C: SR1. "SR69" equivale, sul file B, alla colonna D: "SR2",..., fino a "L570" che corrisponde sul file B alla colonna H: "L1"

quindi nel file A, sulla riga ODL=1000:
- sotto la colonna SR37 dovrei copiare il valore "1,2" del file B
- sotto la colonna SR69, il valore "2,2"...
-sotto la colonna SR9998, il valore "4,2"
-sotto la colonna L69, il valore "5,2"....

Le lettere rappresentano i reparti, mentre i numeri rappresentano gli operatori (ad es. la persona 37 nel file A = persona 1 nel file B nel reparto SR, mentre nel reparto L, la persona 37 nel file A = persoan 1 nel file B).
Inoltre la struttura del file A non può essere modificata, e il file B è una pivot!!

grazie per la pazienza!
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 18/01/10 21:33

Sono ancora a fare domande:
visto che non c' e' nussuna relazione (a me nota) tra le intestazioni di FileA e quelle di FileB, vuol dire che "e' garantito" che per ogni colonna di fileA ce n' e' una su FileB e che la sequenza sia rispettata?
E i numeri Odl sono nello stesso ordine, quindi esattamente uguali?
Se SI,
-quale e' il bisogno di replicare i dati in un altro file?
-hai gia' pensato di farlo mettendo in FileA, ad esempio sulla cella 1000/SR37 la formula =[fileB]Fogliox!C4, e poi copiarla sulle celle adiacenti?

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel, cerca e copia valori da file A a file B

Postdi fla83 » 22/01/10 11:35

Grazie Anthony,

la risposta è NO, le righe del file B non sono nello stesso ordine del file A. Anche le colonne sono in ordine diverso. Per questo pensavo ad un If then.
è però garantito che per ogni riga del file A ne esiste una nel file B, ma non con la stessa sequenza.

ciao
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 22/01/10 14:39

Humm...
Perdona, ma allora quale e' il criterio con cui associ SR/1 di FileB con SR37 di FileA (e ovviamente tutti gli altri numeri di FileB con le rispettive sigle in FileA)??

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel, cerca e copia valori da file A a file B

Postdi fla83 » 22/01/10 16:00

ciao anthony,
ti allego le 2 immagini dei file corrette, e più chiare.
fileA:
[img][IMG]http://img63.imageshack.us/img63/9443/filea.jpg[/img][/img]

fileB:
[img][IMG]http://img59.imageshack.us/img59/6685/fileb.jpg[/img][/img]

Premessa: questi due file contengono delle ore produttive, assegnate a diverse persone ("37","69",...) che lavorano in diversi reparti ("SR","L"). E ogni persona puo lavorare in piu reparti.
quindi quello che vorrei fare è ad esempio:
- per ogni ODL del file A, cercarlo nel file B (la sequenza delle righe è diversa nei 2 file)
- trovato l'odl corrispondente nel file B, copiare il contenuto della cella C4 del file B, nella cella G10 del file A...
-copiare il contenuto della cella K4 del fileB nella cella M10 del file A.
e passare alla riga successiva del file A.

per avere infine, per es, per l'odl numero 1000: F10(fileA)=D4(fileB), G10=C4,H10=E4,I10=F10,...M10=K4.

il problema è che devo effettuare dei cicli di ricerca sul fileB per cercare il reparto (ad es. "SR") e la persona (ad es "37") a cui è assegnato un valore (sono ore produttive) da copiare nel fileA, assegnandola allo stesso reparto e persona.

ti ringrazio per la pazienza!
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Re: Excel, cerca e copia valori da file A a file B

Postdi fla83 » 22/01/10 16:05

ops, ecco le immagini:

fileA:
Immagine
fileB:
Immagine
fla83
Newbie
 
Post: 7
Iscritto il: 13/01/10 15:48

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 22/01/10 17:41

La nuova immagine di FileB ha una certa differenza rispetto a quella primitiva, in quanto le colonne non sono (riga 3) intestate 1, 2, 3, ... ma 69, 37, 570,...; cioe' come sono intitolate anche su FileA.
Con queste informazioni sono in grado di darti una proposta, ma potro' lavorarci solo ..piu' tardi.

Pero' non capisco quale e' la differenza tra le informazioni su tabella pivot e quella su FileA, a parte i colori; cioe' non capisco la finalita' del lavoro.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel, cerca e copia valori da file A a file B

Postdi Anthony47 » 24/01/10 00:13

Non sono certo che il lavoro abbia un senso (vedi post precedente), comunque si puo' provare in questo modo:
-la tabella pivot e' su FileB.xls, foglio Pivot
-si trasportare i dati da pivot su FileA.xls
-la struttura dati du FileA e' quella riportata qui: viewtopic.php?f=26&t=84440&p=481826#p481812; in particolare l' odl e' in col B e le intestazioni (sigla con Reparto e Persona) sono in riga 2
-sullo stesso topic c' e' la struttura dati di FileB; qui la regola che applichero' e' che il codice Reparto e' nella riga X, il codice Personale e' in riga X+1, il dato da trasportare su FileA e' in riga X+N dove N corrisponde alla riga con pari odl.

Dopo questa premessa:
A)in un Modulo di codice del vba metti il seguente codice:
Codice: Seleziona tutto
Function GetCol(ByVal Id1n2, ByRef RepRange) As Integer
'restituisce il n° di colonna in cui IdRep e IdPers corrispondono a
'   Id1+Id2 di richiamo
'
Dim IdRep As String, CIDRep As String
Dim IdPers As Integer, I As Integer
'
For I = 1 To Len(Id1n2)
 If Not IsNumeric(Mid(Id1n2, I, 1)) Then IdRep = IdRep & Mid(Id1n2, I, 1)
 Next I
IdPers = Val(Replace(Id1n2, IdRep, ""))
GetCol = -111
For Each Cell In RepRange
 If Cell.Value <> "" Then CIDRep = Cell.Value
  If IdRep = CIDRep And Cell.Offset(1, 0).Value = IdPers Then
   GetCol = Cell.Column: Exit For
  End If
Next Cell
End Function

B)In FileA, cella F8 inserisci questa formula:
=INDICE([FileB.xls]Pivot!$A$1:$Z$100;CONFRONTA($B8;[FileB.xls]Pivot!$B:$B;0);Getcol(C$2;[ FileB.xls]Pivot!$C$2:Z$2))
In tale formula:
in rosso, l' area di foglio Pivot in cui si trova anche la tabella pivot; deve partire da A1, e finire su una riga/colonna che include qualsiasi risultato che si cerchera'; si puo' abbondare senza problemi.
In blu il range in cui sara' cercato il codice di reparto; deve essere su una sola riga e deve includere sia il primo codice (SR) che tutte le colonne in cui vi potrebbe essere un dato da prelevare, anche se privo di intestazione (quindi nell' esempio di FileB, almeno da C2 e almeno fino a K2; anche qui si puo' abbondare, ad esempio e' lecito usare A2:AZ2.
In verde e' l' intestazione di FileA che si cerchera' in FileB usando la riga del parametro in blu e la riga successiva.
La formula resituira' il valore, oppure #N/D se non si trova quell' odl, oppure #VALORE! Se non si trova quella coppia di Reparto + Persona.

Se hai xl2007 puoi anche provare in F8 la seguente formula; ma siccome non uso 2007 non l' ho collaudata interamente, quindi devi eventualmente debuggarla e modificarla in proprio:
Codice: Seleziona tutto
=INDICE([FileB]Pivot!$A$1:$Z$100;CONFRONTA($B8;[FileB]Pivot!$B:$B;0);CONFRONTA(SINISTRA(C$2;LUNGHEZZA(C$2)-SOMMA(--(VAL.NUMERO(VALORE(STRINGA.ESTRAI(C$2;RIF.RIGA($A$1:$A$20);1))))));[FileB]Pivot!$A$2:$Z$2;0)+CONFRONTA(--(DESTRA(C$2;SOMMA(--(VAL.NUMERO(VALORE(STRINGA.ESTRAI(C$2;RIF.RIGA($A$1:$A$20);1)))))));SCARTO([FileB]Pivot!$A$3;0;CONFRONTA(SINISTRA(C$2;LUNGHEZZA(C$2)-SOMMA(--(VAL.NUMERO(VALORE(STRINGA.ESTRAI(C$2;RIF.RIGA($A$1:$A$20);1))))));[FileB]Pivot!$A$2:$Z$2;0)-1;1;MIN(SE(SCARTO([FileB]Pivot!$A$2;0;CONFRONTA(SINISTRA(C$2;LUNGHEZZA(C$2)-SOMMA(--(VAL.NUMERO(VALORE(STRINGA.ESTRAI(C$2;RIF.RIGA($A$1:$A$20);1))))));[FileB]Pivot!$A$2:$Z$2;0);1;10)>"";RIF.COLONNA($A$2:$J$2);"")));0)-1)

Spero che abbia un senso.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel, cerca e copia valori da file A a file B":


Chi c’è in linea

Visitano il forum: Nessuno e 67 ospiti