Presumo che tu abbia un grafico i cui dati di origine hanno tutti gli anni e il valore per quell'anno o # N / A - si spera creato usando la NA()funzione.
In tal caso, gli anni vengono ancora visualizzati sul grafico perché sono ancora nei tuoi dati. È necessario modificarlo in modo che gli anni nei dati di origine vengano completamente rimossi.
Puoi farlo con un grafico pivot anche se dovrai scrivere un po 'di VBA per aggiornare la cache pivot quando l'utente seleziona diversi anni.
Puoi anche farlo con alcune formule e intervalli dinamici. La fattibilità di ciò dipende da quanto sono grandi e dinamici i dati del tuo grafico. Se stai mostrando un riepilogo per ogni anno, potrebbe essere facile. Se stai mostrando centinaia di punti dati, potrebbe essere ingombrante.
Puoi aggiungere un esempio di quale sia il risultato desiderato in modo che possiamo creare una risposta? (Aggiornerò questa risposta in base alla tua risposta.)
AGGIORNAMENTO BASATO SULL'AGGIORNAMENTO DELL'OP
Excel non sta rilasciando i NA()valori perché può ancora vederli anche se non c'è nulla da rappresentare graficamente. È come avere del testo lì. Il tuo asse continua a vedere tutti i periodi, quindi ha etichette da mettere su un asse e quindi salta semplicemente i dati che non è in grado di gestire. Dobbiamo cambiarlo in modo che Excel guardi solo i dati che vogliamo.
- Problema 1) Non tracciare grafici per alcuni anni
- Problema 2) Tracciamo ancora ciò che viene dopo quegli anni. (Solo grafico EG 2014 e 2016)
Se fosse solo il problema 1, potremmo impostare alcuni intervalli con nome dinamico e impostarli come origine del grafico. Tuttavia, a causa del problema 2, dobbiamo prima impostare una tabella provvisoria e quindi creare gli intervalli denominati.
In primo luogo, mi scuso se questo diventa un po 'denso. Sono spesso accusato di essere troppo prolisso. Vorrei davvero poter solo caricare un file qui ...
PASSO 1
Ecco la versione CSV del mio punto di partenza. I miei dati sono nell'intervallo A1:D35(si noti che ho aggiunto una colonna nella parte anteriore chiamata Order- sarà di aiuto in seguito - e ampliato i dati nel 2016.)
Ordine, Periodo, Ordini, Spedizioni
1, P6 / 2014.281,74
2, P7 / 2014.498.126
3, P8 / 2014.589.132
4, P9 / 2014.655.158
5, P10 / 2014.679.161
6, P11 / 2014, 489.115
7, P12 / 2014.574.129
8, P13 / 2014.340,80
9, P1 / 2015.615.225
10, P2 / 2015,0,0
11, P3 / 2015,0,0
12, P4 / 2015,0, 0
13, P5 / 2015,0,0
14, P6 / 2015,0,0
15, P7 / 2015,0,0
16, P8 / 2015,0,0
17, P9 / 2015,0,0
18, P10 / 2015,0,0
19, P11 / 2015,0,0
20, P12 / 2015,0,0
21, P13 / 2015,0,0
22, P1 / 2016,0,0
23, P2 / 2016,0,0
24, P3 / 2016,0,0
25, P4 / 2016,0,0
26, P5 / 2016,0,0
27, P6 / 2016,0,0
28, P7 / 2016,0,0
29, P8 / 2016,0,0
30, P9 / 2016,0,0
31, P10 / 2016,0,0
32, P11 / 2016,0,0
33, P12 / 2016 , 0,0
34, P13 / 2016,0,0
PASSO 2
Aggiungi la tabella intermedia a NA()ciò che non è necessario. Per te, questo potrebbe essere lo stesso del passaggio 1. Per me, ho usato il passaggio 1 come i miei dati grezzi, quindi ho bisogno di questo altro passaggio. I miei dati sono nel range F1:I35. Alla fine è sembrato questo CSV quando ho scelto di abbandonare il 2015.
Ordine, Periodo, Ordini, Spedizioni
1, P6 / 2014.281,74
2, P7 / 2014.498.126
3, P8 / 2014.589.132
4, P9 / 2014.655.158
5, P10 / 2014.679.161
6, P11 / 2014, 489.115
7, P12 / 2014.574.129
8, P13 / 2014.340,80
9, P1 / 2015, # N / A, # N / A
10, P2 / 2015, # N / A, # N / A
11, P3 / 2015, # N / A, # N / A
12, P4 / 2015, # N / A, # N / A
13, P5 / 2015, # N / A, # N / A
14, P6 / 2015, # N / A, # N / A
15, P7 / 2015, # N / A, # N / A
16, P8 / 2015, # N / A, # N / A
17, P9 / 2015, # N / A, # N / A
18, P10 / 2015, # N / A, # N / A
19, P11 / 2015, # N / A, # N / A
20, P12 / 2015, # N / A, # N / A
21, P13 / 2015, # N / A, # N / A
22, P1 / 2016,0,0
23, P2 / 2016,0,0
24, P3 / 2016,0,0
25, P4 / 2016,0,0
26, P5 / 2016,0,0
27, P6 / 2016,0,0
28, P7 / 2016,0,0
29, P8 / 2016,0,0
30, P9 / 2016 , 0,0
31, P10 / 2016,0,0
32, P11 / 2016,0,0
33, P12 / 2016,0,0
34, P13 / 2016,0,0
PASSAGGIO 3
Aggiungi una terza tabella che estrae solo i valori che non sono #N/Anella seconda tabella. Ciò si ottiene utilizzando le formule di array. Ricordi come abbiamo aggiunto la Ordercolonna? Troveremo tutti quei valori che non si allineano #N/Anella Orderscolonna e quindi utilizzeremo ciò che resta per estrarre il resto dei dati. Il mio terzo tavolo è nell'intervallo K1:N35.
La formula per il primo valore nella Ordercolonna è: (Per tutte queste formule, è importante immetterlo con SHIFT+ENTERper trasformarle in formule di matrice come indicato dalle { }parentesi alle estremità).
{=MIN(IF(NOT(ISERROR($H$2:$H$35)),$F$2:$F$35))}
Questo trova il primo valore nella Ordercolonna della seconda tabella ( F2:F35) in cui la Orderscolonna ( H2:H35) non è un errore.
La formula per il resto del secondo valore nella Ordercolonna è:
=IF(OR($K2=0,$K2=MAX($F$2:$F$35)),0,MIN(IF(NOT(ISERROR($H$2:$H$35)),IF($F$2:$F$35>$K2,$F$2:$F$35))))
Questo prima controlla se il valore precedente ( K2in questo caso) è 0o il massimo dei valori dalla seconda tabella - il che significa che abbiamo finito - e restituisce 0in quel caso. In caso contrario, trova il primo valore nella Ordercolonna della seconda tabella che è maggiore del valore precedente trovato e in cui la Orderscolonna non è un errore.
Questa formula può essere trascinata verso il basso nel resto della colonna. Il risultato è simile a questo CSV.
Ordine
1
2
3
4
5
6
7
8
22
23
24
25
26
27
28
29
30
31
32
33
34
0
0
0
0
0
0
0
0
0
0
0
0
0 0
PASSAGGIO 4
Utilizzare una combinazione di INDEXe MATCHper cercare i valori per tutti i Ordervalori sopravvissuti Passaggio 3. La formula Periodo, Ordini e Spedizioni sono indicati in ordine come:
=INDEX(B$2:B$35,MATCH($K2,$A$2:$A$35,0))
=INDEX(C$2:C$35,MATCH($K2,$A$2:$A$35,0))
=INDEX(D$2:D$35,MATCH($K2,$A$2:$A$35,0))
Inseriscili come primo record e copia / incolla o trascinali verso il basso per il resto. Si noti che questi fanno riferimento alla prima tabella e l'unica differenza è il primo parametro. Ecco il CSV per quello che sembra quando si sceglie di nascondere il 2015.
Ordine, Periodo, Ordini, Spedizioni
1, P6 / 2014.281,74
2, P7 / 2014.498.126
3, P8 / 2014.589.132
4, P9 / 2014.655.158
5, P10 / 2014.679.161
6, P11 / 2014, 489.115
7, P12 / 2014.574.129
8, P13 / 2014.340,80
22, P1 / 2016,0,0
23, P2 / 2016,0,0
24, P3 / 2016,0,0
25, P4 / 2016, 0,0
26, P5 / 2016,0,0
27, P6 / 2016,0,0
28, P7 / 2016,0,0
29, P8 / 2016,0,0
30, P9 / 2016,0,0
31, P10 / 2016,0,0
32, P11 / 2016,0,0
33, P12 / 2016,0,0
34, P13 / 2016,0,0
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
0, # N / A, # N / A, # N / A
PASSAGGIO 5
Crea un intervallo di nomi dinamico per le etichette dell'asse X, Serie 1 e Serie 2. Sto usando Excel 2010 e non ti consente di impostare l'intera origine dei dati del grafico contemporaneamente se si tratta di un intervallo con nome dinamico; continua a tornare a un intervallo hardcoded che non si aggiorna. Ciò significa che dobbiamo crearne uno per ogni serie e asse singolarmente. Per creare un intervallo denominato, vai sulla Formulasbarra multifunzione e fai clic su un punto Name Managervicino al centro. Nella finestra di dialogo, fai clic sul Newpulsante in alto a sinistra. Dagli un nome e un intervallo a cui fare riferimento. Il trucco qui è che alcune funzioni come gli OFFSEToggetti range di ritorno in modo da poterle usare qui invece di qualcosa di simile =A1:D35. Ecco le 3 gamme nominate che ho creato e la loro formula.
Nome: rngPeriod
Formula:
=OFFSET(Sheet1!$L$2,0,0,IFERROR(MATCH(0,Sheet1!$K:$K,0)-2,MATCH(MAX(Sheet1!$A:$A),Sheet1!$K:$K,0)-1))
Nome: rngOrders
Formula:
=OFFSET(Sheet1!$M$2,0,0,IFERROR(MATCH(0,Sheet1!$K:$K,0)-2,MATCH(MAX(Sheet1!$A:$A),Sheet1!$K:$K,0)-1))
Nome: rngShipments
Formula:
=OFFSET(Sheet1!$N$2,0,0,IFERROR(MATCH(0,Sheet1!$K:$K,0)-2,MATCH(MAX(Sheet1!$A:$A),Sheet1!$K:$K,0)-1))
Ogni formula funziona allo stesso modo. Inizia dalla cima dei dati che vogliamo. Scendi uno. Trova il primo 0nella Ordercolonna o trova il valore massimo - che indica la fine dei dati che vogliamo - e rendi l'intervallo abbastanza alto da coprire tutto dalla prima all'ultima riga che vogliamo. Punto chiave: questo causerà un errore e il tuo grafico non mostrerà se scegli di nascondere ogni anno, quindi ogni valore è #N/Ae il primo valore nella Ordertabella è 0perché quindi la MATCHfunzione ritorna 1e 1-2=-1e non puoi avere un intervallo che sia -1file alte.
PASSAGGIO 6
Imposta il tuo grafico per utilizzare questi intervalli denominati dinamici. Usa qualunque valore desideri, Series name:ma Series values:dovrebbe essere il nome degli intervalli dinamici. Il punto chiave - molto fastidioso - è che devi includere il nome del file. Fai la stessa cosa per le etichette degli assi orizzontali (categoria) e sarai pronto. Il mio grafico finisce per usarli per la serie 1, la serie 2 e l'etichetta dell'asse:
=sample.xlsx!rngOrders
=sample.xlsx!rngShipments
=sample.xlsx!rngPeriod
IF(conditions,"#N/A")aIF(conditions, #N/A)