Ho una lista di 594 intervalli denominati in una cartella di lavoro con circa 20 fogli, ogni foglio ha circa 200 colonne di dati. Ho bisogno di scoprire dove vengono utilizzati gli intervalli denominati in modo da rimuovere quelli irrilevanti. Ho incollato un elenco di intervalli denominati sul foglio e quindi ho cercato di scoprire se erano stati utilizzati in una formula registrandoli e quindi utilizzando il metodo find in tutti i fogli e le colonne. Il problema è nonostante l'utilizzo di lookin xlformulas, recupera l'intervallo denominato anche se è solo un testo.Trova gli intervalli con nome utilizzati nella grande cartella di lavoro
Qui è la mia (aggiornato) tentativo (se non è già evidente, io sono un dilettante):
Application.ScreenUpdating = False
Count = ActiveWorkbook.Sheets.Count
Sheets(Count).Activate
Dim locr(1 To 595)
Dim locc(1 To 595)
Dim locn(1 To 595)
Dim nam(1 To 595)
Dim rng As Range
Range("a1").Select
For X = 1 To 595 'populate array with named ranges
ActiveCell.Offset(1, 0).Select
nam(X) = ActiveCell.Value
Next X
For i = 1 To 595 'name loop
For j = 1 To (Count - 1) 'sheet loop
Sheets(j).Activate
On Error Resume Next
Set orange = Sheets(j).Cells.SpecialCells(xlCellTypeFormulas) 'limit range to cells that only contain formulas
On Error GoTo 20 'if no formulas in sheet, go to next sheet
If Not orange Is Nothing Then
Set rng = orange.Find(What:=nam(i), _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False) 'find named range
If Not rng Is Nothing Then 'if named range found
Application.Goto rng, True 'go to cell where name range found and record address
locr(i) = ActiveCell.Row
locc(i) = ActiveCell.Column
locn(i) = ActiveSheet.Name
GoTo 10 'value found, go to next sheet
Else
End If
Else
End If
20 Next j
locr(i) = "" 'record empty since "rng" is empty
locr(i) = ""
locr(i) = ""
10 Next i
Sheets(Count).Activate
Range("c1").Select
b = 1
For a = 1 To 595 'populate addresses of named ranges
ActiveCell.Offset(b, 2).Value = locr(a)
ActiveCell.Offset(b, 1).Value = locc(a)
ActiveCell.Offset(b, 0).Value = locn(a)
b = b + 1
Next a
+ 1 domanda stupefacente. mi ha fatto pensare a lungo :) –
@SiddharthRout, anche a me! –