Moderatori: Anthony47, Flash30005
Vedi che cosa succede quando un "database" invece di essere costituito da un insieme aggregato di dati e' disperso su N fogli?Ho un "database in excel" dove ho in prima colonna un codice identificativo alfanumerico e nella colonna g i codici costruttori.Questa Cartella di lavoro è composta da circa 26 fogli e ogni giorno su ogni foglio vengono aggiunte una 10 di righe.
Sub aggr()
Dim MyVArr, LastA As Long, I As Long, J As Long, K As Long
Dim SumSh As String
SumSh = "Summary"
Sheets(SumSh).Cells.ClearContents
'
For I = 1 To ThisWorkbook.Worksheets.Count
Sheets(I).Select
If ActiveSheet.Name <> SumSh Then
LastA = Cells(Rows.Count, 1).End(xlUp).Row
MyVArr = Range("A1:G" & LastA)
For J = LBound(MyVArr, 1) To UBound(MyVArr, 1)
Alrd = Application.Match(MyVArr(J, 1), Sheets(SumSh).Range("A1").Resize(K + 1, 1), 0)
If IsError(Alrd) Then
LastSA = Sheets(SumSh).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(SumSh).Range("A1").Offset(LastSA, 0) = MyVArr(J, 1)
Sheets(SumSh).Range("A1").Offset(LastSA, 1) = MyVArr(J, 7)
Sheets(SumSh).Range("A1").Offset(LastSA, 2) = ActiveSheet.Name
K = K + 1
Else
Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) = _
Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) + 1
End If
Next J
End If
Next I
End Sub
Anthony47 ha scritto:Ciao Alex_Lougher, benvenuto anche da parte mia.Vedi che cosa succede quando un "database" invece di essere costituito da un insieme aggregato di dati e' disperso su N fogli?Ho un "database in excel" dove ho in prima colonna un codice identificativo alfanumerico e nella colonna g i codici costruttori.Questa Cartella di lavoro è composta da circa 26 fogli e ogni giorno su ogni foglio vengono aggiunte una 10 di righe.
Il mio suggerimento e' che ti crei un ulteriore foglio nel file "database.xls" che riassuma in col A tutti i codici presenti e in B i Codici costruttori; poi farai un Cerca.Vert su questo foglio per estrarre il tuo dato, se ancora vorrai farlo.
Per questo ti servira' una macro come questa:
- Codice: Seleziona tutto
Sub aggr()
Dim MyVArr, LastA As Long, I As Long, J As Long, K As Long
Dim SumSh As String
SumSh = "Summary"
Sheets(SumSh).Cells.ClearContents
'
For I = 1 To ThisWorkbook.Worksheets.Count
Sheets(I).Select
If ActiveSheet.Name <> SumSh Then
LastA = Cells(Rows.Count, 1).End(xlUp).Row
MyVArr = Range("A1:G" & LastA)
For J = LBound(MyVArr, 1) To UBound(MyVArr, 1)
Alrd = Application.Match(MyVArr(J, 1), Sheets(SumSh).Range("A1").Resize(K + 1, 1), 0)
If IsError(Alrd) Then
LastSA = Sheets(SumSh).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(SumSh).Range("A1").Offset(LastSA, 0) = MyVArr(J, 1)
Sheets(SumSh).Range("A1").Offset(LastSA, 1) = MyVArr(J, 7)
Sheets(SumSh).Range("A1").Offset(LastSA, 2) = ActiveSheet.Name
K = K + 1
Else
Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) = _
Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) + 1
End If
Next J
End If
Next I
End Sub
La macro va inserita nel file Database; questo file deve contenere un foglio chiamato "Summary", che sara' inizialmente svuotato senza nessuna richiesta di conferma; in questo foglio verra' creato un elenco contenente:
-colonna A, la colonna A dei singoli fogli
-colonna B, la colonna G dei singoli fogli
-colonna C, il nome del foglio in cui quel valore e' stato trovato la prima volta
-colonna D, la conta di eventuali duplicati di quel valore (se si dovesse trovare su piu' fogli)
Come detto, la tua Cerca.Vert a questo punto lavorera' sui dati presenti nel foglio Summary.
Prova e fai sapere; e se non risolvi rispondi anche alle domende di Flash (vedi sopra).
Forse stai dicendo che hai deciso di usare l' approccio che ti ho suggerito? (anche se non capisco in che cosa consiste il rimante 66% del lavoro da fare)Grazie mille per il tuo aiuto Flash, il problema è quasi risolto del tutto
Anthony47 ha scritto:Per qualcosa simile al tasto Trova, con possibilita' di ricerca a livello di stringa o di parola intera dovresti guardare quanto sviluppato per trittico69 qui:
viewtopic.php?f=26&t=95607
Ciao
=INDICE('[es foglio codifica.xlsx]Summary'!$A:$A;CONFRONTA(H2;'[es foglio codifica.xlsx]Summary'!$E:$E;0))
Sub aggr()
Dim MyVArr, LastA As Long, I As Long, J As Long, K As Long, LastSA As Long
Dim SumSh As String
Workbooks("Foglio codifica Nuovo.xlsm").Activate
SumSh = "Summary"
Sheets(SumSh).Cells.ClearContents
'
For I = 2 To ThisWorkbook.Worksheets.Count
Sheets(I).Select
If ActiveSheet.Name <> SumSh Then
LastA = Cells(Rows.Count, 1).End(xlUp).Row
MyVArr = Range("A1:AC" & LastA)
For J = LBound(MyVArr, 1) To UBound(MyVArr, 1)
Alrd = Application.Match(MyVArr(J, 1), Sheets(SumSh).Range("A1").Resize(K + 1, 1), 0)
If IsError(Alrd) Then
LastSA = Workbooks("Foglio codifica Nuovo.xlsm").Sheets(SumSh).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(SumSh).Range("A1").Offset(LastSA, 3) = MyVArr(J, 1)
Sheets(SumSh).Range("A1").Offset(LastSA, 0) = MyVArr(J, 29)
Sheets(SumSh).Range("A1").Offset(LastSA, 1) = MyVArr(J, 28)
Sheets(SumSh).Range("A1").Offset(LastSA, 2) = MyVArr(J, 27)
' Sheets(SumSh).Range("A1").Offset(LastSA, 4) = ActiveSheet.Name
K = K + 1
Else
Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) = _
Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) + 1
End If
Next J
End If
Next I
End Sub
Torna a Applicazioni Office Windows
Inserire add.in nella barra di avvio veloce in excel 2003 Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 4 |
Excel: problema con date se devo unirle a testi Autore: valle1975 |
Forum: Applicazioni Office Windows Risposte: 5 |
confrontare e evidenziare 2 fogli excel Autore: niccia |
Forum: Applicazioni Office Windows Risposte: 7 |
[EXCEL] controllo corrispondenza tra valori con un vincolo Autore: sbs |
Forum: Applicazioni Office Windows Risposte: 9 |
Visitano il forum: Nessuno e 9 ospiti