Excel函数
excel公式技巧:根据频率和大小返回唯一值列表
有一个包含数字和空的单元格区域,如下图1所示示例的单元格区域A1:F6,要求生成这些数字的唯一值,并按数字出现的频率顺序排列,出现频率高的排在前面,如果几个数字出现的频率相同,则数字小的排在前面,如图1中列I所示。图1先不看答案,自已动手试一试。公式在单元格I1中的数组公式为:=IF(ROWS($1:1)>$H$1,””,MIN(IF(IF(Range1<>””,COUNTIF(Range1,Range1)+1/(Range1*10^6))=LARGE(IF(INDEX(FREQUENCY(0+(Range1&0),0+(Range1&0)),N(IF(1,COLUMNS(Range1)*Arry2-TRANSPOSE(COLUMNS(Range1)-Arry1)))),IF(Range1<>””,COUNTIF(Range1,Range1)+1/(Range1*10^6))),ROWS($1:1)),Range1)))向下拖拉至出现空单元格为止。单元格H1中为返回的数字数量,公式为:=SUMPRODUCT((Range1<>””)/COUNTIF(Range1,Range1&””))
excel技巧:强制返回数组的公式技术
有时候,我们希望将公式应用于一组值而不是一个值,这可以简单地将公式作为数组公式(按Ctrl+Shift+Enter键)来实现。然而,并不是所有公式都能如此轻松地产生这样的效果,有些公式很“顽强”地抵制任何试图强制让它们返回数组的尝试。本文将探讨一些技术,除了数组形式的输入外,可以帮助强制达到想要的结果。例如,下图1中单元格区域A1:A5是要使用的数据,右侧的数组公式并没有给出想要的结果。(特别说明:示例纯粹是为了演示我们要解的技术。)图1第一个公式使用了INDIRECT函数和ADDRESS函数组合来求单元格区域A1:A5中的数值之和。显然,诸如下面的非数组公式:=INDIRECT(ADDRESS(1,1))解析成:=INDIRECT(“$A$1”)结果为:9.2
excel技巧:获取最大年增长率对应的值
根据工作表中提供的2010年至2013年一些国家的人口数据,在单元格A1中使用一个公式来确定该期间人口平均年增长率最大的区域。图1公式要求:1. 不仅结果正确,而且要使用最少的字符。2. 必须同时包括行列引用,而不能只是行引用或列引用(例如3:2或A:F)。3. 不允许使用名称。先不看答案,自已动手试一试。公式在单元格A1中的数组公式为:
excel技巧:在主工作表中汇总多个工作表中满足条件的值
我们可能熟悉使用INDEX、SMALL等在给定单列或单行数组的情况下,返回满足一个或多个条件的值的列表。这是一项标准的公式技术。在《Excel公式练习32:将包含空单元格的多行多列单元格区域转换成单独的列并去掉空单元格》中,我们述了一种方法,给定由多个列组成的单元格区域,从该区域返回由所有非空单元格组成的单个列。可以很容易地验证,在该公式中的单个条件可以扩展到多个条件,因此,我们现在有了从一维数组和二维数组中生成单列列表的方法。那么,可以更进一步吗?“三维”是经常应用于Excel中特定公式的通用术语,这些公式不仅可以对单列或单行进行操作,也可以对由多列或多行组成的单元格区域进行操作,还可以有效地对多个工作表进行操作。本文提供了一种方法,在给定一个或多个相同布局的工作表的情况下,可以创建另一个“主”工作表,该工作表仅由满足特定条件的所有工作表中的数据组成。并且,这里不使用VBA,仅使用公式。假设我们想从下面三个工作表中整理数据:工作表Sheet1:图1工作表Sheet2:
excel公式如何判断素数
在列A中给定一个整数值,例如单元格A2,并且2 <= A2 <= 100,要在列B中(例如单元格B2)使用公式进行判断:如果列A中的值是素数,则返回“素数”,如下图1所示。图1素数也称质数,是指在大于1的自然数中,除了1和它本身外不再有其他因数的自然数。先不看答案,自已动手试一试。公式公式1:=IF(SUM(–ISERR(FIND(“.”,A2/ROW(INDIRECT(“A1:A”&A2)))))=2,”素数”,””)其原理为,将值除以1至其本身的各个数,然后查找结果中的小数。如果是素数的话,那么结果中只有两个不是小数。例如,如果A2中的值为11,则公式1可转换为:
excel公式技巧提取指定长度的连续数字子串
本文给出了一种从可能包含若干个不同长度的数字的字符串中提取指定长度的数字的解决方案。在实际的工作表中,存在着许多此类需求,例如从字符串中获取6位数字账号。下面是一个示例:20/04/15 – VAT Reg: 1234567: Please send123456 against Order #98765, Customer Code A123XY, £125.00从该字符串中提取出现的一个6位数字(123456)。在字符串中正确定位一个6位数字,需要考虑在与任意6个连续数字的字符串相邻的之前和之后的字符,并验证这两个字符都不是数字。在这里,将介绍两种解决方案,第一种是静态的,要提取的数字长度是固定的;第二种是动态的,允许长度变化。假设字符串在单元格A1中,则公式为:=0+MID(“ζ”&A1&”ζ”,1+MATCH(26,MMULT(N(ISERR(0+MID(MID(“ζ”&A1&”ζ”,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1)-5)),8),{1,2,3,4,5,6,7,8},1))),{13;1;1;1;1;1;1;13}),0),6)先看看公式中的:ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1)-5))
excel公式技巧判断素数方法
在列A中给定一个整数值,例如单元格A2,并且2 <= A2 <= 100,要在列B中(例如单元格B2)使用公式进行判断:如果列A中的值是素数,则返回“素数”;否则,返回该数的素数乘法分解式(其中小写的“x”表示乘法),如下图1所示。图1素数也称质数,是指在大于1的自然数中,除了1和它本身外不再有其他因数的自然数。先不看答案,自已动手试一试。公式公式1:=IF(–(SUMPRODUCT(–(FLOOR(A2,ROW(INDIRECT(“$1:”&INT(SQRT(A2)))))=A2))=1),”素数”,SUBSTITUTE(TRIM(Arry1&””&Arry2&” “&Arry3&””&Arry4&” “&Arry5&””&Arry6),” “,”x”))其中定义了5个名称,分别为:名称:Arry1
excel公式技巧同时定位字符串中的数字
在很多情况下,我们都面临着需要确定字符串中第一个和最后一个数字的位置的问题,这可能是为了提取包围在这两个边界内的子字符串。然而,通常的公式都是针对所需提取的子字符串完全由数字组成,如果要提取的数字中有分隔符(例如电话号码)则无法使用。当然,可以先执行替换操作来去掉字符串中的分隔符,这可能会更复杂些。本文仅涉及被提取的字符串内包含唯一的数字子字符串的情况。我们以示例来解。先看一下要提取的数字中没有分隔符的情形,例如在单元格A1中的字符串如下:Account No. 1234567890: requires attention显然,我们要提取出1234567890。下面是我们曾经使用的一个公式:=-LOOKUP(1,-(MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1/17)),ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))))&”**0″))注意,必须在MID函数生成的值的末尾添加“**0”,以保证能够在任何情况下都得到正确的结果。例如,如果单元格A1中的字符串是:Account No. 12-Jun: requires attention使用没有添加“**0”的公式:
Excel公式技巧中的降维技术
看过前面一系列文章的朋友,一定会熟悉“重新定义数组维度”的概念。这是一项非常有用且非常重要的技术,使我们可以接受二维数组并将其转换为一维数组,同时将元素保留在该数组中。如果希望进一步操纵某二维数组的元素,则需要使用这种技术。例如,由于某种原因,在某种情形下,需要将二维数组中的每个元素传递给一个或多个参数进行进一步处理。但是,由于需要使用的Excel函数不能处理多维数组,因此必须首先将原数组转换为一维数组。以示例来说明,如下图1所示的工作表。图1可以构造各种公式,如:=MID(A1,1,1)结果显然是“A”。下面的公式:=MID(A1,{1,2},1)
UMIFS/COUNTIFS函数内的间接列引用变化
使用Excel朋友都知道,将包含相对列引用的公式复制到其他列时,这些引用也会相应地更新。例如,公式:=SUMIFS(C:C,$A:$A,”X”,$B:$B,”X”)向右拖放时,将会变成:=SUMIFS(D:D,$A:$A,”X”,$B:$B,”X”)=SUMIFS(E:E,$A:$A,”X”,$B:$B,”X”)等等。因此,我们有一个相对简单的方法,可以从连续的列中获得条件和。但是,如果我们希望增加的单元格区域是间接引用的,那该怎么办?例如,如果我们使用上述公式版本,但所引用的工作表是动态的:=SUMIFS(INDIRECT(“‘”&$A$1&”‘!C:C”),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)其中,A1包含要引用的工作表名称(例如“Sheet1”)。