ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 9843|回复: 37

[推荐] 推荐 三楼胡剑老师的讲解, 供大家学习

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:06 | 显示全部楼层 |阅读模式
IF...N....T... 还是不会用,有请老师了
   推荐 三楼老师的讲解, 供大家学习推荐 三楼老师的讲解, 供大家学习

[ 本帖最后由 正弋老兵 于 2011-5-6 16:39 编辑 ]

IF-N.rar

2.49 KB, 下载次数: 322

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-6 16:37 | 显示全部楼层

大力推荐胡剑老师的精细讲解

大力推荐胡剑老师的精细讲解
   

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不是太明白,不过是不是只要把 合并单元格的问题解决 就容易了
  1. =LOOKUP(ROW(B3:B14),IF(ISBLANK(A3:A14),FALSE,ROW(A3:A14)),A3:A14)
复制代码
这个公式可以将合并单元格转换为一般的数组。


这种思路的最后结果为
  1. =MAX((LOOKUP(ROW(B3:B14),IF(ISBLANK(A3:A14),FALSE,ROW(A3:A14)),A3:A14)="B")*(B3:B14=1016)*ROW(B3:B14))
复制代码
==================================================================================
细腻解析: 公式细腻之处.jpg


大家体会到了这个技巧就能写出很多有新意的公式,比如大家常写一个公式用于返回满足条件的最后一个数据,形状类似:LOOKUP(1,0/条件设置,数据)。这个公式的关键在于 "0/条件设置",能产生两种类型的数据,数值(0)和错误值,原理就在这里。但0/条件设置 总感觉不是那么好读,这种地方可以用IF函数来替代,用TRUE或FALSE两个分别生成两种类型的数值即可(数据类型:错误值,文本,逻辑值,数值),把满足条件的设置为一种,不满足的设置为另一种,查找的使用用一个足够大的类型为满足条件的那种类型区查好即可。

当然啦,最后一个满足条件的数据还有更通用的方式。这里只是分享一下查找是能自动根据 查找值 的数据类型自动忽略查找区域其他类型的特性。比如这个公式
  1. =LOOKUP(TRUE,{1;0;FALSE;0;FALSE;5},ROW(1:6))
复制代码
这里查找值为TRUE,于是限定了查找类型为逻辑值,查找区域有数值和FASLE,显然TRUE是足够大的(相对于FALSE),与是否返回最后一个FALSE对应的数值5。这里只是为了说明参数类型自适应的现象。
这里是LOOKUP中,我想VLOOKUP应该也会表现差不多的特性,不如超找文本的时候自动忽略数值什么...

[ 本帖最后由 胡剑0227 于 2011-5-6 10:54 编辑 ]

破合并单元格用法.rar

7.38 KB, 下载次数: 220

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-6 09:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 3楼 胡剑0227 的帖子

继续等等老师的解答

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:30 | 显示全部楼层
來個土方法 無敵大磚塊誘美玉
  1. =MIN(IF(T(OFFSET(A3,IF(B3:B14=1016,ROW(3:14)-3,15)-{1,2,3,4,5},))="B",(ROW(3:14))))
复制代码
數組

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另外,想要在合并单元格区域中 标记 B 对应的行,也可以这样
  1. =MMULT(COUNTIF(OFFSET($A$3,,,ROW($1:$12)),{"B","C"}),{1;-1})
复制代码
这种方式的最后公式:
  1. =MAX(MMULT(COUNTIF(OFFSET($A$3,,,ROW($1:$12)),{"B","C"}),{1;-1})*(B3:B14=1016)*ROW(B3:B14))
复制代码
=====================================================================================

你本来的思路是绝对没有问题的,问题在于函数公式基础性的问题。涉及到参数类型,参数类型? 我想一般大家很少去关注,即时关注很多也就是COUNTIF第一参数不能用数组

我的公式原理上和你没有什么区别,只是你把 OFFSET 返回的一组 区域 用在了 LOOKUP 第二参数,类型应该是数组,于是强迫 一组引用 以单元格中的数值作为结构颗粒,因此在处理的时候只能以 各个区域为单位进行计算。你把公式写在多单元格区域时没有问题,原因就在于每个单元格承担了一个区域的计算。

我把OFFSET返回的一组 区域 用在了 COUNTIF 的第一参数,这个参数类型本身就是 RANGE,区域,所以对它来说就是一个简单的一维数组,只是每个元素是一个区域(这里大家可能比较难理解,因为思维惯性已经让我们习惯把单元格、单元格中的值作为数组的颗粒),既然COUNTIF 的第一参数由一个区域升级为 一组区域,因此也就返回 一组返回值。(这个就是我所说的数组化,数组化的关键是以参数类型被参照颗粒,这里就是区域)。这样就能在时间上整合在一起处理,就是一个很普通的数组公式,呵呵。

[ 本帖最后由 胡剑0227 于 2011-5-6 09:47 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:36 | 显示全部楼层
胡劍老師提供的靈感 亦可如下解
  1. =MAX((LOOKUP(ROW(3:14),IF(NOT(ISBLANK(A3:A14)),ROW(A3:A14)),A3:A14)="B")*(B3:B14=1016)*ROW(3:14))
复制代码
  1. =MATCH(1,MMULT(COUNTIF(OFFSET(A3,,,ROW(1:12)),{"B","C"}),{1;-1})*(B3:B14=1016),)+2
复制代码

[ 本帖最后由 piny 于 2011-5-6 09:39 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-6 09:37 | 显示全部楼层
=SUMPRODUCT((LOOKUP(ROW(B3:B14),IF(ISBLANK(A3:A14),FALSE,ROW(A3:A14)),A3:A14)="B")*(B3:B14=1016)*ROW(B3:B14))

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-6 09:38 | 显示全部楼层
原帖由 piny 于 2011-5-6 09:30 发表
來個土方法 無敵大磚塊誘美玉=MIN(IF(T(OFFSET(A3,IF(B3:B14=1016,ROW(3:14)-3,15)-{1,2,3,4,5},))="B",(ROW(3:14))))數組

  这个方法正确,。。。。 不过确实有点土了。
   你的 {1,2,3,4,5}  数组来的不明白,还是请指教
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 11:43 , Processed in 0.042845 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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