ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

每天进步一点点并不太难

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-4-12 15:21 | 显示全部楼层 |阅读模式
宝剑锋从磨砺出,梅花香自苦寒来!

越学习,越发现自己的无知。

==================================
                               学习笔记目录
==================================

02楼:*和and,+和or在逻辑运算中的应用
03楼:rows()和row()的区别以及row(a1)/row(1:1)/row(1:10)/row()-等的应用
04楼:单元格中的唯一数字如何提取出来?
05楼:用offste()定义带空行的动态区域
06楼:关于lookup/match等查找函数的查找策略(未完全理解)
07楼:空缺,小结用
08楼:关于提取长于15位数字的另解
09楼:如何将EXCEL 的列号由1,2,3....改为A,B,C...?
10楼:工具-视图选项会禁止数据有效性
11楼:LOOKUP(2,1/(条件1)*(条件2),查找数组或区域)第二页
12楼:使用If{1,0}或者choose{1,2}构建内存数组的原理
13楼:万位分隔符在Excel中的应用
14楼:数据透视表合并标志、批量设置汇总
15楼:数据透视表页字段排序、保密设置
16楼:关于学习数据透视表的几点总结
17楼:数据透视表结合条件格式、宏、vba进行的美化
18楼:数据透视表加入计算字段&设置字段格式
19楼:数据透视表使用方法精要12点
20楼:数据透视表对不同工作簿的汇总
21楼:多表汇总的三维数据引用处理(对比数据透视表)第三页
22楼:数据透视表转换内部字段、外部字段
23楼:根据同一字段更改汇总方式和数据显示方式
24楼:透视表函数运用、关闭分类汇总以及GETPIVOTDATA函数
25楼:创建动态数据源的两种方法
26楼:关于透视表的5种刷新
27楼:数据透视表的项目组合
28楼:透视表中计算字段和计算项的区别
29楼:隐藏宏函数get.cell的66种参数
30楼:Excel 2003数据透视表“永恒边框”实现方法
31楼:数据透视表中条件格式优先级大于字段设置自定义格式第四页
32楼:编辑函数的小技巧
33楼:自定义格式的小技巧
34楼:关于对透视表录制宏设置永恒列宽的代码修改
35楼:透视表中字段按钮显示与否的切换代码
36楼:boatwxp同学对于隐藏按钮代码的修改
37楼:隐藏按钮之jcgswxq11同学的方法
38楼:透视表内部字段排序、批量去掉显示明细
39楼:数据透视表小结4
41楼:我和VBA的第一次亲密接触第五页
42楼:关于上标、下标的输入
43楼:关于数据透视表计算字段汇总的"先天缺陷"?(未解决)
44楼:函数的隐含交叉特性/内存数组/能返回数组的函数
45楼:VBE代码窗口中sheets(1)的含义(易混淆)
46楼:隐藏函数N()的秘密
47楼:不同的组合编写区域数组公式
48楼:数组的多维引用
49楼:什么叫做隐含交叉引用
50楼:页面设置-组及分级显示
51楼:几个数字技巧(数组)
52楼:Indirect(一个关于追求美女的故事)
53楼:OFFSET 邮局送信
54楼:max和large的故事
55楼:VBE代码窗口中sheets(1)的含义(易混淆)
57楼:VBE代码窗口中sheets(1)的含义(易混淆)
58楼:透视表在保护状态下如何更新?
59楼:关于在Word中如何快速插入千分符
60楼:小梅的vba笔记:基础概念
61楼:小猪的数组特辑班笔记1
62楼:宋宋的透视表中级笔记1(排序)
63楼:小园的常用技巧笔记1
64楼:如何默认只用Excel2003打开2003格式的文件?
65楼:分时计算金额,未懂公式
66楼:PHONETIC函数文本连接
67楼:EXCEL中打印水印设置(配图)
68楼:巧妙地match用法
69楼:lookup新思路及双驱十字剑的初步应用
70楼:自定义页眉页脚来关联工作簿名及工作表名
71楼:从宏开始学习vba
72楼:v、_小乖输入和编辑数据综合技巧
73楼:Excel行、列、单元格区域以及页面设置
74楼:透视表组合、分组相关知识
75楼:关于add方法在应用于不同对象时的用法1
76楼:关于add方法在应用于不同对象时的用法2
77楼:身份证号码与县区对照表
78楼:几种四舍五入的方法(round、floor、lookup)
79楼:从带空行的数据源提取不重复值,隔行显示
80楼:EXCEL2003版的一些限制
81楼:Excel 2007规范与限制
82楼:rank,frequency,index,sumproduct等在成绩按条件排名中应用
83楼:Microsoft Query 检索外部数据相关资料集
84楼:条件格式的使用
85楼:从外部引用透视表区域内单元格时如何去除生成GETPIVOTDATA公式
86楼:看不懂得sql语句,先锁定(结合计算字段)
87楼:利用excel的VBA汇总多个word中的表格数据
88楼:提取字符串中的字母长度(多种方法)
89楼:frequency在查找连续重复值时的运用
90楼:如何将正整数逆序重排生成新的整数?
91楼:如何在一列中输入,每隔10个格数值加1
92楼:vba相关知识记载
93楼:使用trim容易忽视的细节
94楼:excel单元格自定义格式详解
95楼:真假合并单元格(格式刷)
96楼:多行转1列的基础操作方法(数据-合并计算)
97楼:如何设置多条件有效性
98楼:多列数据合并为1列的5种方法
99楼:解读SUMPRODUCT函数(连乘与,的区别)
100楼:SUMPRODUCT多表多条件求和问题
101楼:如何让这个SUMPRODUCT函数不用三键结束也能返回正确值?

[ 本帖最后由 lrlxxqxa 于 2010-6-4 14:46 编辑 ]

评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-12 15:29 | 显示全部楼层

*和and,+和or在逻辑运算中的应用

学习链接为论坛地址:http://club.excelhome.net/viewthread.php?tid=155418
http://club.excelhome.net/viewthread.php?tid=155418

认为*是and(且)、认为+是or:[quote]
比如公式1可以这么解释A列=小王且B列=收,对C列求和;公式2解释为A列是小王或者A列是小张,则对C列求和。
而实际上这个似乎非常符合汉语习惯的让人觉得非常“正确”的理解——却是不完全的。此时的*号和+号仍然是乘和加的作用。
方法:工具〉公式审核一步步看公式的结果就知道了——*和+号两边得到的是{true,false……}组成的逻辑值数组,用于运算时true*true=1,true*false=0,true与任一数字作算术运算,得到原数字;false与任一数字作算术运算,得到0,得出结果如果用于IF判断,0=False、其他数值=True;如果用于下一步计算(比如公式1后面的直接*C2:C10)则也是用1、0代入的(1*数值=数值本身,0*数值=0)
1、简单例子以及容易产生的“理解”
逻辑判断公式中,常常见到条件相*或相+,也常见到and和or,比如:
=if(and(A1>0,A1<8),B1,C1)……VS……=if((A1>0)*(A1<8),B1,C1)——对比and和*
=if(or(A1>0,A1<8),B1,C1)……VS……=if((A1<0)+(A1>8),B1,C1)——对比or和+
以上两种情况是完全可以互换的(等价的)。由此,初学函数的朋友就容易产生这么一种理解:“*就是and(而且的意思)+就是or(或者的意思)”
在某种意义上来说快速地解读公式含义的话,这个“理解”听起来最容易接受了。但不要由此就把这种逻辑判断中的理解扩散成“完全等价”!请看下一点:
在以下两个条件求和中:(数组公式,按Ctrl+shift+enter结束)(假设A1=4,A2=21;B1=5,B2=11)
=sum(if(and(A1:A2>0,A1:A2<8),B1:B2))……VS……=sum(if((A1:A2>0)*(A1:A2<8),B1:B2))
前者只有当A1、A2都介于0和8之间时才返回B1:B2的和,否则得到0;
后者则分开了,比如A1介于0和8之间,A2不介于0和8之间,那么求得的结果是B1的和,而不是0。
这只是一些显性的数组公式,还有不少用数组运算的公式(非数组公式,不按三键)
2、and、or与*、+的原理比较:
AND(logical1,logical2, ...)——详见and函数帮助:当所有的logical们都为True时返回True——这是1个单值
OR(logical1,logical2, ...)——详见and函数帮助:当所有的logical们只要有一个为True时返回True——这是1个单值
(A1:A2>0)*(A1:A2<8)——返回的是{True;False}*{True;True}类型的数组相乘的结果{1;0}——这是一个数组
(A1:A2>0)+(A1:A2<8)——返回的是{True;False}+{True;True}类型的数组相加的结果{2;1}——这是一个数组
接下来:
由and、or得到的是:
=sum(if(and(A1:A2>0,A1:A2<8),B1:B2))=sum(if(and({True;True},{True;False}),B1:B2))=sum(if(False,B1:B2))=0
and({True;True},{True;False})——有出现False返回False;or公式类似。
由*、+得到的是:
=sum(if({1;0},B1:B2))=sum({5;False})=5——可以用F9键在编辑栏看出。
而=sum(if({2;1},B1:B2))=sum({5;11})=16
注:在逻辑判断if的条件中,0=False;非0的数值都=True
从以上的对比可以看出:运算符*和+在逻辑判断中与and和or是不同的,前者得到的是数组,后者只能得到单值.在数组运算的情况下由于不能匹配故不能互换。
Apolloh在14楼补充解释: 楼主gouweicao78所说的*和+的用法,实际上是针对相同尺寸的逻辑数组的算术运算,逻辑数组A*(+)逻辑数组B=逻辑数组C。而and(逻辑数组,逻辑数组)和or(逻辑数组,逻辑数组)中and和or的参数可以是数组,但却不是数组运算,没有数组的对应关系,其结果返回单值。所以两者是不能等价的。

从上面的知识点拓展一下,平时看到很多形式如if(条件1*条件2*……,统计区域) 的简化if法(满足所有条件,返回统计区域,否则返回False(简化没写)。——即数值和False组成的数组)和连乘法(利用数组相乘返回数组——即数值和0的数组)原理并不相同.这一点狗尾草版主也强调过.
在sum中,因为简化没写的0(简化if法返回)对于加总求和并没有影响,所以大多可以通用。
在Average、Max、Min等函数中则不能通用:
False在计算中大多情况=0,但并非都是这样。
比如Average——会将连乘法中0算入平均的个数,而不会将简化if法中的False算入个数。
而由满足条件的值都是负数的情况下,max连乘法将得到0,max简化if法得到的才是正确答案。
连乘法对应的不是简化if法,而是if(条件1*条件2*……,统计区域,0)

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:14 编辑 ]

TA的精华主题

TA的得分主题

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

rows()和row()的区别以及row(a1)/row(1:1)/row(1:10)/row()-等的应用

这个疑问是看狗尾草版主贴子时遇到的,看贴前脑子还真是混乱,经整理清晰多了.
gouweicao78常见用数组公式取得多条记录的开头都是=if(row(1:1)>XXX,""……表示当公式下拉复制超过一定行数(满足条件记录的个数)时,显示为空。书写方式有row()-n、row(1:1)、rows($1:1),前2个得到的是一个{}1行1列的数组,后一个得到的是一个单值,此外,如果未知数据行数要形成“多单元格数组公式”,则必须使用row()-n的形式;如果已确定要得到记录的行数,则也可以用row(1:X)实现。比如:=IF(ROW(1:6)>COUNTIF(A1:A6,">0"),"",SMALL(IF(A1:A6>0,A1:A6),ROW(1:6)))——谢谢gvntw版主补充。
备注:n是公式所在第一行的上一行的行号。比如在A7输入第一个公式,则n=6。
一般的Row(1:1)由于是相对引用,在公式下拖复制时变成Row(2:2)、Row(3:3)分别返回{2}、{3}等,用以结合SMALL函数将数组从小到大输出。
column函数与row函数很相似,但由于工作表中最大行数是65536(4^8)而列数是256,所以在大多时候都用column(1:1),返回的是一个数组:{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256},这个数组一般应用中够用了.而如果在单个单元格输入的时候,只显示1.

Apolloh更是一语中的:min(),max(),large(x,1),small(x,1),可将row()产生的单值数组转换成常量

Gdiyy的讨论使我对这个概念的理解更加深入:
1、Rows()其结果返回行数--单值,而Row()则返回行号--单值或多值,所以Rows()返回是单值常量,而Row()则返回常量数组。
2、并不是Row(1:1)不出错,只是你的例子看似比较特殊Rows(A1:A1),仅仅引用了一个单元格,当你删除1整行,Row(1:1)还是报错的。这也从侧面反映了--在Excel中,当参数引用范围全部丢失时,系统会自动识别为引用无效(#REF!)的。
3、对于运算速度,我觉得应该是Rows()快一些,这可能与Rows()本身的函数性质有关吧:)
Czzqb: 说说关于ROW(1:1)的看法,与楼主提的ROWS()无关
ROW(1:1)的最简单的用法如下:
A1:A10里存放了10个数字,要在A11:A20里把它从小到大排列出来,有以下几个写法(自定义名称DATA1=$A$1:$A$10):
1, SMALL(DATA1,ROW(A1)),下拉
2, SMALL(DATA1,ROW(1:1)),下拉
3, SMALL(DATA1,ROW(INDIRECT("A"&ROW()-10))),下拉
4, 多单元格数组公式:SMALL(DATA1,ROW(INDIRECT("1:10")))
5, 多单元格数组公式:SMALL(DATA1,ROW(DATA1))
哪个好用?
公式1和2,3的计算速度应该比4和5要慢,因为它有10个公式,要计算10次,而后两个公式只计算一次,就填入10个单元格;另外,更致命的是,一旦删除数据区的某一行,将造成显示结果错误。
公式4与5,删除数据区不会造成错误,速度块。
而公式4与5相比:公式4使用了易失函数,会引发大量的重算,速度也受到很大影响,而公式5则没有这个问题。

我的总结:多单元格数组公式:SMALL(DATA1,ROW(DATA1))在此例是最好的。其他的地方恐怕要受到限制,因为ROW()得到的只是DATA1区域的行数,要想得到更多的行数,还是要用第4个公式。要用多单元格数组公式时,=rows($1:1)和=row(1:1)都只能返回一系列的1,只有用=row()-公式上一行的行号
才能返回1、2、3……这个系列。(补充,还有已知行数x,用row(1:x)也可以。)
Rows(ref)/Columns(ref)函数传回的是ref所表示的单元格区域或数组所包含的行数或列数,为基本数据类型,比较简单,运算速度较快。
Row([ref])/Column([ref])函数传回的是ref所表示的单元格区域所包含的行号和列好的集合,为数字数组类型,适合数组应用;同时,因为Excel在非数组运算过程中会自动将数组名称替换为数组中的第一个数字使用,所以亦可以在省略部分数据的情况下作为基本数据类型使用。因为在产生数组的过程中的计算量和保存数组所消耗的内存量较大,所以运算速度较慢。

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:14 编辑 ]

row.rar

3.62 KB, 下载次数: 173

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-12 17:32 | 显示全部楼层

单元格中的唯一数字如何提取出来?

http://club.excelhome.net/viewth ... p;extra=&page=1

一个数值和文字混排的单元格,如何计提数值参与计算?
发哥gvntw给出了一个巧妙的公式: =LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1)))))
山菊花老师以“收入562.00元”为例,进行了生动详细的讲解:
1、、FIND()告诉我,0-9在文本中第一次出现的位置。
用Find()在指定的文本中查找0-9,会返回第一次出现的位置,如果没有会返回一个错误值,聪明的gvntw,在文本后面连接上1234567890,让Find()不再有借口返回错误值,请放心,它不会影响后面的结果。在编辑栏中,像下面一样,用鼠标将这一段文本抹黑,然后按F9。
=LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1)))))
2、对着 Min(),王小丫说:恭喜你,答对了,第一个数字在第3位。
如果你还怀疑,可以这再次抹黑,并按F9。
=LOOKUP(9E+307,--MID(A1,MIN({7;8;5;12;13;3;4;16;17;18}),ROW(INDIRECT("1:"&LEN(A1)))))
3、神奇魔术师 Mid() ,一个文本变出许许多多。
让事实说话,继续抹抹黑,按F9。开始位置不变,长度依次增1,形成一个数组,数组的个数等于文本长度(Row()的结果)。后面的会出现相同的情况,没关系,还是不影响结果的。
=LOOKUP(9E+307,--MID(A1,3,ROW(INDIRECT("1:"&LEN(A1)))))
4、如果忽略了--,还是功亏一篑。
看看,它的结果会是什么呢?
=LOOKUP(9E+307,--{"5";"56";"562";"562.";"562.0";"562.00";"562.00元";"562.00元";"562.00元"})
5、Lookup() 总是那么沉着,他闭着眼睛说,我就要最后面那个数字。
=LOOKUP(9E+307,{5;56;562;562;562;562.00;#VALUE!;#VALUE!;#VALUE!})
9E+307 是一个非常大的数,在任何时候都适用,如果你知道你的文本中最大数的范围,比如1000,文本中的数字不会超过1000的,那么,这个数字你用1000,也是行的,即:
Lookup(1000,……)


9E+307是什么概念?
9E+307是科学记数,用普通记数法写是9后面有307个0, 9E+307就是9*10^307
在构思解题思路时,就有,把那串文本从第一个数字开始,依次取1位、2位、3位、4位……,总共有多长,最后就取多少位。
有一部分,它的结果不是数(使用--把非数值筛出来,其余变成错误值#value),取出的结果是数值的,一定有一个是最大的,它一定排列在最后面(多举些例子,看看是不是这样),我们要取的就是最后面那个数。
9E+307是一个很大的数,很接近Excel计算允许的最大值,它好记,可以应付几乎所有的情况,所以,约定俗成而用它。
帮助中说,Variant 类型的数据正数最大值是 1.797693134862315E308,可是1E+308就出错了,不知为什么。

这里插入一点excel工作表的计算限制:
数字精度  15 位
单元格中可键入的最大数值 9.99999999999999E307
最大正数  1.79769313486231E308
最小负数  2.2250738585072E-308
最小正数  2.229E-308
最大负数  -2.2250738585073E-308
所以,用9E+307不是规定,不是原则,是约定俗成的用法,你用我用大家用.

Indirect在这里的用处
因为Len(A1)=9,
目的是要返回Row(1:9)或者Row(A1:A9),进而得到结果{1;2;3;4;5;6;7;8;9}
但ROW("A1:A"&len(A1))不行,因为"A1:A"&len(A1)是一个文本,而Row()的参数必须是一个引用
这文本和引用的关系很微妙,Row(1:9)中,1:9是引用,"1:"&len(a1)="1:9"是一个文本,要把文本转化为引用才能供Row()使用,Indirect()的作用就是把文本转为引用

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:14 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-12 17:40 | 显示全部楼层

用offste()定义带空行的动态区域

疑问来源自论坛内http://club.excelhome.net/viewth ... D=378308&skin=0

又见山菊花:一般情况下用counta(e5:e65536)可以取得,但这列不是连续的数据,中间有空的单元格,如果用counta()会使定义的区域小于实际区域,要得到最后一个有文字的单元格,可用match()。

你一定关注过9E+307,查找数字时,用9E+307可以定位到最后一个有数字的单元格,而查找文字时,按音序排序,“座”排在最后,在match()中使用“座”为参数进行查找,可定位到最后一个有文字的单元格。如果查找区域内有“座座……”等内容,会出错,但根据实际表格看,不会有这种情况。如果应用到任意公式中,可把“座”加长,为“座座座”或rept("座",255)等。

查找一行或一列最后一个有文字的单元格,可用“match("座"……”,本例中=OFFSET(拨款单!$E$5,,,MATCH("座",拨款单!$E$5:$E$65536)) 就是这个道理.这“座”是一宝啊。

如果要用在繁体字中,可用“?”替代“座”。

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:15 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-12 18:35 | 显示全部楼层

关于lookup/match等查找函数的查找策略(未完全理解)

http://club.excelhome.net/viewth ... p;extra=&page=2
注意原帖为讨论帖,楼主8楼先发的流程图有误,后经第51楼cinlo第4页发现错误第5页狗尾草版主更改,第7页再次质疑

传说中LOOKUP(包括VLOOKUP,HLOOKUP)、MATCH这些函数的查找时间与数据量不成正比。数据越多,查找速度越快。版主czzqb说根据数据库理论,查找2^N个数据,需要N(?N+1)次。那么查找是如何进行的?
当VLOOKUP的第四个参数为TRUE,MATCH的第三个参数为1时,查找的机制和LOOKUP一样,都是采用二分法。即从中间找!
当VLOOKUP的第四个参数为FALSE,MATCH的第三个参数为0是,都是按顺序从头到尾查找;
1、在待查区域(数组)数据量很多且按升序排列的情况下,推荐使用二分法(即使用LOOKUP,或者令VLOOKUP或MATCH的最后一个参数取1),可用于大致匹配或精确匹配;
2、在待查区域(数组)数据量较少或乱序的情况下,才考虑使用顺序查找(即令VLOOKUP或MATCH的最后一个参数取0),只能用于精确匹配;
3、除非在待查区域(数组)按降序排列的情况下,否则不建议使用MATCH时令最后一个参数为-1,可用于大致匹配或精确匹配。
http://club.excelhome.net/viewth ... p;extra=&page=6
结合对Lookup、Match(-1)流程图的修正过程(Hlookup、Vlookup精确查找流程易理解——见15楼),稍作总结:
1、这四个函数的查找机制均不是“遍历”法:
2、无论是Match还是其他三个函数,其核心都是用“比较值”(比较数据区域内的值和查找值X)的方法实现“找位置”——定位!
“位置”找着了,Match返回的是“位置”,其他三个直接返回“值”。

提出疑问:Looup()的第2参数含有空值和错误值情况时是怎么处理的呢?(双线区域观点是大部分人的误解)
========================================================================
LOOKUP函数可以忽略错误,但数组必须以升序排列,说得更清楚些:如果是查找数值,数组中的数值元素要升序(不求在连续位置),文本元素随便;如果是查找文本,数组中的文本元素要升序,数值元素随便;除了返回错误的情况外,在一列中查找时,查找数值只返回数值,查找文本只返回文本。”——chenjun;
“这里还要再说明一点的就是(LOOKUP()忽略错误值及空格(值).只查找第一个参数所对应数据类型)”——yigepure;见链接77楼、82楼
结合“对不同类型数据进行比较也是无意义的”,从这一点上来说LOOKUP真的是“忽略”与第1参数相异类型的值,不忽略的话也没什么意义,所以,第1参数为文本,则只要第2参数内的文本升序排列即可返回正确的意愿结果,数值乱序无碍;第1参数为数值,则只要第2参数内的数值升序排列即可返回正确的意愿结果,文本乱序无碍。——“帮助文件给你排序标准只是把它们写在一起而已,你们自己猜的”微软微笑不语。

=========================================================================

这里插入一个小知识点:excel的默认排序次序:
Excel2003版,2007版大同小异,在数字和按字母先后顺序排序之间增加了日期,个人觉得容易造成误解,因为日期是数值的一种特殊格式,目前的日期就是30000多的一个值而已)  
在按升序排序时,Microsoft Excel 使用如下次序(在按降序排序时,除了空白单元格总是在最后外,其他的排序次序反转):
数字      数字从最小的负数到最大的正数进行排序(从理解上来说,我更愿意称之为数值)。
按字母先后顺序排序      在按字母先后顺序对文本项进行排序时,Excel 从左到右一个字符一个字符地进行排序。例如,如果一个单元格中含有文本“A100”,则这个单元格将排在含有“A1”的单元格的后面,含有“A11”的单元格的前面。
文本以及包含数字的文本(如Char(48)得到的是文本,而不是数值),按下列次序排序:
0 1 2 3 4 5 6 7 8 9 (空格) ! " # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ ` { | } ~ + < = > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
撇号 (') 和连字符 (-) 会被忽略。但例外情况是:如果两个文本字符串除了连字符不同外其余都相同,则带连字符的文本排在后面。
逻辑值      在逻辑值中,FALSE 排在 TRUE 之前。
错误值      所有错误值的优先级相同。
空格      空格始终排在最后。
简要归纳以上排序为:数值、文本、逻辑值、错误值、空单元格

91楼http://club.excelhome.net/viewth ... ;extra=&page=10
经草版和精英的刀狐测试和研究:
lookup首先是二分法查找(这一点大家基本一致了),lookup不忽略任何数据(这和以前的理解有区别了),二分点完全是由查找区域决定的
看过gouweicao78模拟器的都知道其有个收敛的特点(如果类型相同这个已经吻合了)
那么我想的流程是:二分查找——如果类型相同,根据大小关系进行收敛;如果类型不同记下查找点,但不进行收敛,然后向右移动一位查找。同样如果遇到类型相同就根据大小关系进行收敛。如果类型不同,再次记下查找点。如果向右到最后一个数后再向左在查找点间进行二分查找。(所以类型相同和不同的区别主要就是就是是否进行收敛)
另如果查找到与查找值相同的数值时就不再二分查找,而是直接向右查找(这个大家意见也统一了)

举例:
比如A1:A10都为文本, =lookup(9,A1:A10)
那么先后查找的位置是 5 6 7 8 9 10 2 3 4 1
(未解决)

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:15 编辑 ]

TA的精华主题

TA的得分主题

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

多工作簿 多工作表 跨表 汇总 合并

耗费半天时间一口气看了174个楼层的帖子,还是有些晕.
预留此楼后续分析

===========================================================
[Excel VBA] 条件汇总文件夹内所有工作簿的所有工作表记录 http://www.exceltip.net/thread-984-1-1-25594.html
[Excel VBA] VBA 汇总不同工作簿的数据 http://www.exceltip.net/thread-4484-1-1-25594.html
[Excel VBA] 如何把各个工作簿中对应的工作表内容复制到汇总表中对应的工作表中? http://www.exceltip.net/thread-12822-1-1-25594.html
[Excel VBA] 多工作簿多工作表数据汇总 http://www.exceltip.net/thread-12711-1-1-25594.html
[Excel VBA] 工作簿各表记录汇总程序 http://www.exceltip.net/thread-1777-1-1-25594.html
[Excel VBA] 如何将多个工作簿中的工作表合并到新的工作簿中? http://www.exceltip.net/thread-4322-1-1-25594.html
[函数与公式] 如何汇总多个工作表的数据? http://www.exceltip.net/thread-259-1-1-25594.html
[函数与公式] 如何在表结构相同的多个工作表中查找/汇总? http://www.exceltip.net/thread-879-1-1-25594.html
[Excel VBA] 如何利用VBA将多工作表的数据汇总而不复制标题? http://www.exceltip.net/thread-6356-1-1-25594.html
[综合应用] 如何跨多工作表返回不重复值 http://www.exceltip.net/thread-4445-1-1-25594.html
[Excel VBA] 多工作簿多工作表汇总小实例 http://www.exceltip.net/thread-17990-1-1-25594.html

[ 本帖最后由 lrlxxqxa 于 2011-4-20 18:55 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-12 21:13 | 显示全部楼层

关于提取长于15位数字的另解

原讨论帖位于:http://club.excelhome.net/thread-559025-1-1.html

发现使用原方法=LOOKUP(9E+307,--MID(A2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A2&1234567890)),ROW(INDIRECT("1:"&LEN(A2)))))不能显示15位以后的数字
=MID(A2,SEARCHB("?",A2)/2+1,LOOKUP(2,1/MID(A2,ROW($2:$50),1),ROW($2:$50))-SEARCHB("?",A2)/2+1)在数字末尾有0时,不能正确提取
三种方法:
=MID(A2,SEARCHB("?",A2)/2+1,LOOKUP(10,--MID(A2,ROW($2:$50),1),ROW($2:$50))-SEARCHB("?",A2)/2+1)
=MIDB(A2,SEARCHB("?",A2),COUNT(-LEFT(MIDB(A2,SEARCHB("?",A2),99),COLUMN(2:2))))数组公式
=MID(A4,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A4&56^7)),COUNT(-MID(A4,ROW($1:$32),1)))数组公式
=MIDB(A2,SEARCHB("?",A2),2*LEN(A2)-LENB(A2))
个人认为最后一个最巧妙.
?表示任意单字符的意思,因为汉字是两个字节,而数字跟英文字母都是单字符,所以这里用问号可以得出第一个数字出现的位置,再利用midb和searchb函数来提取数字

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:16 编辑 ]

提取数字另解.rar

6.33 KB, 下载次数: 151

TA的精华主题

TA的得分主题

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

如何将EXCEL 的列号由1,2,3....改为A,B,C...?

打开发现:原来EXCEL的列号由原来的A,B,C,D,……全部变成了1,2,3,4,……;在EXCEL中编辑公式也极不方便了;并且重新打开新的EXCEL空白文档效果依然一样
具体解决方法如下:

    第一步:单击“工具”—“选项”—“常规”菜单

    第二步:在“选项”窗口“常规”栏的“设置”位置处,将“R1C1  引用样式(C)”前的对勾去掉,并单击“确定”即可。

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:16 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-13 21:36 | 显示全部楼层

工具-视图选项会禁止数据有效性

这个表里为什么不能使用数据有效性?

原因是:
工具-选项-视图-对象-全部隐藏
解决方法:
改成"全部显示"

[ 本帖最后由 lrlxxqxa 于 2010-11-26 22:18 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 16:39 , Processed in 0.045845 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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