ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: hjj0451

[讨论] 自动重算、易失函数与IS类函数对参数多维之返回结果影响探讨(更新最新测试结果)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-10-16 09:06 | 显示全部楼层
本帖已被收录到知识树中,索引项:ISERROR
公式用
  1. =IF(ISTEXT($A$26:$A$29),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
即可,产生原因还需要继续探明。

TA的精华主题

TA的得分主题

发表于 2011-10-16 09:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 bluexuemei 于 2011-10-16 10:00 编辑
  1. =IF(ISTEXT($A$26:$A$29),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. =IF(ISNUMBER($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. =IF(ISNONTEXT($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. =IF(ISBLANK($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. =IF(ISlogical($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. =IF(ISerr($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. =IF(ISerror($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
  1. [code]=IF(ISna($A$26:$A$29),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
除了TEXT以VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))作为第二参数,其它的都以VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))做第三参数
只有ISREF/ISEVEN/ISODD不支持这种用法

点评

还有ISNA亦可  发表于 2011-10-16 09:30

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-10-16 09:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
进一步测试发现
  1. =IF(ISTEXT(VLOOKUP($A$18:$A$21,$A$1:$E$13,COLUMN(C:E),)),VLOOKUP($A$18:$A$21,$A$1:$E$13,COLUMN(C:E),)&T(NOW()),VLOOKUP($A$18:$A$21,$A$1:$E$13,COLUMN(C:E),)+0*NOW())
复制代码
  1. =IF(ISTEXT(VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),)),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),)&T(RAND()),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),)+0*RAND())
复制代码
这样是正确的,而
  1. =IF(ISTEXT($A$18:$A$21),VLOOKUP($A$18:$A$21,$A$1:$E$13,COLUMN(C:E),)&T(NOW()),VLOOKUP($A$18:$A$21,$A$1:$E$13,COLUMN(C:E),)+0*NOW())
复制代码
  1. =IF(ISTEXT($A$26:$A$29),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),)&T(RAND()),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),)+0*RAND())
复制代码
日期列会产生错误

TA的精华主题

TA的得分主题

发表于 2011-10-16 09:36 | 显示全部楼层
更神奇的还有:
  1. =IF(RAND(),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码

点评

漂亮。怎么发现的“新”问题,总是早已被方版发现过?无法超越啊。  发表于 2011-11-21 11:08
恩,RAND函数迫使每个单元格都进行重算,呵呵  发表于 2011-11-20 21:28
原来原数据日期带有时间显示,所以出现小数.方老师的这个发现,真神奇,比其它的都简单!  发表于 2011-10-16 09:54
不好意思,好像单元格设置为日期是可以的,为什么日期值会显示小数呢?  发表于 2011-10-16 09:45
方老师,这样日期会出现错误.  发表于 2011-10-16 09:42

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-10-16 09:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chrisfang 发表于 2011-10-16 09:36
更神奇的还有:

自己的贴没法点评,只能单独回复bluexuemei   源数据中日期数据中就包含了时间,时间值就是小数。

TA的精华主题

TA的得分主题

发表于 2011-10-16 10:10 | 显示全部楼层
抛开IS类函数,再来看一下IF(1,
RAND函数貌似可以替代IF(1,的效果:


  1. =IF(1,OFFSET(A1,ROW(1:4),))
复制代码

上面这个公式的效果与下面这个相同

  1. =OFFSET(A1,ROW(1:4),)&T(RAND())
复制代码

下面两个公式可以得到同样的结果:
  1. =VLOOKUP(IF(1,OFFSET(A1,ROW(1:4),)),A2:D13,4,0)
复制代码

  1. =VLOOKUP(OFFSET(A1,ROW(1:4),)&T(RAND()),A2:D13,4,0)
复制代码

如果用Now函数替代RAND函数则不行,看来RAND函数还有别于一般的易失性函数。

TA的精华主题

TA的得分主题

发表于 2011-10-16 10:31 | 显示全部楼层
进一步发现,用OFFSET(A1,ROW(1:4),)&T(RAND()),如果是空格它显示空,而=IF(1,OFFSET(A1,ROW(1:4),))则显示0

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-16 10:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 hjj0451 于 2011-10-16 09:41 编辑
chrisfang 发表于 2011-10-16 08:06
公式用即可,产生原因还需要继续探明。


方版早。这样公式又缩短了。不过我附件中的例子只能简写第2参数,不可以简写第三参数。因此应为:
  1. =IF(ISBLANK($A$1:$E$13),,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))
复制代码
具体哪个IS类函数可以用,可能和查找值类型有关系。

点评

[不过我附件中的例子只能简写第2参数,不可以简写第三参数]---这个说法有点欠妥,请见52楼  发表于 2011-10-16 10:46

TA的精华主题

TA的得分主题

发表于 2011-10-16 10:41 | 显示全部楼层
chrisfang 发表于 2011-10-16 10:10
抛开IS类函数,再来看一下IF(1,
RAND函数貌似可以替代IF(1,的效果:

谢谢方老师的发现!
RAND()函数太神奇了,看来我们很有必要重新认识它.=IF(RAND(),OFFSET(A1,ROW(1:4),))的效果与=IF(1,OFFSET(A1,ROW(1:4),))相同,它可以替代IF(1,可是反过来IF(1,不能替代RAND(),比方=IF(RAND(),VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))不能用=IF(1,VLOOKUP($A$26:$A$29,$A$1:$E$13,COLUMN(C:E),))代替.

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-16 10:50 | 显示全部楼层
hjj0451 发表于 2011-10-16 09:40
方版早。这样公式又缩短了。不过我附件中的例子只能简写第2参数,不可以简写第三参数。因此应为:具体哪 ...

我在附件的第二个表测试了一下,省略第三参数会发生错误。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-14 22:04 , Processed in 0.041997 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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