ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]自动汇总的问题(新问题)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-8-19 17:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复:(冲天妖狐)能否解释一下?

本帖已被收录到知识树中,索引项:公式基础

这个公式其实不怎么复杂,只是看起来有点长。前面一部分用于排错,当出现错误时,返回空值,可先把它去掉,留下公式的主体部分:

K12=INDIRECT(TEXT(MIN(IF((MOD(ROW($2:$23),3)=2)*(COUNTIF(K$11:K11,B$2:I$23)=0),ROW($2:$23)*1000+COLUMN(B:I))),"r#c000"),)

按Ctrl+Shift+Enter结束,将公式下拉。

我们选择K18单元格的公式,看它是如何返回“台灯”的。

1、将文本特征转化为数字

选择K18单元格,在编辑栏中将如下部分的公式复制到剪贴板:
=INDIRECT(TEXT(MIN(IF((MOD(ROW($2:$23),3)=2)*(COUNTIF(K$11:K17,B$2:I$23)=0),ROW($2:$23)*1000+COLUMN(B:I))),"r#c000"),)

在工作表中选择与B2:I23相同大小的区域:N2:U23,将上一步复制的公式粘贴到编辑栏中,并在前面加上等号:

=IF((MOD(ROW($2:$23),3)=2)*(COUNTIF(K$11:K17,B$2:I$23)=0),ROW($2:$23)*1000+COLUMN(B:I))

按Ctrl+Shift+Enter结束,结果显示为:

公式中有两个条件表达式:

⑴、MOD(ROW($2:$23),3)=2:行号除以3,余数为2,即我们要返回的是“名称”,将这个条件表达式换为如下也行:

A$2:A$23="名称"

⑵COUNTIF(K$11:K17,B$2:I$23)=0:B2:I23的文本在K11:K17中不存在,这里达到不重复的目的。

如果符合两个条件,将返回一个数值,这个数值为

ROW($2:$23)*1000+COLUMN(B:I):后三位为文本所在的列号,从千位开始,前面的部分表示这个文本所在的行号。

如下图所示,左边黑色字体为K11:K17中还没有出现过的名称,右边对应位置上的数字表示这个名称所在的位置,如“台灯—2008”、“电脑—2009”、“音箱—5002”等等,数字表示“台灯”在2行8列、“音箱在5行2列”等等:


2、取出其中一个数字

上一步所取得的数字中,我们用同Min()取得其中的最小值,是2008。只有有规律,我们用其它函数也行,如按从大到小的顺序,用Max()等。

3、将行号与列与转化为单元格地址

选择K18单元格,在编辑栏按如下所示选择公式:

=INDIRECT(TEXT(MIN(IF((MOD(ROW($2:$23),3)=2)*(COUNTIF(K$11:K17,B$2:I$23)=0),ROW($2:$23)*1000+COLUMN(B:I))),"r#c000"),)

按F9,显示为

=INDIRECT("r2c008",)

即是将上一步(Min)得到的结果2008加上行列地址标志“R”、“C”,这是为满足下一步使用Indirect()函数的需要。

4、从指定地址中返回单元格的值

INDIRECT()函数的作用是将单元格地址转为引用,即返回该单元格的值,INDIRECT(“R2C008",)将返回2行8列即H2单元格的值“台灯”。

讲解到这里就结束了,如果还想加深点印象,可继续选择K19、K20单元格的公式,再从第1步开始演练一遍。

参考:

=INDIRECT("''"&$A2&"''!B2")这公式是什么意思?

[此贴子已经被作者于2008-8-19 18:01:35编辑过]

[求助]自动汇总的问题(新问题)

[求助]自动汇总的问题(新问题)

[求助]自动汇总的问题(新问题)

[求助]自动汇总的问题(新问题)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-8-19 23:31 | 显示全部楼层
真是太感谢了!解释得那么详细!收藏,认真学习!

TA的精华主题

TA的得分主题

发表于 2008-8-22 05:59 | 显示全部楼层

受益匪浅,谢谢山菊花老师

TA的精华主题

TA的得分主题

发表于 2008-8-23 23:08 | 显示全部楼层
請教山版主:
為何我在這一步驟會出錯


=INDIRECT(TEXT(MIN(IF((MOD(ROW($2:$23),3)=2)*(COUNTIF(K$11:K17,B$2:I$23)=0),ROW($2:$23)*1000+COLUMN(B:I))),"r#c000"),)

按F9,显示为

=INDIRECT("r2c008",)



變成: 
INDIRECT(#VALUE!,)

TA的精华主题

TA的得分主题

发表于 2008-8-24 12:09 | 显示全部楼层
不知是什麼原因山菊花版主的公式我不能用:text(2004,"r#c000"),產生錯誤值  #VALUE!
後來發現:text(2004,"!r#c000") ,加上" ! " 就可以了,

在"【原创】Excel 中 Text 函数应用技巧集锦"這帖子內找到這話
"
! 强制由左而右填充字符占位符。缺省值是由右而左填充字符占位符。  "     不懂!!

另:在儲存格格式>數值>自訂  不能直接設定: R#C000 ;而是先設定: A#C000 按ENTER鍵後 系統自動加上  "  !  "  ;
因此才發現山菊花版主的公式加上 " ! "就可以了

=INDIRECT(TEXT(MIN(IF((MOD(ROW($2:$23),3)=2)*(COUNTIF(K$11:K17,B$2:I$23)=0),ROW($2:$23)*1000+COLUMN(B:I))),"!r#c000"),)

按F9,显示为   =INDIRECT("r2c008",)



論壇找很久,找不到什麼解釋,有人知道是為什麼嗎?
(我用的是 繁體 office 2003 sp3 , 系統是xp sp3)

TA的精华主题

TA的得分主题

发表于 2009-11-16 21:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花老师您真棒!

TA的精华主题

TA的得分主题

发表于 2010-5-25 14:11 | 显示全部楼层
山菊花老师您好厉害!好好学习一下

TA的精华主题

TA的得分主题

发表于 2010-8-21 19:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-8-19 16:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-9-30 17:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
很强大,学习一下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-12-24 07:33 , Processed in 0.035135 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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