设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4488|回复: 10
打印 上一主题 下一主题

Access挑战Excel第四期:数据有效性

[复制链接]
跳转到指定楼层
1#
发表于 2016-3-23 14:34:33 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
截至发帖前,挑战赛第三期还没有收到任何提交答案,第四波又来袭了:这次就挑战的是数据有效性(2007版本以上称为“数据验证”)。
前面放了一个大招,站长觉得我估计把大家吓跑了,所以这次,我只放一个小招

关于“吓跑大家”这一点,我就闲话几句吧:

昨晚沙漠妹纸私信给我,问我有没有参加擂台赛,便说了两句。她觉得,应该出一些Excel做不到的题目,这样才能显示出Access的优越性。
我说,其实我出的题目,Excel应该可以做出来的,只是成本很高。在我看来,如果出的题目Excel做不出来,就没什么可比性了。
例如,Excel的图表,数组公式等等,如果拿来挑战,Access基本只能靠第三方控件或者插件之类了。为完成一个不可能的任务而不惜抛弃易用的Excel,无异于钻牛角尖,完全没必要,对么?


要求就不需要多说了。正则表达式、文本函数、辅助表等……只要你能想到的都可以用,除了Access组件。提示?其实我已经说了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2016-3-27 13:06:37 | 显示全部楼层
本帖最后由 roych 于 2016-3-27 13:10 编辑
pureshadow 发表于 2016-3-26 17:53
Excel函数里没有正则表达式,这个貌似是做不到了,但是Excel里有单元格……
貌似Excel 2013里直接用公式(自定义)好像有点问题,例如在编辑状态下按enter就会出现这个问题:

如果把公式写入一个单元格,然后引用该单元格作为数据验证倒是可以的(详见附件)。不知道算不算一个bug。

我想到的是将输入的字符串mid到每个单元格,然后加上三个辅助列(字母,数字,特殊字符)分别来find这些单元格,最后组合起来判断。从理论上讲应该是可行的,不过数组公式可能比较复杂。
当然,VBA相对简单些:
  1. Function Invalid(ByVal rngInput As Range) As Boolean
  2.     Dim i As Long
  3.     Dim blnResult As Boolean
  4.     'Const NUMBER_TEST As String = "0123456789"
  5.     Const CHAR_TEST As String = "qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM"
  6.     Const SYMBOL_TEST As String = "~!@#$%^&*()"
  7.     '先判断开头字母
  8.     If InStr(1, CHAR_TEST, Left(rngInput.Value, 1)) Then
  9.     '判断是否包含数字
  10.         If rngInput.Value Like "*#*" Then
  11.     '然后判断是否包含特殊字符,一次循环搞定。
  12.              For i = 2 To Len(rngInput.Value)
  13.                 If InStr(1, SYMBOL_TEST, Mid(rngInput.Value, i, 1)) Then
  14.                     blnResult = True
  15.                     Exit For
  16.                 End If
  17.             Next
  18.         End If
  19.     End If
  20.     Invalid = blnResult
  21. End Function
复制代码
不过同样需要用别的单元格来存储,不能定义名称,然后在有效性里使用:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2016-4-6 02:16:51 | 显示全部楼层
总结如下:
从实现难易程度上来看,Access略胜一筹。特别是加上更多条件时(例如要求字符串长度范围是8-16),Excel则需要写更加复杂的公式,而Access只需要加上一个and和or的表达式即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 06:03 , Processed in 0.103485 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表