许多excel论坛都是热闹的所在,诸多EXCEL高手出入其间,他们思路之开阔,函数公式运用之娴熟,解决方案之出人意表……真是达到了出神入化的程度,不由叫人生发高处不胜寒之感慨。但不是所有的人都能成为那样的高手。大部分人,出于各种原因,都不可能达到那么专业的高度。而无论高手,还是普通的使用者,面临需要解决的问题却往往是一样的。不同的只是,高手们解决起来游刃有余,而普通的使用者却可能束手无策。
难题之难,有一些是由题目本身的难度所决定的,但也有不少则是因为操作者对数据处理的失当而造成的,比如经常看到有将“食品50元”或“单价2.15”等文本中的数值进行分离运算的要求,就表现了数据设计思路的混乱,其难度其实是人为所致,因而本文只就前者进行探讨。
对普通使用者来说,处理难题,最有效的方法大概就是通过增加题目本身所不具备的条件来降低其难度。辅助列方法就是这样的一种方法。
辅助列(行),亦可称之为过渡列(行),在EXCEL使用中,可以做为一个重要的手段。
我们先来看一个比较极端的例子。
例一:求A2:A1OO中连续出现次数最多的项目(假设只有一种。注意,是项目,而非次数)。
这是我过去的一个帖子中提出过的一个问题。使用数组公式解决,下面的公式可供选择:
=INDEX(A:A,MAX(IF(MAX(FREQUENCY(ROW(A$1:A$99),(A$2:A$99<>A$3:A$100)*ROW(A$2:A$99)))=FREQUENCY(ROW(A$1:A$99),(A$2:A$99<>A$3:A$100)*ROW(A$2:A$99)),ROW(A$1:A$99),"")))
不说别的,光是长度,就够叫人头晕的了。
其实这个问题,加一个辅助列,就变得再简单不过了:
步骤一:在B2输入:=IF(A2=A1,B1+1,0)(B1为空或文本),向下复制;
步骤二:输入计算公式:=INDEX(A:A,MATCH(MAX(B2:B100),B2:B100,)+1)
绕了一个弯,也同样达成了效果。这就好比下山,高手们可以随便找一条岩石小路矫健地溜下去,但普通人还是得走平缓的盘山大道,尽管多走了路,却安全得多。
把一个大的难题分解成多个小的一般性问题,使复杂问题简单化,这是辅助列方法的优点之一。
上例两种方法使用了不同的函数方案。下面再举一个使用基本相同的方案的例子。
例二:提取例一数据中的不重复项目。
数组公式的解决方案可以参考下面的方法:
=INDEX(A:A,SMALL(IF(MATCH(A$2:A$100,A$2:A$100,0)=ROW(A$1:A$99),ROW(A$1:A$99),""),ROW(1:1))+1),向下复制,直到错误值出现。
用辅助列方法来解决,思路与此相类:
步骤一:在B2输入:=IF(COUNTIF(A$2:A2,A2)=1,ROW(A2),""),向下复制;
步骤二:输入计算公式:=INDEX(A:A,SMALL(B:B,ROW(A1))),向下复制,直到错误值出现(纠错过程略)。
尽管思路类似,但由于使用的是一般公式,对运算速度的提升是有好处的。“不重复项目”的数据量越大,这个好处就越明显。假如这个数据量达到几千上万条,使用数组公式处理,甚至有可能造成机器停顿,而使用一般公式,则基本上不会有什么异样之感。
长于处理大数据量,有效提升运算速度,这是辅助列方法的优点之二。
辅助列用得好,有可能使它成为你的表格的一个有机组成部分。这就算是辅助列方法的优点之三吧。
下面是曾经看到的一个实例。
例三:A列是商品名,B列是对应A列的销售数量,A2:B100区域构成流水记录;D列是对应A列数据的无重复的商品名,E列是D列的对应单价,D2:E11区域组成一个价目表。要求在F2求得所有商品的销售总额。
这个问题,用数组公式来处理并不复杂:
=SUM(SUMIF(A2:A100,D2:D11,B2:B100)*E2:E11)
但如果使用C列做辅助列,在流水记录中直接计算出各条销售记录的金额,岂不是更为直观,表格的统计功能岂不是更加完备吗?
步骤一:在C2输入:=VLOOKUP(A2,$D$2:$E$11,2)*B2,向下复制;
步骤二:在F2输入计算公式:=SUM(C:C)
使用辅助列方法,同样是需要技巧的,要有足够的函数知识做基础,同时要对数据的结构和它们之间的逻辑关系有明确的认识。上面所举的几个例子,也可以清楚地说明这个道理。
凡事皆有度,辅助列的诸多优点要依靠用得好来体现。何谓“用得好”?精练是不可或缺的要求。而所谓精练,就是抓住关键,直奔主题。不要弄成层层剥皮。一下子增加三、五个辅助列,辅助列还要靠其他辅助列来辅助,那表格还怎么看呀!
难题之难,有一些是由题目本身的难度所决定的,但也有不少则是因为操作者对数据处理的失当而造成的,比如经常看到有将“食品50元”或“单价2.15”等文本中的数值进行分离运算的要求,就表现了数据设计思路的混乱,其难度其实是人为所致,因而本文只就前者进行探讨。
对普通使用者来说,处理难题,最有效的方法大概就是通过增加题目本身所不具备的条件来降低其难度。辅助列方法就是这样的一种方法。
辅助列(行),亦可称之为过渡列(行),在EXCEL使用中,可以做为一个重要的手段。
我们先来看一个比较极端的例子。
例一:求A2:A1OO中连续出现次数最多的项目(假设只有一种。注意,是项目,而非次数)。
这是我过去的一个帖子中提出过的一个问题。使用数组公式解决,下面的公式可供选择:
=INDEX(A:A,MAX(IF(MAX(FREQUENCY(ROW(A$1:A$99),(A$2:A$99<>A$3:A$100)*ROW(A$2:A$99)))=FREQUENCY(ROW(A$1:A$99),(A$2:A$99<>A$3:A$100)*ROW(A$2:A$99)),ROW(A$1:A$99),"")))
不说别的,光是长度,就够叫人头晕的了。
其实这个问题,加一个辅助列,就变得再简单不过了:
步骤一:在B2输入:=IF(A2=A1,B1+1,0)(B1为空或文本),向下复制;
步骤二:输入计算公式:=INDEX(A:A,MATCH(MAX(B2:B100),B2:B100,)+1)
绕了一个弯,也同样达成了效果。这就好比下山,高手们可以随便找一条岩石小路矫健地溜下去,但普通人还是得走平缓的盘山大道,尽管多走了路,却安全得多。
把一个大的难题分解成多个小的一般性问题,使复杂问题简单化,这是辅助列方法的优点之一。
上例两种方法使用了不同的函数方案。下面再举一个使用基本相同的方案的例子。
例二:提取例一数据中的不重复项目。
数组公式的解决方案可以参考下面的方法:
=INDEX(A:A,SMALL(IF(MATCH(A$2:A$100,A$2:A$100,0)=ROW(A$1:A$99),ROW(A$1:A$99),""),ROW(1:1))+1),向下复制,直到错误值出现。
用辅助列方法来解决,思路与此相类:
步骤一:在B2输入:=IF(COUNTIF(A$2:A2,A2)=1,ROW(A2),""),向下复制;
步骤二:输入计算公式:=INDEX(A:A,SMALL(B:B,ROW(A1))),向下复制,直到错误值出现(纠错过程略)。
尽管思路类似,但由于使用的是一般公式,对运算速度的提升是有好处的。“不重复项目”的数据量越大,这个好处就越明显。假如这个数据量达到几千上万条,使用数组公式处理,甚至有可能造成机器停顿,而使用一般公式,则基本上不会有什么异样之感。
长于处理大数据量,有效提升运算速度,这是辅助列方法的优点之二。
辅助列用得好,有可能使它成为你的表格的一个有机组成部分。这就算是辅助列方法的优点之三吧。
下面是曾经看到的一个实例。
例三:A列是商品名,B列是对应A列的销售数量,A2:B100区域构成流水记录;D列是对应A列数据的无重复的商品名,E列是D列的对应单价,D2:E11区域组成一个价目表。要求在F2求得所有商品的销售总额。
这个问题,用数组公式来处理并不复杂:
=SUM(SUMIF(A2:A100,D2:D11,B2:B100)*E2:E11)
但如果使用C列做辅助列,在流水记录中直接计算出各条销售记录的金额,岂不是更为直观,表格的统计功能岂不是更加完备吗?
步骤一:在C2输入:=VLOOKUP(A2,$D$2:$E$11,2)*B2,向下复制;
步骤二:在F2输入计算公式:=SUM(C:C)
使用辅助列方法,同样是需要技巧的,要有足够的函数知识做基础,同时要对数据的结构和它们之间的逻辑关系有明确的认识。上面所举的几个例子,也可以清楚地说明这个道理。
凡事皆有度,辅助列的诸多优点要依靠用得好来体现。何谓“用得好”?精练是不可或缺的要求。而所谓精练,就是抓住关键,直奔主题。不要弄成层层剥皮。一下子增加三、五个辅助列,辅助列还要靠其他辅助列来辅助,那表格还怎么看呀!

