excel如何隔行隔列複製公式?
如圖,
我想G5=清單匯總的H5,H5=回單匯總的H5,G6=G5+H5。以此三格為基準。I5=清單匯總的I5,J5=回單匯總的I5,往後類推。G7=清單匯總的H6,H7等於回單匯總的H6,往下類推。請教G5和H5的公式應該怎麼設才能夠往後和往下隔行隔列填充?
題主已經在用INDIRECT了,那我就直接講後面的問題了
我們先來整理一下問題
區域公式整體複製的話,最常見的操作方式就是整體複製整體粘貼
粘貼後相對引用會自動進行相應單位的偏移
那麼問題就是如何把序列1 {5,7,9,…} 轉化為序列2 {5,6,7,…}
不過…這好像是個數學問題…
INDIRECT("清單匯總!H"ROW()/2+2.5)
當然我建議怎麼也稍微設計一丟丟…
Fin就不批評這張表的排版格式的問題了,其實能夠理解,因為在可視化理解和EXCEL規範上有時候會有衝突。就好比這個表上,清單+回單,你會用一個合併單元格來表示他們的和,這個在相鄰公式里去寫還是可以表達的,但當你詢問一個整個表格公司自動填充全部的辦法時,就不行了,EXCEL會直接告訴你這部分是合併單元格,不能自動填充。這樣,也就是使得我們的任務分成了兩大部分,一部分是分別引用「清單匯總"和」回單匯總」表中的數字,第二部分,就是在下面一行的對應位置做上面兩個單元格的相加。
任務拆解清楚之後,就可以自上而下的繼續細化,我們先扔掉第二部分的相加(因為相對引用在第一部分也會仔細講述,第二部分理論上你都能照貓畫虎了)。
第一部分,怎麼做表格之間的相對引用的抽象規律。
坦白說,我不知道我這個方法是不是最好的,但我覺得是符合人類思維的一種順邏輯。
1. 建模擬表。
首先,為了避免數字跳動給你驗算帶來的干擾,你要先建3個表來做簡單的對應規律的記錄。
樓主不提供任何excel模板,也不提供另外兩個被引用的sheet的樣子,只好我根據你的隻言片語來構建出三個表。如下圖。(因為只是為了找規律,所以我不想複製你那麼長的表格,做一個片段就好了)
sheet1
清單匯總sheet
回單匯總sheet
可以看到我分別在清單和回單sheet中,分別填寫的是3位數和六位數,因為第一個數字從第五行開始,我們不妨從501開始,一行後面第幾日就是50X,第二行(清單表內)就是601,602,...;而為了在加總的時候驗算方便,你不妨把回單總表的數字都設為X0Y000,這樣當兩個表的數字疊加的時候,你很容易看出來是不是正確(比如你期望那個格子的數字就應該是501501,如果是501602的結果,就暴露你弄錯了)
不要小看這一步啰嗦,因為基本上大部分人都和我一樣不具備alphago的跳躍智慧,我們只能用人類的數學歸納法的心態來砌牆。
2. 發現你的引用疊加規律。
雖然我很想在這了直接寫上「把冰箱門關上」這類的話來秘而不宣,但看在我辛苦這麼久的前提下,我還是願意把不傳之秘公諸於天下。
繼續拆分任務:分為清單和回單,分別來看。
我們觀察一下第一個數據501,是sheet1的G5,根據樓主的需求,它來自「清單匯總」表的G5。
而清單引用第二個數據502,是sheet1的I5,它來自「清單匯總」表的H5。(我這裡就不譴責樓主的描述里為什麼把F列隱掉了,強迫症會死)
我們可以如上圖陳列兩列,你會發現row()都是5,只是列數有變化()。
關鍵一步來了,你把G/I/K 這些翻譯成列序號,就是7/9/11/13...
下面就是最棒的一步來了,我知道是個人都知道,下面就要尋找x和y的關係。也就是說當我扔給excel sheet1中的列序號的時候(x),請問去「清單匯總」表中的對應列序號是多少(y)
很多同學開始要列方程計算係數了,這裡奉獻鄙人畢生雞賊EXCEL絕學TIP在此。
【無腦得出轉換係數!!!】
是的,完美,你只要把兩列畫個散點圖,然後把趨勢線標上並顯示公式。
你就超越了所有的中學生,直接獲得了方程係數。
也就是說,在同一行內,你知道了根據sheet1的列號應該如何正確取得清單匯總表的對應列號。
3. address和indirect函數
樓主的截圖中已經用了indirect函數,然而寫了一半寫不下去了。。。
這是因為indirect("清單匯總!H" 的寫法,你已經將列號寫死了,而不能動態變化了。
所以這時候要引入address函數,它允許你寫(行號,列號,絕對引用,A1/R1C1格式,表單名)
對我們來說就是
=ADDRESS(ROW(),(COLUMN()*0.5+3.5),1,,「清單匯總")
實驗一下,果然在SHEET1的G5這裡出現了
下面就是用indirect函數來嵌套這個字元串,直接去取出該位置的數值啦。
=INDIRECT(ADDRESS(ROW(),(COLUMN()*0.5+3.5),1,,"清單匯總"))
4. 一層層的往外拓展。
已經解決的是同一行,向後各列的對應關係。
A) 那麼下一步是解決不同行,向後各列的對應關係。(先考慮「清單匯總表」)
你會發現又要找一個對應關係,同樣快速用散點圖無腦得出row之間的對應關係。
所以你知道row的寫法就是 清單匯總表的行號=0.5(sheet1的對應行號)+2.5
因此上面的indirect公式
=INDIRECT(ADDRESS(ROW(),(COLUMN()*0.5+3.5),1,,"清單匯總"))
進一步擴充為:
=INDIRECT(ADDRESS(ROW()*0.5+2.5,(COLUMN()*0.5+3.5),1,"清單匯總"))
B) 如何一次性解決清單表和回單表?
當你研究address函數第四個參數時,這個參數如果為空,那麼返回的就是A4,這樣的單元格定位,但如果這個參數是一個字元串,就返回這個字元串作為sheet名稱的表的A4,比如"清單匯總」,那麼是「清單匯總!A4",如果是"回單匯總"那自然就是「回單匯總!A4」。
因此,可以進一步改造ADDRESS函數的第四個參數,通過對列數的奇偶判斷來得出是該引用清單列表還是回單列表。
最終改造為:
=INDIRECT(ADDRESS(ROW()*0.5+2.5,(COLUMN()*0.5+3.5),1,,IF(MOD(COLUMN(),2),"清單匯總","回單匯總")))。
這裡偷懶剛好能這樣簡化是因為你的表格設計里就是一列清單數據一列回單數據,所以可以用一個MOD來直接2分來判斷。
至此,第一部分完成。
第二部分,就是每個人的數據中第二行單元格對上方兩個單元格的疊加。
也是通過一層層構造對應,找到關係:
以G6為例=INDIRECT(ADDRESS(ROW()-1,COLUMN()))+INDIRECT(ADDRESS(ROW()-1,COLUMN()+1))
這裡的address公式只保留了行和列的序號操作,而省略了引用方式和表單名(不需要)。
因此,當完成G6之後,你可以直接向後複製填充正行了。
最後,是否可以構造一個覆蓋這兩行的自動填充的公式呢?
理論上,我仍然可以根據當前單元格所在row()取mod 2,來判斷,是應該走 第一部分的公式,還是走第二部分的公式, IF(MOD(ROW(),2),第二部分公式,第一部分公式)
是的,成功了,你是可以把左上右上和正下方,這三個取值用一個公式概括和表達,但會遇到兩個問題:
A. 你無法自動填充,因為你下方的那個格子是合併單元格,不支持整個表格的自動填充;
B. 過多的嵌套,一方面計算很慢,而且牽一髮動全身,稍微挪一下就都錯了,不便於調試。
所以我的建議仍然是分成兩部分來製作公式。至於有沒有辦法更快的填充呢?
還是可以的,你可以在空白列,通過創造=MOD(ROW(),2),分出奇偶行,然後通過EXCEL的篩選filter功能,只顯示該列數據為1或者為0的行。
這時候你可以更快的用第一部分的公式,或者第二部分的公式來向下向右更快的自動填充了。
綜上,完成這個表格公式的引用工作。
總結來看,你需要學會通過設定不同表單內的數據,來方便你快速定位和找到對應規律(並容易排查錯誤);其次學習ADDRESS和INDIRECT函數的簡單和複雜用法;學會MOD函數幫你分類。重要的是細心,並能把任務拆解,最後再把你的成功的小零件組合起來,有時候分開都對,組合起來就突然不對了,有可能是括弧或者標點的全形問題,但有時候就是excel翻臉不認人(一般改天再開機就好了,你也不知道為什麼同樣的一段公式後來就沒事了)。
========
3分鐘後的更新:突然悲從中來,這種表格引用我相信是EXCEL 90年代就已經有的把戲,全世界有很多人浪費了很多腦汁在這裡,都是重複功;更可怕的是,你這個公式的可行和正確,取決於你每個表裡面人名的排序都是一致和正確沒有錯行的,一旦錯了一行,整個這個累加都是錯的。所以大家明白為什麼面向對象,比面向單元格好了吧,不過說實話大部分同志們使用EXCEL,都不是面向對象的VBA編程,而是面向表格和單元格的操作,就無奈也無語吧。
表格版面換一下,用透視表來解決。
你這樣的版式,看起來也很繁雜不直接啊。
表格有點像磚牆
題主你設計的這張表格,要是落到我手裡,我打不死你
先不說這公式對不對,表格的設計真是感人。
推薦閱讀:
※有沒有人能通俗易懂地介紹一下excel所有公式的作用和使用方法?或者有此類的書籍可推薦一下。
※excel表格怎麼計算已經填充顏色的表格?
※excel保留一位小數時,如何設置當小數為0時不顯示0,而是顯示整數呢?
※excel中,例如22:50與0:15相減,要怎麼輸入公式得到85分鐘呢,而不是h:mm這樣的格式?
※怎麼實現插入在excel固定單元格里的圖片自適應單元格大小?
TAG:Excel公式 |