Condividi:        

Restituire valori simili con aggregazioni di simboli

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

Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 21/11/18 08:47

Compilazione automatica turno giornaliero in base al turno, restituire il nome con il simbolo dello straordinario nella cella del turno
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Sponsor
 

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 21/11/18 08:55

Buon giorno io avrei bisogno di un aiutino in quanto dovrei compilare una tabella di turnazione settimanale con i turni compreso eventuale straordinario e con una formula deve restituirli il nome di chi fa quel turno insieme al simbolo dello straordinario che può essere o + o ° o °° in un altra cartella di lavoro sapendo però che ci possono essere fino a 4 operatori che fanno quel turno per cui 4 celle da riempire con i rispettivi nomi di quel turno calcolando appunto il turno in base anche allo straordinario. Se possibile vorrei poter inserire il foglio così da farvi vedere do cosa si tratta. Come si fa?grazie in anticipo
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 21/11/18 11:49

Scusate ho un un altro quesito....se a questa formula che mi restituisce il nome si chi fa 1....ossia il primo turno...

=SE.ERRORE(INDICE(Tabella8[[#Tutti];[Colonna1]];AGGREGA(15;6;RIF.RIGA($1:$1000)/((Tabella8[[#Tutti];[Colonna2]:[Colonna8]]=1)*(Foglio1!$E$10:$K$10=$C$4));RIF.RIGA(A1)));"")


E possibile inserire un altro parametro di ricerca? Esempio 1+ o 1° o 1°°?restituendomi sempre e cmq la persona di riferimento di quel turno se ha o meno uno di quei simboli? Spero di essere stato comprensibile
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Anthony47 » 21/11/18 12:41

Ciao Simo, benvenuto nel forum.
Per rispondere ai tuoi quesiti e' bene allegare un file dimostrativo con tuoi dati e la loro struttura.

Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

Ti aspettiamo…
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 21/11/18 21:15

Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 21/11/18 21:20

Ecco fatto.....in pratica vedrete sul foglio 2 una griglia coi turni della settimana ci basiamo solo su lunedi e solo x i sorv. In pratica mi servirebbe far comparire in automatico compilando questa griglia sul foglio 1 nelle colonne C e D i nomi di quel turno nonostante abbiano il simbolo dello straordinario. Ossia sul turno mattina cioè 1...mi deve riconoscere tutti o nominativi di chi fa quel turno anch e se hanno o simbolo di fianco al numero......lo stesso per il turno pomeridiano ossia 2 e così per il notturno 3. Grazie in anticipo
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Anthony47 » 22/11/18 10:20

La struttura di Foglio2 e' drasticamente diversa da quella di Foglio1, non ho capito dove i nominativi andrebbero riportati.
Parti dal file che hai pubblicato e compila a mano Foglio1 come vorresti che venga fatto piu' automaticamente, magari capisco "meglio".

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

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 22/11/18 10:41

In pratica sul foglio 1 che sarebbe il giornaliero in corrispondenza delle colonne C e D le celle dove ce scritto sorv. Devono essere compilate in automatico col nome....in base al turno corrispondete compilando il foglio 2 in base a più valori
Buona giornata
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Anthony47 » 22/11/18 14:47

Anthony ha scritto:non ho capito dove i nominativi andrebbero riportati.
Parti dal file che hai pubblicato e compila a mano Foglio1 come vorresti che venga fatto piu' automaticamente, magari capisco "meglio"
Hai ripetuto quanto gia' scritto nel primo messaggio, pertanto rimango nella stessa situazione...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 22/11/18 18:10

http://www.filedropper.com/prova_5
Ecco l ho compilato a mano....in pratica compilando appunto la tabella del foglio 2 A mano sul foglio uno deve uscire così in automatico
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Anthony47 » 23/11/18 10:09

Faccio molta fatica a capire come le informazioni di Foglio1 si confrontano con quelle di Foglio2, ma penso non sia importante.
Ti propongo pertanto una "Funzione personalizzata" che puoi usare per estrarre i nominativi dalla tabella di Foglio2, che corrisponde al seguente codice vba:
Codice: Seleziona tutto
Function CheStr(ByRef myTab As Range, ByVal Sito As String, ByVal Turno As Long, Optional tCnt As Long = 1) As String
Dim I As Long, cCnt As Long
Dim sitoC As Long, nomeC As Long, turnoC As Long
'
sitoC = 1
nomeC = 2
turnoC = 3
For I = 1 To myTab.Rows.Count
    If myTab.Cells(I, sitoC) = Sito And InStr(1, myTab.Cells(I, turnoC), Turno, vbTextCompare) > 0 Then
        cCnt = cCnt + 1
        If cCnt = tCnt Then
            CheStr = myTab.Cells(I, nomeC).Value & Mid(myTab.Cells(I, turnoC), 2)
            Exit Function
        End If
    End If
Next I
End Function

Il codice va messo n un "modulo standard" del vba. Per questo, partendo da Excel:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice e incollalo nel frame dx del modulo appena creato

Poi torna su Excel, e in Foglio1 usa una formula di questo tipo:
=CheStr(L'AreaConLePrimeTreColonneDellaTabella;IlNomeDellaPostazione;IlNumeroDelTurno[;IlNumSequenziale])
Il primo parametro e' intuitivo (vedi formula successiva)
Il secondo descrive la postazione su cui si fa la ricerca; corrisponde al contenuto di colonna C di Foglio2
Il terzo parametro corrisponde al contenuto di colonna E di Foglio2
L'ultimo parametro indica quale tra i turni trovati va preso in considerazione (il primo, il secondo, …); e' opzionale, se omesso viene usato "1" cioe' il primo.

La funzione restituisce il nominativo (colonna D) piu' eventuali simboli presenti in colonna E; oppure una stringa vuota se quel turno none esiste.

Ad esempio:
Codice: Seleziona tutto
=CheStr(Foglio2!$C$17:$E$35;B8;1;1)

Poiche' in B8 (di Foglio1) c'e' la scritta "C.T.", la formula ti restituira' "Gino" (come detto, l'ultimo 1 si poteva anche omettere)

La funzione rispetta gli standard Excel, quindi ad esempio invece della suddetta formula avresti potuto scrivere
Codice: Seleziona tutto
=CheStr(Foglio2!$C$17:$E$35;"C.T.";1)


Per completare gli esempi, in C9 e C10 ho usato rispettivamente le formule
Codice: Seleziona tutto
=CheStr(Foglio2!$C$17:$E$35;C8;1)

Codice: Seleziona tutto
=CheStr(Foglio2!$C$17:$E$35;C8;1;2)


Per le altre celle usa le stesse regole

Controlla che le sigle che metti nelle formule siano esattamente uguali a quelle che compaiono in Foglio2!

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

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 23/11/18 11:08

La sto provando e fin ora fa esattamente quello che volevo io mi sono solo dimenticato di dirti che su foglio 1 nelle celle F9 F14 F15 E F23 deve riportare il turno C ossia giornata in assenza del turno 1 si può aggiungere una stringa alla macro aggiungendo questo valore? Grazie ancora e i miei più sinceri complimenti ;-)
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 23/11/18 11:18

E per quanto riguarda la parte bassa del foglio 1?dove c è scritto riposo ferie e malattia?come faccio a farmi restituire il nome li? Tieni conto che le lettere di riferimento sono R riposo F ferie P par A malattia che verranno inserite nel foglio 2 al posto dei turni
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 23/11/18 11:25

Ha un altra cosa... Non mo fa salvare la macro come posso fare
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 23/11/18 13:34

Risolto l ultimo quesito sono riuscito a salvarlo;-)
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 23/11/18 13:52

E sorto un problema Anthony....la vba funziona con la prima colonna su lunedi...ma se devo fare il giornaliero per tutta la settimana?ho provato a selezionare la colonna di martedì e mi da errore.....help :-0
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Anthony47 » 23/11/18 15:28

Per gestire queste altre situazioni ho modificato il codice della Funzione come segue:
Codice: Seleziona tutto
Function CheStrW(ByRef myTab As Range, ByVal wDay As Long, ByVal Sito As String, ByVal Turno As Variant, Optional tCnt As Long = 1) As Variant
Dim I As Long, cCnt As Long, LSito
Dim sitoC As Long, nomeC As Long, turnoC As Long
'
sitoC = 1
nomeC = 2
turnoC = 2 + wDay
If myTab.Columns.Count < (wDay + 2) Then
    CheStrW = CVErr(xlErrRef)
    Exit Function
End If
For I = 1 To myTab.Rows.Count
    If Sito = "" Then LSito = myTab.Cells(I, sitoC).Value Else LSito = Sito
    If myTab.Cells(I, sitoC) = LSito And InStr(1, myTab.Cells(I, turnoC), Turno, vbTextCompare) > 0 Then
        cCnt = cCnt + 1
        If cCnt = tCnt Then
            CheStrW = myTab.Cells(I, nomeC).Value & Mid(myTab.Cells(I, turnoC), 2)
            Exit Function
        End If
    End If
Next I
End Function

Dopo queste modifiche la funzione si richiama in questo modo:
=CheStrW(L'AreaConTUTTELeColonneDellaTabella;GiornoDellaSettimana;IlNomeDellaPostazione;IlNumeroDelTurno[;IlNumSequenziale])

Cioe' la funzione richiede come parametro anche il Giorno della settimana (1=Lun, 2=Mart, etc)
Inoltre ti consente di usare come "Turno" anche le lettere (es M, P, …)
Mi immagino inoltre che Malattia, Riposo, etc non siano da associare a uno specifico Sito, per cui ora e' possibile inserire come "Sito" una stringa vuota (""), che equivale a "Qualsiasi sito"
Ovviamente l'area da passare (primo parametro) deve includere anche la colonna di quel giorno, ma e' meglio inserire tutta l'area della tabella

Potrai quindi usare, ad esempio per il riepilogo dei Riposi del Martedi', la formula
Codice: Seleziona tutto
=CheStrW(Foglio2!C17:I35;2;"";"R";1)
(primo nominativo; usa 2, 3, etc per gli altri possibili nominativi)
Nota l'uso della stringa vuota ("") come sigla del Sito; questo ti consente di cercare i R in tutte le categorie.

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

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 23/11/18 16:15

La sto provando e devo dire che è uno spettaccolo.....mi va a prendere tutti i valori che voglio in qualsiasi giorno e in qualsiasi posizione direi perfetto;-) ;-)

Solo una piccolezza e direi che hai risolto in modo eccelso il problema. In pratica per far restare la cella vuota se non ce nessun valore da trovare come si può fare?perche ora da come risultato 0 grazie infinitamente
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Re: Restituire valori simili con aggregazioni di simboli

Postdi Anthony47 » 24/11/18 13:35

far restare la cella vuota se non ce nessun valore da trovare come si può fare? perche ora da come risultato 0 grazie infinitamente

E gia'…
Aggiungi questa riga in questa posizione:
Codice: Seleziona tutto
Next I
CheStrW = ""            '+++ AGGIUNGERE
End Function


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

Re: Restituire valori simili con aggregazioni di simboli

Postdi Simo1 » 24/11/18 16:29

wow caspita davvero perfetto. funziona alla grande.

Nel frattempo mi ero arrangiato usando la funzione SE

=SE(funzione=0;"";funzione)

per restituire la cella vuota, ma con la tua vba, non c'è paragone. Ed è sicuramente più veloce davvero ancora grazie infinitamente, per te sicuramente è un gioco da ragazzi risolvere sti problemi, heheheeh io non ce l'avrei mai fatta nell'intera mi vita mi sa.

Vorrei porti un ultimo quesito, spero non mi odierai ulteriormente per le mie richieste, :-O

in pratica la macro e talmente PERFETTA che addirittura mi restituisce il valore del turno, nella cella del turno dove lo stesso dovrebbe essere nonostante prima ci siano altre lettere o simboli davanti.....e qui può crearmi un piccolo problema...nel senso... se nella griglia del foglio 2 ci sono giorni di malattia, in questo caso segnato con la lettera A , se inserita solo la lettera mi fa scomparire il nome della persona di riferimento sul turno e me la fa comparire in fondo nel campo malattia, e fin qui ci siamo..... però se dovessi mettere di fianco alla lettera A anche il turno che avrebbe dovuto fare l'operatore, es. A/3 o A/2 o A/1 succede che sul foglio del giornaliero mi va a inserire il nome sia nel campo della malattia sia sul turno corrispondente aggiungendomi anche il numero al nome. il numero non è un problema anche perchè tanto andrebbe nel campo della malattia, quello che non dovrebbe fare e restituirmi il nome nel turno.:-(

ecco l'ultimo quesito.

spero di essermi spiegato in modo comprensivo :-)
Simo1
Utente Junior
 
Post: 75
Iscritto il: 21/11/18 08:41

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Restituire valori simili con aggregazioni di simboli":


Chi c’è in linea

Visitano il forum: papiriof e 12 ospiti