Thursday, June 18, 2009
Excel级联菜单(多个下拉选项)的实现
原文地址:http://www.sydjy.cn/bbs_list.asp?Id=1306
大家知道,在Excel中可以通过设置数据的有效性来实现类似于网页表单中的下拉菜单功能,这样可以大大地提高数据的录入速度和可靠性。但采用此方法要求下拉菜单中的选项不能过多,否则会影响录入的速度。如果这些选项内容之间可进行分类、分组,那我们就可以用多个下拉选项(即级联菜单)来解决此类问题。下面我们就从一个出发,给出在Excel中实现级联菜单的两种方法,希望能给使用Excel进行办公的朋友提供帮助。
一、自定义数据的有效性
这里有两个工作表,其中Sheet1用来采集客户资料,并将其名称改为“客户数据采集”,在Sheet2的A列中保存了所有的省份, B列中的数据为各省份所属的县市并将工作表名称改为“地区”(假设这里设置了三个省份,即江苏省、浙江省和安徽省)。
1. 定义单元格区域名称
选中“地区”表中江苏省所属县市的单元格区域B2∶B14,依次单击“插入”菜单中的“名称”,选择“定义”,弹出“定义名称”对话框,在“在当前工作簿中的名称”框中输入所定义的名称“江苏”,单击“确定”按钮。类似地,我们可以将浙江省和安徽省所属县市的单元格区域名称分别定义为“浙江”和“安徽 ”。
2. 设置数据的有效性
切换到“用户数据采集”表中,选择要选择输入省份的D列,单击“数据”菜单中的“有效性”命令,弹出设置“数据有效性”对话框,在有效性条件的“允许”列表中选择“序列”,在“来源”框中输入“江苏,浙江,安徽”(分隔符为英文状态下的逗号),单击“确定”按钮。接下来选中“所属县市”所在的E列,再次打开“数据有效性”对话框,在有效性条件的“允许”列表中选择“序列”,在“来源”框中输入公式 “=INDIRECT(D2)”,单击“确定”按钮
Cico提示:在关闭设置E列数据有效性对话框时,如系统弹出警告提示“源目前包含错误,是否继续?”,只需确认就可以了。如果指定的D2单元格中已经选择了一个省份再设置E列数据的有效性就不会出现此提示了。
3. 数据录入
录入客户资料时,首先选择客户所在的省份,然后再打开其右侧“所属县市”所在的单元格时,我们就可以从下拉菜单中找到我们所需的选项了。
二、用组合框工具实现
该方法是借助控件工具箱和VBA代码来实现的。
1.设计组合框
在工作表Sheet1中我们借助“控件工具箱”设计了录入界面,将工作表名称改为“客户数据采集”,在采集客户的所属地区时我们设计了两个组合框,第一个组合框ComboBox1用来存放省份,第二个组合ComboBox2用来存放对应于第一个组合框的下属的县市。Sheet2(“地区”表)仍保留和原来一样的内容。
2.编写组合框事件代码
双击“客户数据采集”表中的组合框ComboBox1,进入VBE编辑器,在代码窗口中输入其GotFocus事件代码:
Private Sub ComboBox1_GotFocus( )
'清除组合框中的数值
ComboBox1.Clear
ComboBox2.Clear
'读出"地区"表A列中的不同省份并将其添加到组合框1中
For i = 2 To Sheet2.[a1].End(xlDown).Row
target = Sheet2.Cells(i, 1)
'利用设置标志位要判断数据是否重复
flag = 0
For j = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(j) = target Then flag = 1
Next
If flag = 0 Then
ComboBox1.AddItem target
End If
Next
End Sub
返回Excel工作表中,双击组合框ComboBox2,在代码窗口中输入其GotFocus事件代码:
Private Sub ComboBox2_GotFocus( )
ComboBox2.Clear
'读出"地区"表B列中属于组合框1的县市并将其添加到组合框2中
For i = 2 To Sheet2.[a1].End(xlDown).Row
target = Sheet2.Cells(i, 1)
If target = ComboBox1.Value Then
ComboBox2.AddItem Sheet2.Cells(i, 2)
End If
Next
End Sub
3. 运行效果
返回“客户数据采集”表,单击控件工具箱中的“退出设计模式”按钮即可进入运行模式。在组合框ComboBox1中选择一个省份,此时再单击组合框ComboBox2的下拉按钮时,我们就可以方便地选择该省份所属的县市了。
Cico提示:除了在工作表中实现客户的数据采集外,我们还可以通过窗体来实现此操作的录入界面。如果我们需要更改组合框中的列表选项,只需在“地区”表(即Sheet2)中进行相应的更改就可以了。
两种方法的比较:相比之下,用本文提供的第一种方法比较简单,更适合于初学者和一般用户。而第二方法则更适合利用Excel进行二次开发的读者朋友,以便于设计人性化的数据录入界面。
另外,在本例中,“地区”表中的地区数据如果需要添加或删除,若用第一种方法实现,要求添加的同类数据必须要连续且需要重新定义单元格区域。如果用方法二实现,各省份和所属县市添加时可以连续也可以不连续,就这一点而言,比第一种方法要便捷多了。
相信大家在耐心地看完本文以后已经掌握了这两种在Excel中制作级联菜单的方法,只要进行简单的变通,就可以将本文所介绍的技巧应用到其他类似的场合,去解决我们日常办公中遇到的问题。
-----------------------------------------------------------
怎样在excel中利用有效性序列建立二级下拉菜单
悬赏分:10 - 解决时间:2006-5-5 13:13
比如 在A列中选择部门名称,B列中的选择菜单自动会变成该部门下所有员工
问题补充:问题一样。那答案呢?
madm 的二级下拉菜单的公式如何运用。。能否发文件上来
提问者: superaoyi - 试用期 一级 最佳答案
试试、看看,是否所需!
设置“数据”表
A列 B列
部门员工
A 张三 李四
B 王二 郑大
C 刘一 王五
D 初一 赵钱
……
命名:
选中A列,在“名称框”中输入“部门”,回车确认。
选中B列,在“名称框”中输入“员工”,回车确认。
在“菜单”表制作下拉菜单:
制作一级下拉菜单
选中A1:B1单元格区域;
执行“数据/有效性”命令,打开“数据有效性”对话框;
在“设置”选项卡下,“允许”选择“序列”、“来源”中输入“部门,员工”(不含引号,用英文逗号分隔);
选中“忽略空值”、“提供下拉箭头”,单击“确定”按钮,完成一级下拉菜单制作。
此时在A1、B1中,单击右侧的下拉按钮进行选择输入。
制作二级下拉菜单
从A2单元格起向下选中单元格区域;
执行“数据/有效性”命令,打开“数据有效性”对话框;
在“设置”中,“允许”选择“序列”、“来源”中输入公式“=INDIRECT(A$1)”;
选中“忽略空值”、“提供下拉箭头”,单击“确定”按钮,完成“部门”的二级菜单制作。
同法制作“员工”的二级菜单。此时“来源”中输入公式“=INDIRECT(B$1)”。
此时在部门、员工下面的单元格中,单击右侧的下拉按钮进行“部门”、“员工”的选择输入。
大家知道,在Excel中可以通过设置数据的有效性来实现类似于网页表单中的下拉菜单功能,这样可以大大地提高数据的录入速度和可靠性。但采用此方法要求下拉菜单中的选项不能过多,否则会影响录入的速度。如果这些选项内容之间可进行分类、分组,那我们就可以用多个下拉选项(即级联菜单)来解决此类问题。下面我们就从一个出发,给出在Excel中实现级联菜单的两种方法,希望能给使用Excel进行办公的朋友提供帮助。
一、自定义数据的有效性
这里有两个工作表,其中Sheet1用来采集客户资料,并将其名称改为“客户数据采集”,在Sheet2的A列中保存了所有的省份, B列中的数据为各省份所属的县市并将工作表名称改为“地区”(假设这里设置了三个省份,即江苏省、浙江省和安徽省)。
1. 定义单元格区域名称
选中“地区”表中江苏省所属县市的单元格区域B2∶B14,依次单击“插入”菜单中的“名称”,选择“定义”,弹出“定义名称”对话框,在“在当前工作簿中的名称”框中输入所定义的名称“江苏”,单击“确定”按钮。类似地,我们可以将浙江省和安徽省所属县市的单元格区域名称分别定义为“浙江”和“安徽 ”。
2. 设置数据的有效性
切换到“用户数据采集”表中,选择要选择输入省份的D列,单击“数据”菜单中的“有效性”命令,弹出设置“数据有效性”对话框,在有效性条件的“允许”列表中选择“序列”,在“来源”框中输入“江苏,浙江,安徽”(分隔符为英文状态下的逗号),单击“确定”按钮。接下来选中“所属县市”所在的E列,再次打开“数据有效性”对话框,在有效性条件的“允许”列表中选择“序列”,在“来源”框中输入公式 “=INDIRECT(D2)”,单击“确定”按钮
Cico提示:在关闭设置E列数据有效性对话框时,如系统弹出警告提示“源目前包含错误,是否继续?”,只需确认就可以了。如果指定的D2单元格中已经选择了一个省份再设置E列数据的有效性就不会出现此提示了。
3. 数据录入
录入客户资料时,首先选择客户所在的省份,然后再打开其右侧“所属县市”所在的单元格时,我们就可以从下拉菜单中找到我们所需的选项了。
二、用组合框工具实现
该方法是借助控件工具箱和VBA代码来实现的。
1.设计组合框
在工作表Sheet1中我们借助“控件工具箱”设计了录入界面,将工作表名称改为“客户数据采集”,在采集客户的所属地区时我们设计了两个组合框,第一个组合框ComboBox1用来存放省份,第二个组合ComboBox2用来存放对应于第一个组合框的下属的县市。Sheet2(“地区”表)仍保留和原来一样的内容。
2.编写组合框事件代码
双击“客户数据采集”表中的组合框ComboBox1,进入VBE编辑器,在代码窗口中输入其GotFocus事件代码:
Private Sub ComboBox1_GotFocus( )
'清除组合框中的数值
ComboBox1.Clear
ComboBox2.Clear
'读出"地区"表A列中的不同省份并将其添加到组合框1中
For i = 2 To Sheet2.[a1].End(xlDown).Row
target = Sheet2.Cells(i, 1)
'利用设置标志位要判断数据是否重复
flag = 0
For j = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(j) = target Then flag = 1
Next
If flag = 0 Then
ComboBox1.AddItem target
End If
Next
End Sub
返回Excel工作表中,双击组合框ComboBox2,在代码窗口中输入其GotFocus事件代码:
Private Sub ComboBox2_GotFocus( )
ComboBox2.Clear
'读出"地区"表B列中属于组合框1的县市并将其添加到组合框2中
For i = 2 To Sheet2.[a1].End(xlDown).Row
target = Sheet2.Cells(i, 1)
If target = ComboBox1.Value Then
ComboBox2.AddItem Sheet2.Cells(i, 2)
End If
Next
End Sub
3. 运行效果
返回“客户数据采集”表,单击控件工具箱中的“退出设计模式”按钮即可进入运行模式。在组合框ComboBox1中选择一个省份,此时再单击组合框ComboBox2的下拉按钮时,我们就可以方便地选择该省份所属的县市了。
Cico提示:除了在工作表中实现客户的数据采集外,我们还可以通过窗体来实现此操作的录入界面。如果我们需要更改组合框中的列表选项,只需在“地区”表(即Sheet2)中进行相应的更改就可以了。
两种方法的比较:相比之下,用本文提供的第一种方法比较简单,更适合于初学者和一般用户。而第二方法则更适合利用Excel进行二次开发的读者朋友,以便于设计人性化的数据录入界面。
另外,在本例中,“地区”表中的地区数据如果需要添加或删除,若用第一种方法实现,要求添加的同类数据必须要连续且需要重新定义单元格区域。如果用方法二实现,各省份和所属县市添加时可以连续也可以不连续,就这一点而言,比第一种方法要便捷多了。
相信大家在耐心地看完本文以后已经掌握了这两种在Excel中制作级联菜单的方法,只要进行简单的变通,就可以将本文所介绍的技巧应用到其他类似的场合,去解决我们日常办公中遇到的问题。
-----------------------------------------------------------
怎样在excel中利用有效性序列建立二级下拉菜单
悬赏分:10 - 解决时间:2006-5-5 13:13
比如 在A列中选择部门名称,B列中的选择菜单自动会变成该部门下所有员工
问题补充:问题一样。那答案呢?
madm 的二级下拉菜单的公式如何运用。。能否发文件上来
提问者: superaoyi - 试用期 一级 最佳答案
试试、看看,是否所需!
设置“数据”表
A列 B列
部门员工
A 张三 李四
B 王二 郑大
C 刘一 王五
D 初一 赵钱
……
命名:
选中A列,在“名称框”中输入“部门”,回车确认。
选中B列,在“名称框”中输入“员工”,回车确认。
在“菜单”表制作下拉菜单:
制作一级下拉菜单
选中A1:B1单元格区域;
执行“数据/有效性”命令,打开“数据有效性”对话框;
在“设置”选项卡下,“允许”选择“序列”、“来源”中输入“部门,员工”(不含引号,用英文逗号分隔);
选中“忽略空值”、“提供下拉箭头”,单击“确定”按钮,完成一级下拉菜单制作。
此时在A1、B1中,单击右侧的下拉按钮进行选择输入。
制作二级下拉菜单
从A2单元格起向下选中单元格区域;
执行“数据/有效性”命令,打开“数据有效性”对话框;
在“设置”中,“允许”选择“序列”、“来源”中输入公式“=INDIRECT(A$1)”;
选中“忽略空值”、“提供下拉箭头”,单击“确定”按钮,完成“部门”的二级菜单制作。
同法制作“员工”的二级菜单。此时“来源”中输入公式“=INDIRECT(B$1)”。
此时在部门、员工下面的单元格中,单击右侧的下拉按钮进行“部门”、“员工”的选择输入。
Wednesday, March 04, 2009
忘记Excel: 14个在线表格处理服务
作者: LiGht | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.weborn.org/14-online-spreadsheet-applications-367/
网址: http://www.weborn.org/14-online-spreadsheet-applications-367/

BadBlue.com - 提供免费帐户和收费帐户。

Blist.com - 外观很漂亮,嗯嗯!

EditGrid.com - 可以上传或新建表格文件,并与其他人共享,支持协作。

eXxprssoCorp.com - 支持协作,并提供一个一键上传按钮。

Google Docs - 相信也不需要多介绍了吧?实际上,LiGht在用的就是Google Docs。

InputWebWizard.com - 收费服务,$499 一个月……囧,是不是我看错了?

JotSpot - 支持从Excel导入/导出,以及复制/粘贴,支持文件共享。

Numbler.com - 支持协作。

NumSum.com - 更像是是社会性网络的在线表格制作服务,如果你选择将表格公开,别人甚至可以对其发表评论。

Peepel.com - 支持从 Excel 中导入,可以在一个浏览器窗口中编辑多个表格。提供一个feed,让你能够关注到协作文档的每一个变化。

Sheetster.com - 支持共享,并且可以在blog中嵌入表格。

Simple Spreadsheet - 一个开源计划。

ThinkFreeDocs.com - 只能上传、共享,不支持在线编辑。

Zoho Sheet - Zoho 办公套件的一部分,支持从 Excel导入/导出。
[Via Mashable]
Labels: Excel, Online Office
Friday, January 30, 2009
将Excel数据导入Access
2003-03-13 电脑报
陈秀峰
如果想将Excel中的数据转换到Access中,可以采取下面的直接导入法和建立链接法来完成。
一、直接导入法
1.启动Access,新建一数据库文件。
2.在“表”选项中,执行“文件→获取外部数据→导入”命令,打开“导入”对话框。
3.按“文件类型”右侧的下拉按钮,选中“Microsoft Excel(.xls)”选项,再定位到需要转换的工作簿文件所在的文件夹,选中相应的工作簿,按下“导入”按钮,进入“导入数据表向导”对话框(图1)。
4.选中需要导入的工作表(如“工程数据”),多次按“下一步”按钮作进一步的设置后,按“完成”按钮。
注意:如果没有特别要求,在上一步的操作中直接按“完成”按钮就行了。

5.此时系统会弹出一个导入完成的对话框(图1的中部),按“确定”按钮。
至此,数据就从Excel中导入到Access中。
二、建立链接法
1.启动Access,新建一数据库文件。
2.在“表”选项中,执行“文件→获取外部数据→链接表”命令,打开“链接”对话框。
3.以下操作基本与上述“直接导入法”相似,在此不再赘述,请大家自行操练。
注意:“直接导入法”和“建立链接法”均可以将Excel数据转换到Access中,两者除了在Access中显示的图标不同(图2)外,最大的不同是:前者转换过来的数据与数据源脱离了联系,而后者转换过来的数据会随数据源的变化而自动随时更新。

陈秀峰
如果想将Excel中的数据转换到Access中,可以采取下面的直接导入法和建立链接法来完成。
一、直接导入法
1.启动Access,新建一数据库文件。
2.在“表”选项中,执行“文件→获取外部数据→导入”命令,打开“导入”对话框。
3.按“文件类型”右侧的下拉按钮,选中“Microsoft Excel(.xls)”选项,再定位到需要转换的工作簿文件所在的文件夹,选中相应的工作簿,按下“导入”按钮,进入“导入数据表向导”对话框(图1)。
4.选中需要导入的工作表(如“工程数据”),多次按“下一步”按钮作进一步的设置后,按“完成”按钮。
注意:如果没有特别要求,在上一步的操作中直接按“完成”按钮就行了。

5.此时系统会弹出一个导入完成的对话框(图1的中部),按“确定”按钮。
至此,数据就从Excel中导入到Access中。
二、建立链接法
1.启动Access,新建一数据库文件。
2.在“表”选项中,执行“文件→获取外部数据→链接表”命令,打开“链接”对话框。
3.以下操作基本与上述“直接导入法”相似,在此不再赘述,请大家自行操练。
注意:“直接导入法”和“建立链接法”均可以将Excel数据转换到Access中,两者除了在Access中显示的图标不同(图2)外,最大的不同是:前者转换过来的数据与数据源脱离了联系,而后者转换过来的数据会随数据源的变化而自动随时更新。
