上一篇:如何制作漂亮的Excel表格 - 下一篇:本站feed更换地址
版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2007/08/30/useful-excel-functions/以及本声明。
这一篇是扫盲用的,主要讲解了几个最常用的函数IF、AND、OR、COUNT、COUNTA、COUNTIF和SUM, 会用的同学就可以跳过了。以后会逐渐讲解其他函数的应用。
1. 逻辑判断
逻辑判断所用的函数不多,IF、AND、OR三个就足以应付日常工作了。
IF函数可以用来转换值,如将1和0转换为OK和NG:
=IF(A1=1,"OK","NG")
与AND和OR组合使用可以判断多个条件,如判断是否是周末:
=IF(OR(WEEKDAY(A1)=0, WEEKDAY(A1)=6),"周末","工作日")
2. 统计数量的COUNT、COUNTA、COUNTIF
COUNT和COUNTA统计对象不同,COUNTA统计所有非空单元格的数量(包括出错的单元格), COUNT仅统计看起来像数字的单元格。
COUNTIF则可以添加搜索条件,这个特性可以用来做统计。如
=COUNTIF(F:F,"OK") 统计F列中OK的个数 =COUNTIF(F:F,"NG") 统计F列中NG的个数
3. 求和的SUM
这个函数简单得不能再简单了:
=SUM(A10:A254) 对A10~A254的范围求和
没了。别看Excel函数成百上千,常用的就这几个。充其量再加上其他几个信息函数, 如求日期的DATE、YEAR、MONTH、DAY、NOW、WEEKDAY,数值计算的FLOOR、INT、MOD、ROUND, 字符串操作的CHAR、LEFT、RIGHT、MID(具体使用方法参见帮助), 几乎可以应付全部的日常应用。
下面举几个例子来说明这些函数的应用。
1. 测试用例。一般测试用例的表格会是这样:
| A | B | C | D | E | F | |
| 1 | 编号 | 类别 | 测试内容 | 确认内容 | 结果 | 测试时间 |
| 2 | 1 | 界面 | 单击新建按钮 | 建立新文档 | OK | 8/27 |
| 3 | 2 | 界面 | 单击保存按钮 | 保存文档 | OK | 8/27 |
| 3 | 2 | 界面 | 单击另存为钮 | 打开保存对话框 | NG | 8/27 |
那么统计OK和NG的个数就分别用
=COUNTIF(E:E,"OK") 统计OK个数 =COUNTIF(E:E,"NG") 统计NG个数
如果测试用例分成好几个工作表,那么可以在最前面加一个统计用的工作表,并用SUM求出所有用例的状况。
2. 日历。这个日历是用在项目进度管理上的,格式类似于下面这种横向的日历。
| 8月 | ||||||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 三 | 四 | 五 | 六 | 日 | 一 | 二 | 三 | 四 | 五 | 六 |
可按以下格式输入:
| A | B | C | D | E | F | G | |
| 1 | 8/1 | =A1+1 | =B1+1 | ... | ... | ... | ... |
| 2 | =MONTH(A1) | =IF(MONTH(B1)=MONTH(A1), "",MONTH(B1) | ... | ... | ... | ... | ... |
| 3 | =DAY(A1) | =DAY(B1) | ... | ... | ... | ... | ... |
| 4 | =MID("日一二三四五六",WEEKDAY(A1),1) | ... | ... | ... | ... | ... | ... |
然后隐藏掉第一行即可。
2008-2-14更新 回答读者妮妮的问题,讲解一下VLOOKUP函数的用法。
VLOOKUP用于查找信息,更确切地说,它用来“翻译”信息。比如员工名单上有员工号和姓名的对应关系, 那么给出一个员工号的列表,就可以通过VLOOKUP将其“翻译”成姓名列表。先来看个例子:
| A | B | C | D | |
| 1 | 排行 | 姓名 | 排行 | 姓名 |
| 2 | 1 | 柯镇恶 | 3 | =VLOOKUP(C2,$A$2:$B$8,2) |
| 3 | 2 | 朱聪 | 3 | =VLOOKUP(C3,$A$2:$B$8,2) |
| 4 | 3 | 韩宝驹 | 4 | =VLOOKUP(C4,$A$2:$B$8,2) |
| 5 | 4 | 南希仁 | 7 | =VLOOKUP(C5,$A$2:$B$8,2) |
| 6 | 5 | 张阿生 | ||
| 7 | 6 | 全金发 | ||
| 8 | 7 | 韩小莹 |
这个表的$A$2:$B$8区域为参考数据(原始对应关系),C列为需要翻译的原始数据,D列为翻译结果。 具体的结果大家可以实际放到Excel里面执行一下。
VLOOKUP有三个参数,分别如下:
VLOOKUP(原始数据, 参考数据, 搜索结果在参考数据中的列位置)
Excel会在参考数据的第一列中搜索原始数据(上例中,在$A$2:$B$8的第一列即$A$2:$A$8中搜索原始数据C2), 找到后,返回第三个参数——列位置所对应的数据(上例中,在$A$2:$A$8中找到与C2相等的3之后, 返回3所对应的第2列——韩宝驹,这个“第2列”即为第三个参数)。
那么找不到时怎么办?其实VLOOKUP还有第四个参数,值为TRUE或FALSE,默认为TRUE。 取值TRUE时,VLOOKUP会返回不大于原始数据的最小值所对应的结果,例如=VLOOKUP(2.5,$A$2:$B$8,2,TRUE)会返回“朱聪” (朱聪的“2”为不大于2.5的最大值)。 取值为FALSE时,VLOOKUP会返回#N/A。
通常在处理字符串时,大多情况下希望在找不到时返回错误或空串。 这时可以为VLOOKUP加上第四个参数FALSE,再用ISNA函数将#N/A转换为空串。如:
[D2]=VLOOKUP(C2,$A$2:$B$8,2,FALSE) [D3]=IF(ISNA(D2),"",D2)
2007-11-19 19:26
谢谢,不过再要写详细点的话就真的成了扫盲了……我所期待的就是提供一块砖,告诉大家可以怎么做,至于具体的做法可以去google或者excel的帮助上去寻找玉嘛。
2008-01-10 15:23
在网上搜索Excel信息搜到这个BLOG,信息量很大,谢谢博主!
2008-01-11 00:58
@smile 谢谢!我会继续努力的
2008-01-25 21:15
这么少\~~
2008-02-13 16:29
应该是=MID(”一二三四五六日”,WEEKDAY(A1),1)
2008-02-13 18:56
@li 谢谢您的指点。不过在我这里
=MID(”日一二三四五六”,WEEKDAY(A1),1)
工作正常,不知道是不是Excel版本的问题?
我的版本是Excel 2003,帮助是这么说的:
WEEKDAY(日期,种类)
其中种类的值可以取1,2,3
1: 日~六 = 1-7
2: 一~日 = 1-7
3: 一~日 = 0-6
按照您的说法,应该是
=MID(”一二三四五六日”,WEEKDAY(A1,2),1)
2008-02-14 14:17
楼主是正确的 我的是2003版的 如果用“一二三四五六日”来做结果会延续一天
2008-02-14 14:20
有个问题,不知道大家有没有用过VLOOKUP 这个函数,我想知道如何才能查询的不是数字而是文字,试验过,失败。
2008-02-14 15:40
@妮妮 原文中添加了VLOOKUP的用法说明,能说明白吗?
2008-02-14 17:00
晓得你的意思,可是有个前提条件是输入的第一个要求是数字,即比方说上例中的c列必须是数字,如果c列中的为B列中的文字,需要对应的寻找A列中的数字代码,这种情况怎么处理呢?
2008-02-14 17:09
其实我用了个函数是=IF(ISERROR(VLOOKUP(C2,$A$2:$B$8,2,FALSE)),”",VLOOKUP(C2,$A$2:$B$8,2,FALSE))这样就能保证没有错误值返回了,但是遇到要使用文字找数字代码时就会出错,看过介绍说其中的C2必须用数据形式的。所以现在求助专家来了
2008-02-14 17:48
@妮妮 原来如此。C列不一定是数字,字符串什么的都可以,但是C列必须在A列中查找——就是说,只能在参考数据的第一列查找。像你说的,在A:B范围内根据B列找A列,好像比较困难。
一个变通的方法是,通过公式将搜索列放到前面去,就可以了。
2008-02-15 14:26
聪明!可以了!
2008-04-13 12:15
看了,觉得不错,好好的加油呀
2008-04-13 12:16
看了,觉得不错,好好的加油!
2008-04-13 12:21
问一下,数据透视表和分类汇总有什么关系?
2008-04-16 00:09
我想看一下是否有一个完整的,关于Excel函数的表,包括常用函数,统计,信息等,一个完整的函数表(包括所有函数的解释,格式),可以帮得上我吗?
2008-04-16 08:34
Excel自带的帮助中有极为详细的函数列表。可以随便搜索某个函数,就能找到了。
2008-04-17 15:07
不错,谢谢
2008-04-22 17:25
怎么保护好工作薄
2008-04-22 20:28
@jame 菜单“工具->保护->保护工作簿”,确定就可以了。如果不想让人解锁,就加个密码先。
2008-04-23 20:32
请问楼主一个问题,如果EXCEL中有一列数据如下:
中国.江西.革命
用函数或其它方法将此列数据分成三列,其每列数据分别为:
中国 江西 革命
应该怎么做?
2008-04-23 21:14
上面的问题已找到办法,请问另外一个关于VLOOKUP的问题,这样的一个公式中:=VLOOKUP(M1318,ss,2,FALSE)
括号中的“ss”,“2”,“FALSE”分别代表什么意思呢?
2008-04-24 11:52
我要在另一張表格中求得與之相同的數據,是要用循環參照嗎?循環參照具體步聚是怎樣的呢?謝謝
2008-04-24 17:30
請問:如果要同時滿足兩個條件的情況下(因為其中有個條件可能相同)才能得到那個預定的值,那這個函數適應嗎?應該怎麼操作呢?
2008-04-25 00:33
@匿名 =VLOOKUP(M1318,ss,2,FALSE),请参考文章中的相应内容。ss是个定义的名称,可以在菜单“插入->名称->定义”中找到它表示什么范围。
所以该函数的意义就是,在ss所定义的范围的第一列中查找M1318格的内容,找到后返回ss中对应行的第二列,找不到则返回#N/A。
2008-04-25 00:34
@cj1121 不好意思,这两个问题我都没看明白。能再详细地解释一下吗?
2008-04-25 14:45
(圖一) (圖二)
條件一 條件二 結果 條件一 條件二 結果
215039 EL7070 A 215199 EG0591 ?
215039 EL7072-108 B 215199 EJ3411 ?
215047 EL2111 C 215039 EL7072-108 ?
215160 EX13540 D 215017 EPOP349 ?
215160 EX13541 E 215160 EX13540 ?
215195 EL2248 F 215039 EL7070 ?
215199 EG0591 G 215039 EX13540 ?
215199 EG0592-99 H 215195 0 ?
我的意思是:依照(圖一)求出(圖二)的結果,圖一中(條件一)、(條件二)和圖二中(條件一)、(條件二)的值有相同的也有不同的,我要的是(圖二)必須同時滿足(圖一)中兩個條件,才能從(圖一)的結果中得到(圖二)的結果。這是我第二個問題的意思,第一個問題是:如果(圖一)和(圖二)分別在EXCEL的兩張工作表裡,而不是在一個工作表裡,(圖二)通過二個條件要得到(圖一)中的結果,應該需要用到循環追蹤,這個我還沒用過。是否我要的結果用VLOOKUP這個公式求不出來呢?或是有什麼更好的建議,請指教。
2008-04-25 14:53
請看此份:舉例說明:
(圖一)
條件一 條件二 結果
215039 EL7070 A
215039 EL7072-108 B
215047 EL2111 C
215160 EX13540 D
215160 EX13541 E
215195 EL2248 F
215199 EG0591 G
215199 EG0592-99 H
(圖二)
條件一 條件二 結果
215199 EG0591 ?
215199 EJ3411 ?
215039 EL7072-108 ?
215017 EPOP349 ?
215160 EX13540 ?
215039 EL7070 ?
215039 EX13540 ?
215195 0 ?
我的意思是:依照(圖一)求出(圖二)的結果,圖一中(條件一)、(條件二)和圖二中(條件一)、(條件二)的值有相同的也有不同的,我要的是(圖二)必須同時滿足(圖一)中兩個條件,才能從(圖一)的結果中得到(圖二)的結果。這是我第二個問題的意思,第一個問題是:如果(圖一)和(圖二)分別在EXCEL的兩張工作表裡,而不是在一個工作表裡,(圖二)通過二個條件要得到(圖一)中的結果,應該需要用到循環追蹤,這個我還沒用過。是否我要的結果用VLOOKUP這個公式求不出來呢?或是有什麼更好的建議,請指教。
2008-04-25 15:03
不好意思,可能是我格式沒弄好,看不太清楚。(圖一)中的結果分別是:A、B、C、D、E、F、G、H。(圖二)中結果是:?,你可以將兩份數據復制到EXCEL表格中試試,或是自己設條件也可以。
2008-04-28 20:26
@cj1121 不好意思,研究了几天也没研究出来应该怎样做……
2008-04-29 11:33
這樣呀,真是個頭痛的問題。呵呵,不過,沒關係,你也盡力了,還是謝謝你嘍。
2008-04-29 19:07
@cj1121 实在不行的话试试自定义函数。针对你上面提到的这个需求可以做个DSEL函数
Public Function DSEL(area As Range, cell1 As Range, cell2 As Range)
value1 = cell1.Value
Value2 = cell2.Value
For I = 1 To area.Rows.Count
Dim row As Range
Set row = area.Rows(I)
field1 = row.Columns(1).Value
field2 = row.Columns(2).Value
If value1 = field1 And Value2 = field2 Then
DSEL = row.Columns(3)
Exit Function
End If
Next
DSEL = 0
End Function
在Excel中写 =DSEL(图1的范围, 图2第一列的格, 图2第二列的格)
2008-04-30 10:04
意思大概是這樣吧。只是這個函數我不會用,基本功不扎實吧。你做出來了麼?
2008-04-30 10:15
选择菜单“工具->宏->Visual Basic编辑器”,然后在左侧的项目窗口中右键菜单,添加一个模块,然后在模块中输入上面的代码。
保存之后,就可以在你的Excel表格中写有?的地方输入 =DSEL 的公式。
这个方法虽然能解决问题,但毕竟使用了宏,会给其他使用者带来不便的(使用宏的Excel表格在打开时会有安全警告),要是有其他更好的方法就尽量别用这个
2008-04-30 11:34
你那個上面的代碼,我需要改動嗎?我還是求不出結果。出現了個對話框:發現不確定的名稱:DSEL
2008-05-01 09:28
@cj1121 你在留言时留个电子邮箱吧(写在电子邮件栏中),我做个excel给你发过去
2008-05-03 10:44
可以了,非常感謝!你很厲害哦。呵呵
2008-05-03 11:14
@cj1121 哪里哪里……没办法的办法 :)
2008-05-03 16:20
只要能夠解決問題就不錯啦。你做什麼工作的啊,很熱心哦!
2008-06-13 11:52
怎么样把所以函数同时乘以一个数
所得的函数代替原来的函数
2008-06-17 13:01
@一个求学者 您说的应该是怎样将所有内容同时乘以一个数吧?可以这样做,假设要将一部分单元格的内容全部乘3:
1. 找个空白格,输入3
2. 选中输入3的格,复制
3. 选中将要被乘以3的所有单元格
4. 编辑->选择性粘贴,选择其中的“乘法”
5. 确定
2008-06-25 18:05
您好!
请问我如何将EXCEL中的一个表格的数据引用到另一个表格中:
表一:姓名 卡号 部门
小陈 123 A
张明 789 B
李念 100 C
表二:姓名 部门 金额
小陈 A 500
张明 B 1000
李念 C 800
表一的资料是原始资料,表二是现有的资料,请问我如何才能正确有效将表二的资料引用到表一中?(附:其实主要是将金额的数据引用到表一中去,但关健是姓名和卡号一定得对上),辛苦了谢谢!
2008-06-26 14:46
@may 您好,请参考本文末尾及评论中关于VLOOKUP函数的相关讨论。
2008-08-12 15:40
请问$A$4与A4有什么区别????
2008-08-12 20:50
A4是相对引用,$A$4是绝对引用。
假设你把 =A4 的公式复制到它所在格的右下角的格,
公式就会自动变成 =B5;
而复制 =$A$4 时则不会变化。
2008-08-25 10:48
我是初学者好多都搞不明白 说的再详细点
2008-09-04 15:37
你真的太棒了,向你学习!受益非浅啊!
2008-09-25 11:17
您好:我对您的能力和这份精神很敬佩,另外问一下在运用数据有效性时,来源如果是另一张表里的一列数,该怎么操作?例如b表里某一单元格数据有效性来源要用a表里A1:A10(名称定义为“客源”)这一列数,该怎么做?谢谢charlee
2008-10-04 17:58
@zhaolijun 不知道我是否理解了你的意思,试试看这样行不行?
1. 选择要设置有效性的单元格,选择菜单“数据->有效性”;
2. 在“允许”中选择“序列”,然后单击“来源”右侧的按钮,选择a表中的A1:A10
3. 确定
2008-10-25 11:09
呵呵谢谢你给我回复,可能按照你的方法在同一张表里可以实现,如果我在b表里某一单元格设置数据有效性,其序列来源是a表里的A1:A10时,这样做好像实现不了,我试过了。
你看这么做行么?
1、首先将a表里A1:A10单元格选中定义一个名称为”序列源”。2、在b表里选中要设置有效性的单元格,选择菜单“数据->有效性”;
3、在“允许”中选择“序列”,然后在“来源”右侧的输入框中输入”=序列源”,然后确定就可以了。试试看
2008-10-25 12:47
@zhaolijun 啊,真的。设置的时候居然说公式不对,无语……不好意思我想当然了。按照你的说法,定义一个名字就可以用了,应该没问题吧。
2008-11-06 11:52
怎么取身份证后八位的函数,MID对于15为与18混在一起的身份证效果不好.不知道有没有别的函数?
2008-11-06 13:30
@jionwu 如果只需要取后8位数,用RIGHT
2008-11-08 10:16
有谁可以帮忙告诉,在excel里如何用if函数控制当前单元格的 字体颜色
2008-11-08 20:34
@jondrge 格式不是用if函数设置的,如果你是Excel 2003,请从“格式->条件格式”功能中设置。

2007-11-19 18:27
还是可以啦….只是还希望你把这些函数再写详细点…