共计 1629 个字符,预计需要花费 5 分钟才能阅读完成。
引言
Excel是我们工作中几乎天天都要用到的办公软件,其强大的功能就不多说了,其实很多时候让我们抓狂的是一些特殊问题的出现导致工作效率大打折扣。今天我就遇到一个“老”问题,为什么说是老呢?因为之前也遇到过,之前的解决办法是一个单元格一个单元格操作,办法虽然笨,却起作用,然而今天遇到的大量的数据操作,很显然不可能采取笨方法了。更何况,面对强大的Excel,当然要挖掘更好的操作方式。
废话不多说,一步一步来。
一、问题描述
手里有2份文档,一是word文档,里面是一张表格(4列内容,若干行);二是一个excel文档,里面的表格较为复杂。
现在需要将word文档中的部分数据粘贴到excel的单元格中,但因为目标单元格是属于合并后的单元格,粘贴时会出现“您粘贴的数据与选择的数据大小不一样”、“无法对合并单元格执行此操作”的错误。
二、问题分析
之所以出现这个问题,是因为excel中的单元格有的是合并后的,而word里不是,在粘贴时,系统无法判断用户到底要粘贴到合并单元格里面具体哪一个位置,所以报错。机器到底是机器,有时候无法领会人类的思想。
三、解决方案
简单说,解决此问题需要使用excel的函数:OFFSET。
OFFSET的用法是:=offset(reference,rows,cols,[height],[width])
reference的意思是引用来作为参照的区域;rows是指相对于参照区域(即前面reference的值)偏移了多少行;cols当然就是指偏移的列数;height和width就不多说了,一个是高,一个是宽。
参数解释起来有点复杂, 如果要深入研究OFFSET函数,请自行咨询百度,我个人认为此类问题只需要参考案例,实际操作、修改,很快就能用上并且解决问题了,不信接着看。
图为需要复制的word文档
图为目标excel
上图可以看出,目标excel的ABC三列中,都是合并单元格。直接粘贴eord中的数据会报错。
第一步:将word中需要粘贴的数据复制到excel表格内空白区域。
第二步:在A列第一个需要写入数据的单元格里,输入以下代码:=OFFSET(G$2,INT((ROW(G2)-1)/3),)
这里解释下OFFSET的参数,G$2表示对参照的区域进行定位,这里我们就定位第一个数据,也就是位于G2的张三,加$号的意思是绝对定位;INT((ROW(G2)-1)/3)稍微复杂了点,意思是相对于G2,往下多少行,如果你前面的合并单元格是2行合并的,那这里就将3改成2即可,如果是4行合并的,就改成4,以此类推,这里int的意思是对后面的运算结果取整。肯定有人会发出疑问,既然OFFSET括号里第二个参数表示相对参照区域偏移多少行,那就直接输入数字啊,为什么要如此复杂?原因在于,我们不仅要保证第一个单元格运算结果是正确的,还要保证待会批量复制代码的时候,每一个单元格都能获取到正确结果,不信你将A列第一个单元格复制后粘贴到下面第二个单元格,再看代码,是不是变成了=OFFSET(G$2,INT((ROW(G5)-1)/3),) ?观察有什么不同?G2变成了G5对不对?其规律就是目标单元格是由几个单元格合并而来,在粘贴代码时它就会自动随之而变。所以G5-1再除以3,取整就是1,相当于偏移1行;同理,再下面一个单元格当然就是G8-1再除以3,然后取整,结果是2,相当于偏移2行。看懂了吗?结合上面的示例图片理解,左边区域要填的单元格每次往下走一次,相当于走了3行,而右边的来源数据,每次只能让它走一行。
第三步:最后一步就简单了,将需要填空的单元格,复制或者拉动代码,即可瞬间完成,效果如下。
四、总结
本文以实例的方式说明了excel函数offset的用法,该函数虽然简单,但却能解决实际工作的大问题,在碰到这个问题后,我在网上搜索了很久都没找到答案,后来终于找打一篇介绍OFFSET函数的文章,并自己摸索,解决了问题,所以分享到本博客,供后来者参考。
啥啊
捕捉到一只假冒陈大猫。。