Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    3

    excel: trovare il PRIMO valore uguale a 1

    Ciao ragazzi,

    avrei bisogno di un aiutino su un foglio excel


    ho impostato su un foglio excel una specie di turnistica, mi spiego meglio.

    ho impostato nelle celle in sequenza gli orari dei turni (es.8:00, 8:15, 8:30, 8:45, 9:00, 9:15 ecc)

    nelle corrispettive celle soto ogni orario inserisco 1 se è un turno da prendere in considerazione inserisco 0 se non è un turno in considerazione

    Esempio

    (Orario Turni) 8:00 8:15 8:30 8:45 9:00 9:15

    (nominativo1) 0 0 1 1 1 0
    (nominativo2) 0 1 1 0 0 0

    Avrei bisogno di voi per consigliarmi una funziona da usare per trovare il primo valore uguale a 1 per ogni nominativo e l'ultimo valore uguale a 1 per ogni nominativo riportando però la colonna di riferimento in modo da far apparire il risultato in una cella affianco che il nominativo1 fa il turno dalle 8:30 alle 9:00

    Si puo fare qualcosa??

  2. #2
    Ciao,
    per risolvere il tuo problema mi vengono in mente tre soluzioni, due con formule e una con VBA, ma ce ne sono sicuramente delle altre.

    La prima (esempio giallo) fa tutto con un'unica formula, piuttosto macchinosa ma efficace:

    codice:
    =INDICE($A$1:$R$4;1;SE(E(B2=1;SOMMA($B2:B2)=1);CELLA("col";B2);0) + SE(E(C2=1;SOMMA($B2:C2)=1);CELLA("col";C2);0) + SE(E(D2=1;SOMMA($B2: D2)=1);CELLA("col";D2);0)+ SE(E(E2=1;SOMMA($B2:E2)=1);CELLA("col";E2);0) + SE(E(F2=1;SOMMA($B2:F2)=1);CELLA("col";F2);0) + SE(E(G2=1;SOMMA($B2:G2)=1);CELLA("col";G2);0) + SE(E(H2=1;SOMMA($B2:H2)=1);CELLA("col";H2);0) + SE(E(I2=1;SOMMA($B2:I2)=1);CELLA("col";I2);0) + SE(E(J2=1;SOMMA($B2:J2)=1);CELLA("col";J2);0) + SE(E(K2=1;SOMMA($B2:K2)=1);CELLA("col";K2);0) + SE(E(L2=1;SOMMA($B2:L2)=1);CELLA("col";L2);0) + SE(E(M2=1;SOMMA($B2:M2)=1);CELLA("col";M2);0) + SE(E(N2=1;SOMMA($B2:N2)=1);CELLA("col";N2);0) + SE(E(O2=1;SOMMA($B2:O2)=1);CELLA("col";O2);0) + SE(E(P2=1;SOMMA($B2:P2)=1);CELLA("col";P2);0) + SE(E(Q2=1;SOMMA($B2:Q2)=1);CELLA("col";Q2);0) + SE(E(R2=1;SOMMA($B2:R2)=1);CELLA("col";R2);0))
    questa formula riconosce il primo valore 1 verificando che:
    - il valore dela cella in esame sia 1
    - la somma di tutte le celle, dalla prima fino a quella in esame, sia 1
    Solo la cella che ha entrambe queste caratteristiche (funzione E() ) permette al corrispondente SE di aggiungere il valore della sua colonna alla somma generale, tutte le altre celle aggiungeranno zero, quindi alla fine, la somma coinciderà col numero di colonna del primo 1.
    A quel punto la funzione INDICE preleva il valore della cella con riga=1 e colonna indicata dalla somma.

    Per il valore massimo la formula è analoga ma la somma viene fatta dalla cella in esame alla fine:

    codice:
    =INDICE($A$1:$R$4;1;SE(E(B2=1;SOMMA(B2:$R2)=1);CELLA("col";B2);0) + SE(E(C2=1;SOMMA(C2:$R2)=1);CELLA("col";C2);0) + SE(E(D2=1;SOMMA(D2:$R2)=1);CELLA("col";D2);0)+ SE(E(E2=1;SOMMA(E2:$R2)=1);CELLA("col";E2);0) + SE(E(F2=1;SOMMA(F2:$R2)=1);CELLA("col";F2);0) + SE(E(G2=1;SOMMA(G2:$R2)=1);CELLA("col";G2);0) + SE(E(H2=1;SOMMA(H2:$R2)=1);CELLA("col";H2);0) + SE(E(I2=1;SOMMA(I2:$R2)=1);CELLA("col";I2);0) + SE(E(J2=1;SOMMA(J2:$R2)=1);CELLA("col";J2);0) + SE(E(K2=1;SOMMA(K2:$R2)=1);CELLA("col";K2);0) + SE(E(L2=1;SOMMA(L2:$R2)=1);CELLA("col";L2);0) + SE(E(M2=1;SOMMA(M2:$R2)=1);CELLA("col";M2);0) + SE(E(N2=1;SOMMA(N2:$R2)=1);CELLA("col";N2);0) + SE(E(O2=1;SOMMA(O2:$R2)=1);CELLA("col";O2);0) + SE(E(P2=1;SOMMA(P2:$R2)=1);CELLA("col";P2);0) + SE(E(Q2=1;SOMMA(Q2:$R2)=1);CELLA("col";Q2);0) + SE(E(R2=1;SOMMA($R2:R2)=1);CELLA("col";R2);0))

    Un'altra soluzione, sempre con formule, richiede di inserire delle righe di servizio fra una riga e l'altra di quelle esistenti.

    Nell'esempio le righe di servizio le ho colorate di verde e poi ho nascosto quella relativa a Marco riducendone a zero l'altezza per farti vedere l'effetto che fa: la riga c'è ma non si vede e l'unica cosa che si nota è il salto di numerazione.

    Aggiungere queste righe semplifica molto le formule da usare perché basta inserire nella cella B12 questa formula

    codice:
    =SE(B11=1;B$10;"")
    poi copia/incollare la cella B12 in tutte le celle delle righe di servizio e infine inserire nelle colonne Primo e Ultimo queste formule:

    codice:
    =MIN(B12:R12)
    =MAX(B12:R12)
    Rispetto alla prima soluzione questa ha il vantaggio di utilizzare formule molto più semplici e, soprattutto, non richiede di costruire pazientemente tutta la somma iniziale.


    E poi c'è la soluzione VBA che è quasi banale:

    codice:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("b2:r4")) Is Nothing Then
          For i = 2 To 18
             If Cells(Target.Row, i) = 1 Then
                Cells(Target.Row, 20) = Cells(1, i)
                Exit For
             End If
          Next
          For i = 18 To 2 Step -1
             If Cells(Target.Row, i) = 1 Then
                Cells(Target.Row, 21) = Cells(1, i)
                Exit For
             End If
          Next
       End If
    End Sub
    Al variare di uno dei valori della tabellina di zeri/uno (Range("b2:r4")) esamina la riga corrispondente in un senso e nell'altro (i valori 2 e 18 corrispondono alla colonna B e alla colonna R) e, al primo 1 incontrato riporta il valore della prima riga nelle caselle alla colonna 20 e 21 (Primo e Ultimo).

    I valori fissi 2, 18, 20 e 21 possono essere sostituiti assegnando dei nomi alle colonne e usando quelli.

    Vedi se una di queste soluzioni può andarti bene.
    Ciao
    Immagini allegate Immagini allegate
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.