ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 函“术”技巧接龙,荟萃最小颗粒的技巧定式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-7 09:27 | 显示全部楼层 |阅读模式
前段时间一直想整理一些函数的小技巧,这些技巧是靠平时积累的,且必须体会深刻才能在需要时及时浮出脑海。函数公式就是一个组装小逻辑的过程,通过组装最后实现对复杂逻辑的描述。哲学史上曾经有人提出“原子论”,一个最小的颗粒能演化出万事万物。这个也类似活字印刷,把颗粒变成一个一个的字,而不是一匡一匡定死木刻那么灵活性就大大加强了。

这是一个倡议帖,希望能集合论坛集体的智慧整理通用的函“术”技巧。

抛砖引玉.
如果有好的技巧可送财富,呵呵
区域1可以是引用,也可以是数组...

请从自然语言表达的逻辑出发,用函数公式尽可能平实的落实逻辑...

[ 本帖最后由 胡剑0227 于 2011-7-7 09:37 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-7 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最近时间紧,我就先匆匆上一个技巧:

存在性判断
判断某列区域(名称为 区域1)中是否包含某数据(名称为 标的)。通过MATCH查找 标的 在 区域1 中的位置,如果返回错误表示不存在...
  1. =if(ISERROR(MATCH(标的,区域1,0)),"不存在的后续处理","存在的后续处理")
复制代码

TA的精华主题

TA的得分主题

发表于 2011-7-7 09:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. =mid("不存在的后续处理",or(标的={区域1,0})+1,9)
复制代码


胡剑0227:
请先注明实现的逻辑,这样方便同学在思路比较顺的来了解...


[ 本帖最后由 胡剑0227 于 2011-7-7 10:53 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-7 09:54 | 显示全部楼层
在胡版下面,斗胆献上一个。
求小值,数组公式:
  1. =SMALL(IF(区域1="某条件",区域2),n)
复制代码
其中省略了IF的第三个参数,为了让它返回逻辑值FALSE,大于一切数值。
举例,A列为工作人员(有重复),B列为对应的不同人员做某项工作多次统计的时间:
  1. =SMALL(IF(A1:A10="张三",B1:B10),2)
复制代码
求得张三作此工作第二快的时间是多少。

公式有个致命伤。用IF返回的是一串数组,不是引用,无法在外面接上COUNTIF函数。


胡剑0227:
也可以说我们需要一个更具包容性的COUNTIF数组版,呵呵。


[ 本帖最后由 胡剑0227 于 2011-7-7 11:02 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-8 06:55 | 显示全部楼层
定位文本字符串中某字符第N次出现的位置

精确定位某字符第N次出现的位置.jpg
  1. =FIND("#",
  2.           SUBSTITUTE(A1,"弃","#",2),
  3.                                     1)
复制代码
分析:
某字符出现的位置可以使用FIND函数,SUBSTIUTE函数用来指定第N出现的N(这个是亮点)。用SUBSTITUTE对出现次序进行限定是个好技巧,不知道是否还有其他的。如果把写函数公式当成抓药方,每味药各自完成自己的使命,那么需要用到对字符出现次序进行限定时可以用这味药。

# 这里是一个辅助字符,类似解几何题时用到的辅助线。

[ 本帖最后由 胡剑0227 于 2011-7-8 07:11 编辑 ]

文本中限定某字符出现次序.rar

3.38 KB, 下载次数: 37

TA的精华主题

TA的得分主题

发表于 2011-7-9 06:09 | 显示全部楼层
嗯,胡版5楼好方法,学习!

胡剑:0227
那你也分享一个小函“术”,不需要高深,不需要非得很精巧。写一个实际运用时经常性要完成的逻辑...

[ 本帖最后由 胡剑0227 于 2011-7-9 07:13 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-9 08:23 | 显示全部楼层
原公式之FIND第三參數可略(省略時自動視為從第一值開始找)
  1. =FIND("#",SUBSTITUTE(A1,"弃","#",2))
复制代码
這樣應該更直觀(若只是找第二個的話)
  1. =FIND("弃",A1,FIND("弃",A1)+1)
复制代码
或數組解
  1. =SMALL(IF(MID(A1,ROW(1:99),1)="弃",ROW(1:99)),2)
复制代码

TA的精华主题

TA的得分主题

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

回复 7楼 piny 的帖子

欢迎陈版也奉献一个日常需要完成的小逻辑实现方式,即从自然语言落实到公式

TA的精华主题

TA的得分主题

发表于 2011-7-9 14:14 | 显示全部楼层
原帖由 piny 于 2011-7-9 08:23 发表
原公式之FIND第三參數可略(省略時自動視為從第一值開始找)=FIND("#",SUBSTITUTE(A1,"弃","#",2))這樣應該更直觀(若只是找第二個的話)=FIND("弃",A1,FIND("弃",A1)+1)或數組解=SMALL(IF(MID(A1,ROW(1:99),1)="弃",ROW ...

好方法,精彩,find的第三参数为START_NUM

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-12 07:02 | 显示全部楼层
在公式中设置单元格日期格式

假设
A1单元格:20101004
请在B1单元格返回真正的日期数据,并且显示为“2010-10-4”

注意:不准手工修改单元格格式。
方式0,你得先试试这个,否则你也许看不明白
  1. =VALUE(MID(A1,1,4)&"-"&MID(A1,5,2)&"-"&MID(A1,7,2))
复制代码
  1. =TEXT(A1,"0000-00-00")
复制代码
方式1
  1. =VALUE(MID(A1,1,4)&"-"&MID(A1,5,2)&"-"&MID(A1,7,2))+DATE(1900,1,0)
复制代码
方式2
  1. =TEXT(A1,"0000-00-00")+DATE(1900,1,0)
复制代码
这个需要试试,

主要体会 DATE(1900,1,0) 的作用,这个还是很有意思

[ 本帖最后由 胡剑0227 于 2011-7-15 22:31 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 21:42 , Processed in 0.049965 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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