Trovare un foglio di lavoro con un valore specifico in una cella specifica (Microsoft Excel)
Kelly ha una cartella di lavoro che contiene centinaia di fogli di lavoro. Ogni foglio di lavoro rappresenta un progetto individuale per la sua azienda. La cella C4 di ogni foglio di lavoro contiene il numero di progetto per quel particolare progetto.
Trovare progetti individuali tra tutte le centinaia nella cartella di lavoro è complicato, nella migliore delle ipotesi. Si chiede se sia possibile creare una macro che consentirebbe a tutti gli utenti di inserire un numero di lavoro, trovare il foglio di lavoro con quel numero di lavoro nella cella C4 e quindi visualizzare quel foglio di lavoro.
Prima di affrontare come farlo in una macro, dovresti capire che potresti essere in grado di trovare il progetto desiderato utilizzando gli strumenti nativi di Excel.
Tutto quello che devi fare è seguire questi passaggi:
-
Premi Ctrl + F. Excel visualizza la scheda Trova della finestra di dialogo Trova e sostituisci.
-
Fare clic sul pulsante Opzioni per espandere la finestra di dialogo. (Vedi figura 1.)
-
Utilizzando l’elenco a discesa All’interno, scegliere Cartella di lavoro.
-
Se la cella C4 in ogni foglio di lavoro contiene solo il numero del progetto, selezionare la casella di controllo Abbina contenuto intero cella.
-
Fare clic su Trova successivo.
Questo è tutto; dovresti essere portato alla prima istanza della cella che contiene il numero del tuo progetto. Se la cartella di lavoro contiene numeri di progetto in più celle (oltre alla cella C4), l’utilizzo dello strumento Trova può essere un po ‘noioso; dovrai continuare a fare clic su Trova successivo fino a individuare il foglio di lavoro corretto. In una situazione del genere, una macro può essere la soluzione migliore perché ti consente di guardare specificamente la cella C4 e ignorare tutto ciò che si trova in qualsiasi altra cella.
La seguente macro richiede all’utente di inserire un numero di progetto. Quindi cerca in ogni foglio di lavoro nella cartella di lavoro il primo foglio di lavoro in cui la cella C4 contiene quel numero di progetto. Se trovata, la macro visualizza il foglio di lavoro e attiva la cella. Se non trovato, viene visualizzato un messaggio che lo indica.
Sub FindProject1() Dim wks As Worksheet Dim sCell As String Dim sProj As String sCell = "C4" 'cell with Project number sProj = InputBox("What Project are you looking for?") For Each wks In Worksheets If wks.Range(sCell) = sProj Then wks.Activate wks.Range(sCell).Activate MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name) Exit Sub End If Next wks MsgBox ("Project is not found") End Sub
Esistono due potenziali problemi con questa macro. Innanzitutto, se il numero del progetto è effettivamente un numero, la macro potrebbe non trovarlo mentre cerca stringhe di testo. In secondo luogo, se sono presenti più fogli di lavoro che utilizzano lo stesso numero di progetto, non lo saprai mai perché la macro si ferma sempre al foglio di lavoro con il primo numero di progetto corrispondente nella cella C4. Puoi superare entrambi questi problemi apportando un paio di modifiche alla macro.
Sub FindProject2() Dim wks As Worksheet Dim sCell As String Dim sProj As String Dim vSheets As New Collection Dim sTemp As String sCell = "C4" 'cell with Project number sProj = InputBox("What Project are you looking for?") For Each wks In Worksheets If wks.Range(sCell).Value = sProj Or _ wks.Range(sCell).Value = Val(sProj) Or _ wks.Range(sCell).Text = sProj Then vSheets.Add wks End If Next wks Select Case vSheets.Count Case 0 sTemp = "Project " & sProj & " was not found " sTemp = sTemp & "in this workbook." MsgBox sTemp Case 1 wks.Activate wks.Range(sCell).Activate Case Else sTemp = "Project " & sProj & " was found on more " sTemp = sTemp & "than one sheet:" & vbCrLf For Each wks In vSheets sTemp = sTemp & wks.Name & vbCrLf Next wks MsgBox sTemp End Select End Sub
Con questa versione della macro, il foglio di lavoro del progetto viene visualizzato solo se il numero del progetto è univoco tra tutti i fogli di lavoro. Se sono presenti più istanze in cui il numero di progetto è lo stesso, viene notificato il nome di quei fogli di lavoro, ma non è selezionato alcun foglio di lavoro.
Se lo desideri, potresti rendere la macro molto più semplice rinominando tutti i tuoi fogli di lavoro con il numero del progetto. Ciò avrebbe anche l’ulteriore vantaggio di garantire che nessun progetto utilizzi effettivamente due fogli di lavoro. (Tutti i nomi dei fogli di lavoro devono essere univoci, quindi se ogni foglio di lavoro utilizza un numero di progetto come nome, potresti avere un solo foglio di lavoro per numero di progetto.) Se adotti questo approccio, potresti usare una macro simile alla seguente per trovare e saltare al foglio di lavoro desiderato:
Sub FindProject3() On Error GoTo ErrorHandler Sheets(InputBox("Enter Project Number:")).Activate Exit Sub ErrorHandler: MsgBox "No such Project" End Sub
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (13489) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.