Differenza media e direzione tra i valori in Excel con spazi vuoti


0

Ho un foglio che assomiglia a questo:

Foglio 1

    1   2   3   4   5   6   7   8   9   10  11
1                                           6
2                                       3   5
3                                           
4                               2   4   9   4
5                                           
6                                   4   6   6
7       5   3   3       3   10  8   4       8
8                                           
9                           4   11  12  12  6
10                                          
11  8   5   5       4   9   4   7   6       

Quello che vorrei poter fare è trovare la differenza media e la direzione tra i valori in ogni colonna per ogni riga. Ad esempio, le prime 4 righe apparirebbero come:

     Average Difference # + Movements   # -Movements
1           
2           2                    1              0
3           
4       (2+5+5)/3                2              1

Gli spazi vuoti rappresentano valori N / A a causa di informazioni insufficienti e le differenze vengono calcolate successivamente col2-col1, col3-col2, col4-col3

Se prendo semplicemente le differenze e creo una tabella duplicata con la formula =C2-B2copiata tra i problemi sorgono ogni volta che c'è uno spazio vuoto tra due valori o all'inizio della riga. C'è un modo semplice per risolvere questo o un altro modo per farlo che potrei perdere?


Non è davvero chiaro cosa stai cercando di fare. Come sarebbe il risultato di questa tabella? Stai sottraendo la riga 3 dalla riga 2 e quindi la riga 4 dalla riga 3. Abbiamo bisogno di maggiori dettagli prima di poterti aiutare.
gtwebb,

@gtwebb Grazie gtwebb, ho aggiornato il post con qualche dettaglio in più che spero possa aiutare a chiarire la situazione.
114

Risposte:


1

Se si desidera una soluzione VBA, copiarla in un modulo.

Function Score(R As Range, Col As String)
    Dim ThisCell As Range
    Dim Dif As Integer
    Dim Cnt As Integer
    Dim PosMove As Integer
    Dim NegMove As Integer
    Dim PrevNum As Integer
    Dim ThisNum As Integer
    PrevNum = 9999
    For Each ThisCell In R.Cells
        If IsNumeric(ThisCell.Text) Then
            ThisNum = ThisCell.Value
            If PrevNum <> 9999 Then
                Cnt = Cnt + 1
                If ThisNum > PrevNum Then
                    Dif = Dif + (ThisNum - PrevNum)
                    PosMove = PosMove + 1
                ElseIf ThisNum < PrevNum Then
                    Dif = Dif + (PrevNum - ThisNum)
                    NegMove = NegMove + 1
                End If
            End If
            PrevNum = ThisNum
        End If
    Next
    Select Case LCase(Col)
        Case "avg"
            If Dif = 0 Or Cnt = 0 Then
                Score = 0
            Else
                Score = Dif / Cnt
            End If
        Case "pos"
            Score = PosMove
        Case "neg"
            Score = NegMove
    End Select
End Function

Quindi effettueresti la chiamata in questo modo:

=score(A1:K1,"avg")
=score(A1:K1,"pos")
=score(A1:K1,"neg")

1

Vorrei usare un'istruzione if per verificare se le celle sono piene

=IF(COUNT(B2:B3)=2,B3-B2,"")

Se poi si media la riga, le celle vuote verranno ignorate e si dovrebbe ottenere il valore desiderato.

Per la tua tabella qui sotto. Il cambiamento medio sarebbe

=SUMPRODUCT(--(A2:C2<>""),--(A3:C3<>""),(A3:C3-A2:C2))/SUMPRODUCT(--(A2:C2<>""),--(A3:C3<>""))

Il numero di cellule che aumentano potrebbe essere

=SUMPRODUCT(--(A2:C2<A3:C3))

Il numero di celle in diminuzione sarebbe

=SUMPRODUCT(--(A2:C2>A3:C3))

Ciò presuppone che la tabella sia larga solo 3 colonne, espandibile per i tuoi dati.

Sumproduct viene utilizzato principalmente per eseguire calcoli di array. Puoi anche usare altre formule usando ctrl + shift + invio, ma queste dovrebbero fare il trucco.


Scusa, ho detto che ero interessato alle righe quando avrei dovuto guardare le colonne. Semplicemente cambiando B2: da B3 a B2: C2 e A2: da C2 a A2: A4 dovrebbe funzionare, giusto?
114

Sì, è corretto
gtwebb

L'unica cosa che devo regolare è che se c'è uno spazio vuoto e quindi un altro numero dopo lo spazio vuoto, anche quella differenza dovrebbe essere calcolata, ma viene omessa in quella formula poiché il conteggio = / = 2.
114

0

Vorrei utilizzare il componente aggiuntivo Power Query per questo. Ho creato un prototipo che puoi visualizzare o scaricare - la sua "demo di Power Query - movimento medio e differenza su row.xlsx" nel mio One Drive:

https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398

Power Query ha un comando UnPivot per trasformare le righe in colonne (che ignora le celle vuote) ed è possibile aggiungere una colonna Index per tenere traccia della posizione relativa delle celle. Nella mia prima query ho usato quei comandi per trasformare la tua tabella in un lungo elenco di righe (una per ogni cella).

Quindi nella seconda query ho unito quell'elenco con se stesso per mettere in relazione ciascun valore di cella con la successiva cella non vuota a sinistra. Quindi i calcoli, ad esempio Differenze, + I movimenti sono diventati abbastanza facili. L'ultimo passaggio consiste nel raggruppare per numero di riga e aggregare i calcoli

Alla fine sono ripartito dai dati di input e ho unito la seconda query per ottenere l'elenco completo delle righe (comprese quelle senza differenze).

Quindi il vantaggio dell'approccio Power Query è che non è necessario codificare in VBA, il 99% di esso viene eseguito facendo clic sull'interfaccia utente di Power Query o modificando facilmente il codice generato. Inoltre, non sono necessarie formule nidificate complesse: è possibile rimodellare i dati fino a quando i calcoli non diventano facili.

Il comando Power Query Unpivot è sorprendente: si espanderà automaticamente per soddisfare le nuove colonne se vengono aggiunte alla tabella di origine e rimuoverà i valori vuoti.


Mi piacerebbe farlo, ma non è più incluso nella mia versione di Excel dopo l'aggiornamento a Excel 2013.
114

Power Query è un componente aggiuntivo che è necessario scaricare e installare, ad esempio da: microsoft.com/en-au/download/details.aspx?id=39379
Mike Honey

Ho creato un prototipo e aggiunto il link e una descrizione aggiornata nella mia risposta sopra.
Mike Honey,

Sì, ma quel componente aggiuntivo può essere utilizzato solo con determinate versioni di Excel 2013. La stessa cosa è successa con PowerPivot.
114
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.