我们在用Excel录入表格数据时,常常会遇到某列数据的值只在几个固定值中选择一个的情况,比如:人的性别列只可能录入男或女,对学历列只可能录入高中、大专、本科、研究生之一等。遇到这类数据,如果我们手工录入,效率既低又容易出错,最好的解决办法是提供一个下拉列表框供我们选择其中的值。下面就通过一个编排教师的课表为例教大家如何实现,该Excel表格能在填表时选择教师姓名,并能在另一列表中选择他所负责的课程名称。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一 创建数据源表
sheet2表中输入教师姓名以及所负责的课程,把教师姓名横放在第2行。选中B2:F2,即教师姓名。然后在名称框为它输入一个名字“name”(图1),输入完成后一定要按回车,转到sheet1工作表。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

二 数据关联
为了在sheet1表引用name名称,在教师姓名列下拉框选(B3:B9)单元格,点击菜单栏中的数据有效性,在弹出的数据有效性对话框中选择设置选项卡,在允许选择框中选择序列,在来源输入框中输入“=name”(图2),点击确定后,在下拉列表中就可选择各个教师了。

提示:现在就可体会出名称框的妙用,因为来源的拾取按钮是不能跨表去拾取其他表的数据的。
第二步就是实现能够自动选择教师所负责的课程,由于教师姓名是变动的,要求负责的课程名称也要随之变动。负责课程这一列中的有效性数据来自于教师姓名这一列,怎么解决这个问题?同样,我们可用名称框来解决。
回到sheet2表,用不着给表中的每个教师的课程单独取名,很麻烦也很耽误时间。把整个区域选中(B2:F6),用每一列的第一行数据取名,点击插入名称指定,在指定名称对话框中只选中首行(图3),点击确定后就可在sheet1表中使用了。

转到sheet1表,把负责课程列下的区域选中(C3:C9),点击数据有效性序列。接着就要注意来源输入框中的内容了,因为不能等于单元格,在这里希望引用教师姓名所对应的名称里的数据来做下拉列表,这里要用到函数indirect,它表示从某一单元格中取数据,然后把此数据转换成一个区域。在来源输入框中输入indirect,点击B3单元格,出现“=indirect($B$3)”,这里是绝对引用,按F4键改成相对引用“=indirect(B3)”,确定后会有一个警告提示框,源目前包含错误,是否继续(图4)?点击继续就行了。

提示:有人会因为出现错误提示就不敢继续了。为什么会出现错误提示?这是因为B3单元格中没有填姓名,所以会出现错误提示
现在,点击sheet1表中的B3C9区域任一个单元格都会出现下拉列表框供你选择欲输入的值,如果今后教师有变化或他负责的课程有变化,只要在sheet2表中稍做修改即可,轻松省事!