Come copio la formula su colonne e righe, regolando i riferimenti di cella e i nomi dei fogli


2

Non riesco a capire come copiare una formula usando una combinazione di riferimenti assoluti e relativi e riferimenti al nome del foglio.

Ho un foglio che è un riepilogo degli altri fogli nel libro, ogni foglio componente che rappresenta un mese dell'anno. Devo popolare il foglio di riepilogo copiando le celle con riferimenti agli altri fogli. Le colonne formula devono riflettere le colonne associate da una riga fissa su ciascun foglio, mentre la riga formula deve riflettere la selezione del foglio. I nomi dei fogli si basano sul nome del mese.

La cartella di lavoro ha un foglio per ogni mese dell'anno, gennaio, febbraio, ecc. Ciascuno di quei fogli è identico e sto estraendo i valori dalla riga di riepilogo del mese (riga 4) del foglio di ogni mese. La riga di riepilogo contiene i totali dei mesi per le diverse categorie contabili in colonne consecutive a partire dalla colonna E.

Ogni riga del foglio di riepilogo contiene la riga di riepilogo del foglio mensile associato.

In altre parole, ho questo: cell E5è =IF(Jan!E4>0,Jan!E4," ")e voglio che la cella sottostante ( E6) fosse =IF(Feb!E4>0,Feb!E4," ").

Quindi la cella 'F5' (a destra di E5) sarebbe =IF(Jan!F4>0,Jan!F4," ").

Allego schermate della pagina di riepilogo e uno dei fogli mensili.

Foglio di gennaio

Scheda di sintesi


Sto solo seguendo. Siamo riusciti a risolverlo per te?
Fixer 1234

Oggi ho tempo da parte per riprovare. Ti farò sapere dopo. Grazie mille per tutto il vostro aiuto e attenzione a questo. Molto apprezzato.
PatP

fixer1234 - La mia cartella di lavoro è completa! Non dovrei pubblicare un "grazie" qui, ma non sono ancora autorizzato a votare. Puoi eliminare questo commento dopo averlo letto. Sono così grato per il tempo che tu e @ReyJuna avete impiegato non solo a mostrarmi come fare, ma a spiegarlo in modo da capirlo e applicarlo ad altri progetti in seguito. Tanto di cappello a te!
PatP

Risposte:


0

La risposta di Rey Juna spiega come farlo con una tabella di ricerca. Ecco un approccio alternativo per derivare gli indirizzi di riferimento senza una tabella di ricerca. La struttura generale della formula è simile. Gran parte di ciò è dettato dalla traduzione delle posizioni delle formule in riferimenti di cella (nota che le traduzioni delle posizioni nelle mie formule ora possono essere leggermente diverse da quelle di Rey perché la descrizione nella domanda è cambiata un po ').

  • Desideri che la riga della formula 5 faccia riferimento a gennaio (mese 1), quindi dobbiamo sottrarre 4 dalla riga della formula.
  • Si desidera estrarre i dati colonna per colonna, iniziando dalla colonna E, ma sempre dalla riga 4 del foglio di destinazione.

La descrizione nella domanda è cambiata, quindi userò un metodo leggermente diverso con INDIRECT. INDIRECT ha una funzione che consente di fare riferimento alle celle con il cosiddetto formato R1C1, utile per questo tipo di requisiti. È possibile specificare facilmente i numeri di riga e colonna e eseguire l'indirizzamento relativo.

INDIRECT ha un ultimo parametro facoltativo utilizzato per indicare lo stile dei riferimenti di cella. Se è FALSE o 0, indica l'indirizzamento di stile R1C1. All'interno della stringa INDIRETTA, si R4C[0]riferisce alla riga 4 e alla stessa colonna della formula (zero offset).

Altrimenti, la differenza principale qui è come derivare i nomi dei fogli tramite una formula anziché una ricerca.

La chiave di ciò è questa formula:

TEXT((ROW()-4)*28,"mmm")

La riga meno 4 è stata spiegata sopra, traducendo la posizione della formula in numero del mese. Dobbiamo trasformare il numero del mese in una data che rientri in quel mese (che può essere in qualsiasi anno, abbiamo solo bisogno di un giorno dell'anno). Moltiplicare per 28 lo fa. Tutti i mesi tranne febbraio durante un anno non bisestile hanno più di 28 giorni, ma questo è abbastanza buono da garantire che il numero del giorno risultante sia nel mese giusto.

(Nota che questo trucco funziona per tradurre 1-12 in gennaio-dicembre, ma dovrebbe essere modificato se il tuo mese iniziale è diverso da gennaio o se hai più anni consecutivi; non puoi semplicemente regolare l'offset di riga. Vedi l'addendum qui sotto.)

La funzione TEXT formatta il risultato come l'abbreviazione di tre lettere al mese.

Mettendo insieme, la formula effettiva è:

=IF(INDIRECT(TEXT((ROW()-4)*28,"mmm")&"!R4C[0]",0)>0,INDIRECT(TEXT((ROW()-4)*28,"mmm")&"!R4C[0]",0),"")

Puoi copiare e incollare questa formula nella cella E5, quindi semplicemente copiare e incollare o trascinare per riempire la matrice. Non è necessario modificare la formula a meno che il layout del foglio di lavoro non cambi.

Addendum: se i tuoi mesi hanno qualcosa di diverso da gennaio-dicembre (come gli anni fiscali) e / o hai più anni consecutivi, ecco un altro trucco per utilizzare la conversione mostrata sopra dell'abbreviazione da numero a mese.

  • Apporta la prima correzione di riga per tradurre il numero di riga nel numero del mese iniziale. Supponi che la tua prima riga della formula sia 5 e che il mese iniziale sia ottobre, quindi utilizzeresti ROW () + 5.
  • Avvolgere che con la funzione MOD di lasciare il resto dopo dividendo per 12 (Dicembre uscirà zero, ma che funziona ancora): MOD(ROW()+5,12). Il risultato è che ogni riga punta al numero del mese giusto.
  • Utilizzare che nella funzione TESTO: TEXT(MOD(ROW()+5,12)*28,"mmm").

@PatP, hai chiesto di iniziare da dicembre nella riga 7 e di utilizzare +5 invece di -6. No, il trucco non è così intelligente, la riga successiva sarebbe ancora un giorno a dicembre. Puoi usare -7; l'aritmetica produrrebbe 0per il primo giorno, che Excel vede come nel dicembre dell'anno precedente, e il resto dei mesi verrebbe fuori giusto. Per anni che non sono gennaio-dicembre, dovresti modificare la formula per tradurre correttamente i numeri di riga in giorni che rientrano nel mese giusto. Questo è solo un trucco che funziona per la produzione di gennaio-dicembre.
Fixer 1234

Sono stato in grado di far funzionare la formula per gennaio-dicembre nella colonna E. L'ho fatto funzionare in Col F cambiando "! E" & COLUMN () - 1 in "! F" & COLUMN () - 2 . Suppongo che sia giusto. Ho circa 100 colonne su cui portare la formula. Ho giocato con un paio di modifiche per renderlo "trascinabile", ma non sono stato in grado di farlo funzionare. Non sono sicuro di cosa mi manchi.
PatP

@PatP, puoi aggiornare la domanda per descrivere più accuratamente / completamente il tuo foglio di calcolo? Forse aggiungi uno screenshot? Sembra che il tuo requisito sia un po 'più complesso di quanto la domanda implichi. Sarà più facile per le persone darti una buona soluzione se avremo una migliore comprensione di tutto ciò che devi realizzare.
Fixer 1234

@PatP, grazie per aver pubblicato le immagini e chiarito i riferimenti di cella. Quello che mostra è un po 'diverso da quello che avevo immaginato in precedenza, quindi aggiornerò la risposta.
Fixer 1234

0

Questo approccio richiede una lista dei nomi dei mesi abbreviati, che ho messo in cellule A1tramite A12di un foglio che ho chiamato ListMo, in questo modo:

|    |  A  |
|---:|:---:|
|  1 | Jan |
|  2 | Feb |
|  3 | Mar |
|  4 | Apr |
|  5 | May |
|  6 | Jun |
|  7 | Jul |
|  8 | Aug |
|  9 | Sep |
| 10 | Oct |
| 11 | Nov |
| 12 | Dec |

Ecco la formula che andrebbe nella tua cella E7:

=IF(INDIRECT(INDEX(ListMo!$A$1:$A$12,ROW()-6,) & "!E" & COLUMN()-1)>0,INDIRECT(INDEX(ListMo!$A$1:$A$12,ROW()-6,) & "!E" & COLUMN()-1)," ")

Spiegazione

INDEX(ListMo!$A$1:$A$12,ROW()-6,)

Indexconsente di selezionare un elemento da un array / elenco. Row()restituisce semplicemente il numero della riga in cui si trova la formula e lo -6scostamento necessario per ottenere la riga 7 in modo che sia uguale al primo elemento nell'elenco, "Jan".

COLUMN()-1

Proprio come Row(), Column()restituirà il numero della colonna in cui si trova la formula e -1lo scostamento necessario per ottenere la colonna E, o 5, per uguagliare il 4 in E4.

Indirectti permette di mettere insieme tutto questo testo &e di leggerlo come riferimento di cella.

Nel caso di cellula E7si risolverebbe così:

INDIRECT(INDEX(ListMo!$A$1:$A$12,1) & "!E" & 4)che quindi sarebbe uguale Jan!E4.

La Indirectformula deve essere eseguita due volte perché il riferimento a quella cella viene utilizzato due volte nella formula.

Ciò che tutto ciò ti consente di fare è trascinare la formula a destra e tuttavia spostare il riferimento di cella verso il basso, che non è il comportamento predefinito quando trascini le formule in Excel. E trascinando la formula verso il basso ora si seleziona il nome del foglio successivo e i nomi dei fogli non possono essere incrementati mediante il trascinamento predefinito.


Apprezzo molto il tuo tempo dedicato a spiegarmi tutto questo. Penso di capirne la maggior parte. Ho bisogno di alcuni chiarimenti su due punti però. Uno, ho fatto un errore nel spiegare la mia situazione dicendo che "E7" avrebbe raccolto informazioni dal foglio di gennaio. In realtà sarà "E5" che punta a gennaio. Per consentire ciò, cambierei 'ROW () - 6' in 'ROW () - 4', è corretto? ... continua prossimo commento
PatP

L'altro punto su cui non sono chiaro sarebbe impostarlo per trascinare la formula. "E5" sarebbe la prima colonna con la formula e la trascinerei verso destra su più colonne. Tutte le colonne su quella riga verranno tirate da gennaio. Tutte le colonne nella riga successiva "6" verrebbero estratte da febbraio, ecc. "E5" sarebbe la prima colonna con una formula. ... continua prossimo commento
PatP

Quindi, hai Proprio come Row (), Column () restituirà il numero della colonna in cui si trova la tua formula e -1 è l'offset necessario per ottenere la colonna E, o 5, uguale a 4 inE4. Se lo sto leggendo correttamente, la formula dice alla cella corrente di guardare alla cella a sinistra. Se avessi quel diritto, cosa metterei nella prima colonna?
PatP,

La formula dice alla cella corrente di guardare una cella su un altro foglio, che è il foglio del nome del mese. Hai chiesto alla cella E7di fare riferimento al foglio del mese E4e alla cella a destra E7, che sarebbe F7, di fare riferimento al foglio del mese E5. Questo è ciò che realizza. Se trascini semplicemente il E4riferimento a destra senza INDIRECT, otterrai invece un riferimento F4. Inoltre, non sono sicuro di cosa intendi per "la prima colonna". Intendi cell E1?
Rey Juna,

Mi dispiace, ti ho visto solo l'ultimo commento, quindi è quello a cui ho risposto. Sì, se invece avessi iniziato E5invece lo sarebbe ROW()-4. E ora che ho letto tutti i tuoi commenti, Ein E5è la colonna e verrà visualizzata la colonna Esul foglio del mese. Vuoi dire "prima fila"? Se è così, la fila non 5sarebbe la tua prima fila?
Rey Juna,

-1

Il segno $ nell'indirizzo della cella corregge il riferimento di cella o riga. Se intendi, ad esempio, fare riferimento a una cella nella riga 4 e copiare quella formula, potresti fare riferimento alla cella E $ 4. Quando questo viene copiato nella colonna, si ottiene sempre E $ 4. Copiandolo su una riga si ottengono E $ 4, F $ 4, G $ 4.

Se stavi costruendo qualcosa con riferimento a una colonna di mesi (fuori dal grafico), potresti riferirti a qualcosa del tipo (IF $ A1 = E $ 4 ...). Questo se copiato verso il basso cambierebbe 1così per indicare A2, A3, ... che conterrebbe i mesi. E4 continuerebbe a fungere da variabile di test, ma nella colonna successiva (quando la colonna viene copiata), sarebbe F $ 4, indicando un nuovo test.


Questo non gestirà questa situazione. I fogli hanno abbreviazioni dei nomi dei mesi e la copia delle righe deve cambiare il nome del foglio.
Fixer 1234
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.