Ciao,
sono alle prese con un altro problema che riguarda le mie tabelle, ma per spiegarlo in breve e senza confusione devo ricostruirne il percorso con una premessa, usando anche alcune immagini:
- in foglio2 (rif. il file-prova) abbiamo la TABELLA2 che elenca in varie colonne (H:AG) dei codici e la colonna AH che elenca un codice interno
- filtrando di volta in volta il cod. di una colonna della TABELLA2 e il cod. di col.AH otteniamo dei dati, come in questa immagine:
- mediante una macro abbiamo fatto effettuare queste operazioni congiunte di filtro in tutta la TABELLA2 e col.AH , macro che ci riporta il tutto in una tabella Pivot (nel foglio TabPivot) in cui vengono evidenziati, come in queste immagini:
a) col.B e U (idem C e V, nascoste): i cod. di col.AH di foglio2
b) col.D e W: tutti i codici di TABELLA2
c) da col.E a col.Q e da col.X a col.AJ: il numero di righe compilate, riscontrate durante ciascuna operazione congiunta di filtro TABELLA2/ col.AH; ad esempio cella I29=10, ottenuto filtrando in foglio2 il cod.23 di col.L con il cod.1 di col.AH che evidenzia appunto 10 righe
Ora, per altri fini di statistica e monitoraggio dei dati devo, grazie a questa stupenda tabella Pivot, evidenziare in un foglio (che in pratica è la copia del foglio2 senza celle bordate e colorate) la cella del codice che nel ns. esempio di cui sopra ha generato il valore 10 di cella I29, che come vediamo è il cod.23 di col.L di riga 569. Avendo sperimentato che il sistema della bordatura delle celle da evidenziare è assai valido, vorrei poterlo applicare anche in questo caso con l’accortezza di usare un diverso colore (che imposterò di volta in volta nella macro) a seconda del valore che sto isolando: ad esempio il valore 10 (righe) ha il rosso, l’11 (righe) ha il blu etc. come nell'immagine d'insieme relativa alla tabella preparata per il valore 10
da cui si ricava che:
col.J riga 4, il cod.117 filtrato con il cod.6 di col.AH ha generato una tabella di 10 righe
col.P riga 5, il cod.64 filtrato con il cod.5 di col.AH ha generato una tabella di 10 righe
col.M riga 6, il cod.72 filtrato con il cod.4 di col.AH ha generato una tabella di 10 righe
col.AA riga 6, il cod.45 filtrato con il cod.4 di col.AH ha generato una tabella di 10 righe
etc.
Per comodità riporto in sequenza le macro, adattate alle mie tabelle:
-Confronto tra tabella2 e col. AH e compilazione tabella Pivot
Code:Sub confronta_Tabelle2()
Application.ScreenUpdating = False
With Sheets("TabPivot")
.Cells.Clear
End With
Intab2 = 8
Ftab2 = 20
Pr = 1
For Tab2 = 1 To 2
Range("AK2:BH" & Rows.Count).ClearContents
'Range("AK2:bH65536").ClearContents
uriga = Range("H" & Rows.Count).End(xlUp).Row
Riga = 2
col = 37
n = 34
For A = Intab2 To Ftab2
For i = 3 To uriga
Cells(Riga, col).Value = Cells(i, n).Value
Cells(Riga, col + 1) = n
Cells(Riga, col + 2) = A
Cells(Riga, col + 3) = Cells(i, A).Value
ctrl = True
If ctrl Then
Riga = Riga + 1
Else
Riga = Riga
End If
ctrl = False
Next i
Next A
A = 33
Call CreaPivot2
Pr = Pr + 1
Sheets("foglio2").Select
col = col
Riga = 2
Intab2 = 21
Ftab2 = 33
Next Tab2
Application.ScreenUpdating = True
End Sub
Sub CreaPivot2()
Select Case Tab2
Case 1
colp = 3
Rtab = Sheets("TabPivot").Cells(Rows.Count, colp).End(xlUp).Row + 3
Case 2
colp = 22
Rtab = Sheets("TabPivot").Cells(Rows.Count, colp).End(xlUp).Row + 3
End Select
Set Rng = Cells(1, col).CurrentRegion
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Rng.Address).CreatePivotTable TableDestination:=Sheets("TabPivot").Cells( _
Rtab, colp), TableName:="Tabella_pivot" & Pr
Sheets("TabPivot").Select
ActiveSheet.PivotTables("Tabella_pivot" & Pr).SmallGrid = False
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Numero")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Compon.")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Numero")
.Orientation = xlDataField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Somma di Numero")
.Function = xlCount
.Caption = "conteggio di numero"
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Tab2")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Tab1")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tabella_pivot" & Pr).ColumnGrand = False
ActiveSheet.PivotTables("Tabella_pivot" & Pr).RowGrand = False
Set Rng = Nothing
End Sub
- Ricerca della sogente in foglio2
Code:Sub CercaSorgente_AH()
With Sheets("TabPivot")
Riga = ActiveCell.Row
col = ActiveCell.Column
Select Case col
Case 5 To 17
Y = 2
Z = 4
Case 24 To 36
Y = 21
Z = 23
End Select
NrTab1 = 34
Nrtab2 = .Cells(6, col).Value
Nr = .Cells(Riga, Y).Value
Comp = .Cells(Riga, Z).Value
End With
With Sheets("Foglio2")
Set area = .Range("AH2", .Range("AH2").End(xlDown))
For Each cl In area
If cl.Value = Nr And Comp = .Cells(cl.Row, Nrtab2).Value Then
CellRif = .Cells(cl.Row, Nrtab2).Address
MsgBox ("Il Valore selezionato è riferito" & vbCrLf _
& "alla Cella " & CellRif & " del Foglio2 ")
Exit For
End If
Next
End With
Sheets("foglio2").Select
If ActiveSheet.FilterMode = True Then
Selection.AutoFilter
End If
Range("A1:AH1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=NrTab1, Criteria1:=Nr
Selection.AutoFilter Field:=Nrtab2, Criteria1:=Comp
End Sub
Certo è che di macro che ruotano intorno alle mie tabelle, carissimo
a10n11, me ne hai scritte davvero tante e mai e poi mai mi sarei immaginato di poter trovare ad ogni mio problema (spesso assai difficile, se non impossibile, da comprendere per un Osservatore esterno) soluzione più eccellente di quella da te propostami… posso quidi affermare che di sicuro chiuderò quest’anno- per molti aspetti assai difficile- in super-bellezza…
Grazie solo a te, e di questo te ne sarò grato in Eterno ;)))
Grazie infinite, saluti
eZio