|
本帖最后由 roych 于 2011-1-24 00:32 编辑
回复 leslie0705 的帖子
再做最后一次解释吧,选中一个4×3的单元格区域,输入:
=row(1:4)*10+column(B:D)*101,
按下Ctrl+shift+enter结束输入生成数组,你就会发现有什么不同了:
小妖姐姐这个公式:
=ADDRESS(MOD(MIN(IF(A4=B1:D4,ROW(1:4)+COLUMN(B:D)*10)),10),MIN(IF(A4=B1:D4,COLUMN(B:D))),4)
我就勉为其难地解释一下吧,尽管没有小妖姐姐讲课讲得那么好,——毕竟俺不是培训师出身的嘛,有误的地方请多多指正。
我们先从最内层开始:
①IF(A4=B1:D4,ROW(1:4)+COLUMN(B:D)*10)
这表示什么意思呢?表示的是,如果在B1:D4的区域找到与A4相等的值,就返回其列标的10倍与其行标的和,例如,A4在这个区域里共有2个值,B2和C1,那么返回值为:22和31,如果没有找到,当然返回0(即False)了。
根据上面的意思,两个值都是符合条件的,那么我们需要的是哪个值呢?显然,我们需要列标最小的值,也就是B2。B2对应的是22,C1对应的是31……我们是不是可以得到这么一个规律,最小值才是我们想要的?
因此用Min函数来获取最小值:Min(元素集合),获得集合中最小值。接下来,我们再对这两个数值做进一步观察,很显然,十位数为列标,个位数为行标。那么就有了下面的操作了:
如果行、列标都是一位数的话,我们甚至可以直接用left和right来分离开行标和列标。这里小妖姐姐用Mod函数。Mod的只用在于取模,这个“模”听起来很专业,通俗点说就是取余数。例如Mod(A1,A2)就是取A1除以A2后的余数。——顺便提一下,如果有十几行,则应该列标该乘以100,再按100取模,这样公式要严谨些。
通过对If获得的数值取模,我们获得了所有的行标。当然,对于列标,我们就不用这么复杂了,直接根据公式①,稍作改造就可以获取列标了。这里不再解释:MIN(IF(A4=B1:D4,COLUMN(B:D))),4)
至此,行标和列标都获取到了,那么再用Address(行标,列标)即可返回单元格位置。小妖姐姐这里加了一个参数值4,表示的是获取的地址为相对引用。默认情况下为绝对引用,即带美元符号的地址。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|