引言
Excel是我們工作中幾乎天天都要用到的辦公軟件,其強(qiáng)大的功能就不多說了,其實很多時候讓我們抓狂的是一些特殊問題的出現(xiàn)導(dǎo)致工作效率大打折扣。今天我就遇到一個“老”問題,為什么說是老呢?因為之前也遇到過,之前的解決辦法是一個單元格一個單元格操作,辦法雖然笨,卻起作用,然而今天遇到的大量的數(shù)據(jù)操作,很顯然不可能采取笨方法了。更何況,面對強(qiáng)大的Excel,當(dāng)然要挖掘更好的操作方式。
廢話不多說,一步一步來。
一、問題描述
手里有2份文檔,一是word文檔,里面是一張表格(4列內(nèi)容,若干行);二是一個excel文檔,里面的表格較為復(fù)雜。
現(xiàn)在需要將word文檔中的部分?jǐn)?shù)據(jù)粘貼到excel的單元格中,但因為目標(biāo)單元格是屬于合并后的單元格,粘貼時會出現(xiàn)“您粘貼的數(shù)據(jù)與選擇的數(shù)據(jù)大小不一樣”、“無法對合并單元格執(zhí)行此操作”的錯誤。
二、問題分析
之所以出現(xiàn)這個問題,是因為excel中的單元格有的是合并后的,而word里不是,在粘貼時,系統(tǒng)無法判斷用戶到底要粘貼到合并單元格里面具體哪一個位置,所以報錯。機(jī)器到底是機(jī)器,有時候無法領(lǐng)會人類的思想。
三、解決方案
簡單說,解決此問題需要使用excel的函數(shù):OFFSET。
OFFSET的用法是:=offset(reference,rows,cols,[height],[width])
reference的意思是引用來作為參照的區(qū)域;rows是指相對于參照區(qū)域(即前面reference的值)偏移了多少行;cols當(dāng)然就是指偏移的列數(shù);height和width就不多說了,一個是高,一個是寬。
參數(shù)解釋起來有點復(fù)雜, 如果要深入研究OFFSET函數(shù),請自行咨詢百度,我個人認(rèn)為此類問題只需要參考案例,實際操作、修改,很快就能用上并且解決問題了,不信接著看。
圖為需要復(fù)制的word文檔
圖為目標(biāo)excel
上圖可以看出,目標(biāo)excel的ABC三列中,都是合并單元格。直接粘貼eord中的數(shù)據(jù)會報錯。
第一步:將word中需要粘貼的數(shù)據(jù)復(fù)制到excel表格內(nèi)空白區(qū)域。
第二步:在A列第一個需要寫入數(shù)據(jù)的單元格里,輸入以下代碼:=OFFSET(G$2,INT((ROW(G2)-1)/3),)
這里解釋下OFFSET的參數(shù),G$2表示對參照的區(qū)域進(jìn)行定位,這里我們就定位第一個數(shù)據(jù),也就是位于G2的張三,加$號的意思是絕對定位;INT((ROW(G2)-1)/3)稍微復(fù)雜了點,意思是相對于G2,往下多少行,如果你前面的合并單元格是2行合并的,那這里就將3改成2即可,如果是4行合并的,就改成4,以此類推,這里int的意思是對后面的運算結(jié)果取整??隙ㄓ腥藭l(fā)出疑問,既然OFFSET括號里第二個參數(shù)表示相對參照區(qū)域偏移多少行,那就直接輸入數(shù)字啊,為什么要如此復(fù)雜?原因在于,我們不僅要保證第一個單元格運算結(jié)果是正確的,還要保證待會批量復(fù)制代碼的時候,每一個單元格都能獲取到正確結(jié)果,不信你將A列第一個單元格復(fù)制后粘貼到下面第二個單元格,再看代碼,是不是變成了=OFFSET(G$2,INT((ROW(G5)-1)/3),) ?觀察有什么不同?G2變成了G5對不對?其規(guī)律就是目標(biāo)單元格是由幾個單元格合并而來,在粘貼代碼時它就會自動隨之而變。所以G5-1再除以3,取整就是1,相當(dāng)于偏移1行;同理,再下面一個單元格當(dāng)然就是G8-1再除以3,然后取整,結(jié)果是2,相當(dāng)于偏移2行??炊藛??結(jié)合上面的示例圖片理解,左邊區(qū)域要填的單元格每次往下走一次,相當(dāng)于走了3行,而右邊的來源數(shù)據(jù),每次只能讓它走一行。
第三步:最后一步就簡單了,將需要填空的單元格,復(fù)制或者拉動代碼,即可瞬間完成,效果如下。
四、總結(jié)
本文以實例的方式說明了excel函數(shù)offset的用法,該函數(shù)雖然簡單,但卻能解決實際工作的大問題,在碰到這個問題后,我在網(wǎng)上搜索了很久都沒找到答案,后來終于找打一篇介紹OFFSET函數(shù)的文章,并自己摸索,解決了問題,所以分享到本博客,供后來者參考。
|