2007-08
30

这一篇是扫盲用的,主要讲解了几个最常用的函数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. 测试用例。一般测试用例的表格会是这样:

ABCDEF
1编号类别测试内容确认内容结果测试时间
21界面单击新建按钮建立新文档OK8/27
32界面单击保存按钮保存文档OK8/27
32界面单击另存为钮打开保存对话框NG8/27

那么统计OK和NG的个数就分别用

=COUNTIF(E:E,"OK")     统计OK个数
=COUNTIF(E:E,"NG")     统计NG个数

如果测试用例分成好几个工作表,那么可以在最前面加一个统计用的工作表,并用SUM求出所有用例的状况。

2. 日历。这个日历是用在项目进度管理上的,格式类似于下面这种横向的日历。

8月
1234567891011

可按以下格式输入:

ABCDEFG
18/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将其“翻译”成姓名列表。先来看个例子:

ABCD
1排行姓名排行姓名
21柯镇恶3=VLOOKUP(C2,$A$2:$B$8,2)
32朱聪3=VLOOKUP(C3,$A$2:$B$8,2)
43韩宝驹4=VLOOKUP(C4,$A$2:$B$8,2)
54南希仁7=VLOOKUP(C5,$A$2:$B$8,2)
65张阿生
76全金发
87韩小莹

这个表的$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)



这篇文章有 41 条评论了,快来一起讨论讨论吧!
#1
匿名
2007-11-19 18:27

还是可以啦….只是还希望你把这些函数再写详细点…

#2
charlee
2007-11-19 19:26

谢谢,不过再要写详细点的话就真的成了扫盲了……我所期待的就是提供一块砖,告诉大家可以怎么做,至于具体的做法可以去google或者excel的帮助上去寻找玉嘛。

#3
smile
2008-01-10 15:23

在网上搜索Excel信息搜到这个BLOG,信息量很大,谢谢博主!

#4
charlee
2008-01-11 00:58

@smile 谢谢!我会继续努力的

#5
车昭毅
2008-01-25 21:15

这么少\~~

#6
li
2008-02-13 16:29

应该是=MID(”一二三四五六日”,WEEKDAY(A1),1)

#7
charlee
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)

#8
匿名
2008-02-14 14:17

楼主是正确的 我的是2003版的 如果用“一二三四五六日”来做结果会延续一天

#9
妮妮
2008-02-14 14:20

有个问题,不知道大家有没有用过VLOOKUP 这个函数,我想知道如何才能查询的不是数字而是文字,试验过,失败。

#10
charlee
2008-02-14 15:40

@妮妮 原文中添加了VLOOKUP的用法说明,能说明白吗?

#11
妮妮
2008-02-14 17:00

晓得你的意思,可是有个前提条件是输入的第一个要求是数字,即比方说上例中的c列必须是数字,如果c列中的为B列中的文字,需要对应的寻找A列中的数字代码,这种情况怎么处理呢?

#12
妮妮
2008-02-14 17:09

其实我用了个函数是=IF(ISERROR(VLOOKUP(C2,$A$2:$B$8,2,FALSE)),”",VLOOKUP(C2,$A$2:$B$8,2,FALSE))这样就能保证没有错误值返回了,但是遇到要使用文字找数字代码时就会出错,看过介绍说其中的C2必须用数据形式的。所以现在求助专家来了

#13
charlee
2008-02-14 17:48

@妮妮 原来如此。C列不一定是数字,字符串什么的都可以,但是C列必须在A列中查找——就是说,只能在参考数据的第一列查找。像你说的,在A:B范围内根据B列找A列,好像比较困难。

一个变通的方法是,通过公式将搜索列放到前面去,就可以了。

#14
妮妮
2008-02-15 14:26

聪明!可以了!

#15
面带微笑,心随飞扬
2008-04-13 12:15

看了,觉得不错,好好的加油呀

#16
面带微笑,心随飞扬
2008-04-13 12:16

看了,觉得不错,好好的加油!

#17
面带微笑,心随飞扬
2008-04-13 12:21

问一下,数据透视表和分类汇总有什么关系?

#18
樱粟花开
2008-04-16 00:09

我想看一下是否有一个完整的,关于Excel函数的表,包括常用函数,统计,信息等,一个完整的函数表(包括所有函数的解释,格式),可以帮得上我吗?

#19
charlee
2008-04-16 08:34

Excel自带的帮助中有极为详细的函数列表。可以随便搜索某个函数,就能找到了。

#20
匿名
2008-04-17 15:07

不错,谢谢

#21
jame
2008-04-22 17:25

怎么保护好工作薄

#22
charlee
2008-04-22 20:28

@jame 菜单“工具->保护->保护工作簿”,确定就可以了。如果不想让人解锁,就加个密码先。

#23
匿名
2008-04-23 20:32

请问楼主一个问题,如果EXCEL中有一列数据如下:
中国.江西.革命
用函数或其它方法将此列数据分成三列,其每列数据分别为:
中国 江西 革命
应该怎么做?

#24
匿名
2008-04-23 21:14

上面的问题已找到办法,请问另外一个关于VLOOKUP的问题,这样的一个公式中:=VLOOKUP(M1318,ss,2,FALSE)
括号中的“ss”,“2”,“FALSE”分别代表什么意思呢?

#25
cj1121
2008-04-24 11:52

我要在另一張表格中求得與之相同的數據,是要用循環參照嗎?循環參照具體步聚是怎樣的呢?謝謝

#26
cj1121
2008-04-24 17:30

請問:如果要同時滿足兩個條件的情況下(因為其中有個條件可能相同)才能得到那個預定的值,那這個函數適應嗎?應該怎麼操作呢?

#27
charlee
2008-04-25 00:33

@匿名 =VLOOKUP(M1318,ss,2,FALSE),请参考文章中的相应内容。ss是个定义的名称,可以在菜单“插入->名称->定义”中找到它表示什么范围。

所以该函数的意义就是,在ss所定义的范围的第一列中查找M1318格的内容,找到后返回ss中对应行的第二列,找不到则返回#N/A。

#28
charlee
2008-04-25 00:34

@cj1121 不好意思,这两个问题我都没看明白。能再详细地解释一下吗?

#29
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這個公式求不出來呢?或是有什麼更好的建議,請指教。

#30
cj1121
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這個公式求不出來呢?或是有什麼更好的建議,請指教。

#31
cj1121
2008-04-25 15:03

不好意思,可能是我格式沒弄好,看不太清楚。(圖一)中的結果分別是:A、B、C、D、E、F、G、H。(圖二)中結果是:?,你可以將兩份數據復制到EXCEL表格中試試,或是自己設條件也可以。

#32
charlee
2008-04-28 20:26

@cj1121 不好意思,研究了几天也没研究出来应该怎样做……

#33
cj1121
2008-04-29 11:33

這樣呀,真是個頭痛的問題。呵呵,不過,沒關係,你也盡力了,還是謝謝你嘍。

#34
charlee
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第二列的格)

#35
cj1121
2008-04-30 10:04

意思大概是這樣吧。只是這個函數我不會用,基本功不扎實吧。你做出來了麼?

#36
charlee
2008-04-30 10:15

选择菜单“工具->宏->Visual Basic编辑器”,然后在左侧的项目窗口中右键菜单,添加一个模块,然后在模块中输入上面的代码。

保存之后,就可以在你的Excel表格中写有?的地方输入 =DSEL 的公式。

这个方法虽然能解决问题,但毕竟使用了宏,会给其他使用者带来不便的(使用宏的Excel表格在打开时会有安全警告),要是有其他更好的方法就尽量别用这个

#37
cj1121
2008-04-30 11:34

你那個上面的代碼,我需要改動嗎?我還是求不出結果。出現了個對話框:發現不確定的名稱:DSEL

#38
charlee
2008-05-01 09:28

@cj1121 你在留言时留个电子邮箱吧(写在电子邮件栏中),我做个excel给你发过去

#39
cj1121
2008-05-03 10:44

可以了,非常感謝!你很厲害哦。呵呵

#40
charlee
2008-05-03 11:14

@cj1121 哪里哪里……没办法的办法 :)

#41
cj1121
2008-05-03 16:20

只要能夠解決問題就不錯啦。你做什麼工作的啊,很熱心哦!

添加评论