Condividi:        

Re: Excel: macro per selezionare urgenze

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Excel: macro per selezionare urgenze

Postdi macio66 » 06/12/18 19:30

Buonasera
Ho un file excel dove nel foglio1, c'è la tabella generale dei miei lavori, e nel foglio2 lo scarico delle urgenze (che varia ogni giorno).
Avrei bisogno di confrontare con una macro la colonna A del foglio 2 (Contenente il numero di documenti urgenziati), con la colonna B della tabella del foglio1 (Contenente l'elenco dei numeri documento dei lavori chiusi e/o in corso), ed ad ogni corrispondenza di documento, controllare nella colonna P del foglio1, se è presente la data di chiusura lavoro, o se il lavoro è ancora in corso (cella vuota).
A questo punto, se i documenti urgenziati, sono presenti nella tabella del foglio1, e non vi e ancora una data di chiusura lavoro, creare un elenco nel foglio chiamato Urgenze.
Purtroppo sono riuscito tramite ciclo for, soltanto a controllare, facendo un nuovo inserimento nella tabella del foglio1, se il nuovo documento è presente nella lista delle urgenze foglio2, ma non so come fare a far controllare un elenco di una colonna, con quello di un'altra colonna.
Sperando di essere stato abbastanza chiaro, su quello che mi servirebbe fare, vi ringrazio anticipatamente per il vostro aiuto, e vi auguro una buona serata
macio66
Utente Senior
 
Post: 147
Iscritto il: 13/06/13 14:59

Sponsor
 

Re: Excel: macro per selezionare urgenze

Postdi Anthony47 » 07/12/18 00:26

Puoi fare qualcosa abbastanza automatizzato usando in una colonna di Foglio2 la funzione Cerca.Vert, per cercare in Foglio1 la presenza dei codici di Foglio2 e ottenere la data; in risposta avrai "0" se il codice esiste senza data di chiusura, oppure un numero rappresentante la data di chiusura secondo il formato Excel (es 43440 per la data 6 dic 2018), oppure #N/D se non esiste quel documento.
Poi filtri la colonna del risultato per visualizzare solo gli 0 e i #N/D, copi il risultato e lo incolli in un terzo foglio; questa fase la puoi automatizzare con una macro autoregsitrata.

Per le istruzioni e i primi suggerimenti su come registrare una macro:
viewtopic.php?f=26&t=103893&p=622593#p622593

Se non risolvi con questo spunto allora allega un file che si possa usare per i test; per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Re: Excel: macro per selezionare urgenze

Postdi macio66 » 08/12/18 12:51

Ciao Anthony
Usavo gia la funzione Cerca.Vert, ma volevo migliorarlo un pò, e renderlo piu automatico e nello stesso tempo, imparare nuove cose.
Sono riuscito a scrivere questa macro, e mi piacerebbe un vostro giudizio, e perchè no, anche un evenuale miglioramento.

Codice: Seleziona tutto
Sub VerificaUrgenze()
If ActiveSheet.Cells(3, 2) = "" Then Exit Sub 'si controlla che almeno la prima cella dopo l'intestazione sia 'occupata, altrimenti si esce
w = ActiveSheet.Cells(3, 2).End(xlDown).Row  'si prende con "w" il N° dell'ultima riga occupata nell'elenco
riga = 2  'poi si imposta il numero della riga dalla quale iniziare il controllo
Do While Sheets("foglio2").Cells(riga, 1) <> ""  'inizia il ciclo Do While che scorrerà finchè le celle saranno diverse da vuoto
    nome = Sheets("foglio2").Cells(riga, 1).Value    'quindi con la variabile "nome" prendiamo il dato presente nella cella ora letta
    For N = w To riga + 1 Step -1  'e si inizia un ciclo For che inizierà dall'ultima riga scalando indietro di una cella a 'ciclo fino alla riga ora letta da While +1
        If Cells(N, 1).Value = nome And Cells(N, 16).Value = "" Then 'se la cella ora letta dal ciclo For è uguale alla variabile "nome" e la riga nella colonna P è vuota
            Sheets("Urgenze").Activate
                If Range("A1").Value = "" Then
                  Range("A1").Select
                ElseIf Range("A2").Value = "" Then
                  Range("A2").Select
                Else
                  Range("A1").End(xlDown).Offset(1).Select
                End If
            Selection.Value = nome
        End If
        Sheets("Foglio1").Activate
    Next
    riga = riga + 1 'finito il ciclo For si incrementa il numero di riga di 1 e con Loop passiamo alla riga successiva
Loop
End Sub

Ciao
macio66
Utente Senior
 
Post: 147
Iscritto il: 13/06/13 14:59

Re: Excel: macro per selezionare urgenze

Postdi Anthony47 » 08/12/18 19:16

In linea di massima, se una macro funziona allora e' perfetta...

Se ti interessa lo stesso qualche variazione sul tema, nell'ottica di migliorare facendo la pratica, allora dovresti anche pubblicare un file demo su cui lavorare; altrimenti il rischio di prendere lucciole per lanterne e' elevato.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel: macro per selezionare urgenze

Postdi macio66 » 09/12/18 14:18

Ciao Anthony
Allego un file demo, con le ultime modifiche che ho effettuato alla macro.

http://www.filedropper.com/prove_1

Nel foglio1, c'è la tabella generale, ora ho messo solo le colonne utili per la macro.
Nel foglio Urgenze, c'è lo scarico giornaliero delle urgenze richieste.
Nel foglio TabUrgenze, c'è il risultato della macro.

Come ti avevo detto in precedenza, ci terrei ad avere un vostro giudizio e/o un'eventuale miglioria.

Grazie e buona domenica a tutti
macio66
Utente Senior
 
Post: 147
Iscritto il: 13/06/13 14:59

Re: Excel: macro per selezionare urgenze

Postdi Anthony47 » 09/12/18 23:41

Ti propongo questa variante:
Codice: Seleziona tutto
Sub VerificaUrgenze2()
'Dichiarazione variabili
Dim LastF1Riga As Long, Riga As Long, N As Long
Dim UNome As String, UNext As Long, UCnt As Long
'
Sheets("foglio1").Activate
Sheets("TabUrgenze").Range("A2:C10000").ClearContents
'
LastF1Riga = Cells(Rows.Count, "A").End(xlUp).Row
URiga = 2
Do While Sheets("Urgenze").Cells(URiga, 1) <> ""    'Si scorre sheet Urgenze
    UNome = Sheets("Urgenze").Cells(URiga, 1).Value
    For N = 3 To LastF1Riga
        If Cells(N, 1).Value = UNome And Cells(N, 1).Font.ColorIndex <> 3 And Cells(N, 3).Value = "" Then
            MsgBox "Trovato " & UNome & " nella cella " & Cells(N, 2).Address           '??? Serve questo messaggio?
            UNext = Sheets("TabUrgenze").Cells(Rows.Count, 1).End(xlUp).Row + 1
            Sheets("TabUrgenze").Cells(UNext, 1) = UNome
            Sheets("TabUrgenze").Cells(UNext, 2) = Cells(N, 2).Value
            UCnt = UCnt + 1
            Exit For        'Se si trova 1 documento si smette di cercare; GIUSTO o SBAGLIATO?
        End If
    Next N
    URiga = URiga + 1
Loop
If UCnt > 0 Then
    MsgBox ("Trovate n. " & UCnt & " urgenze pendenti")
Else
    MsgBox ("Non ci sono urgenze pendenti")
End If
End Sub

Come vedi non vengono selezionati i vari fogli per eseguire le operazioni, ma il relativo foglio viene indirizzato esplicitamente nell'istruzione
Ho un dubbio sull'istruzione con commento "GIUSTO o SBAGLIATO?"; al momento la macro quando trova in Foglio1 una urgenza senza data passa al documento successivo (riga successiva di foglio Urgenze); se questo fosse sbagliato bisogna eliminare l'istruzione Exit For

Spero che l'esempio sia di qualche utilita'

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Re: Excel: macro per selezionare urgenze

Postdi macio66 » 11/12/18 15:12

Ciao Anthony
In effetti il MsgBox "Trovato " & UNome & " nella cella " & Cells(N, 2).Address, mi serviva solamente per verificare la macro.
per il resto il tuo esempio, è perfetto.
Ti ringrazio per l'aiuto, e ora lo confronto con quello che avevo creato io. Un altro mattoncino, per migliorare le mie conoscenze.
Ti auguro una buona giornata.
Grazie
macio66
Utente Senior
 
Post: 147
Iscritto il: 13/06/13 14:59


Torna a Applicazioni Office Windows


Topic correlati a "Re: Excel: macro per selezionare urgenze":


Chi c’è in linea

Visitano il forum: Nessuno e 64 ospiti