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.