ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 有志于成为数组公式高手的不要错过(功力修炼)(胡剑开课了...)

  [复制链接]

TA的精华主题

TA的得分主题

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

哈哈

本帖已被收录到知识树中,索引项:数组公式
终于静下心来,看懂一楼的例子了.好高兴啊.
=--RIGHT(SMALL(ROW(A2:G9)*1000+A2:G9,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7),3)是以文本的形式将扩大1000倍的数还原回去.(ROW($A$2:$G$9)-2)*7)里面的-2,*7也明白了.就是small的参数,为了使参数K的值从1到56.又要符合7*8的格子


也可以使用-ROW(A2:G9)*1000的形式还原扩大的数.

TA的精华主题

TA的得分主题

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

为什么要用这个

我写了个简单的,不用按行排序,总体排序,意思是差不多的,代码如下:=SMALL(A1:G8,(ROW(A1:A8)-1)*7+COLUMN(A:G)),后面这块,SMALL的参数K,为什么必须写成(ROW(A1:A8)-1)*7+COLUMN(A:G),而不能写成(1:56)?请高手解答一下.谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-22 14:32 | 显示全部楼层
数组,有组织的数据,其特点在于每个元素都有具体的位置,即可以用行列来表示。第一个形式是8行*7列的数组,第二个1:56  是垂直方向的一维数组,有56个元素,这个是区别。

参数驱动,返回值的数组结构也是由驱动参数来决定的。上面的驱动参数(K)的数组结构不同会导致返回值的结构不同...

TA的精华主题

TA的得分主题

发表于 2011-6-22 20:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好东西,慢慢学。

TA的精华主题

TA的得分主题

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

还是一个为什么

我也试着将8行*7列的数据变形成了14行*4列的数据,并按从小到大的顺序排列了.例子还是一楼的那个,只是不用每行排序,是总体排序.变形成14行*4列的公式如下:=SMALL(A1:G8,(ROW(A1:A14)-1)*4+COLUMN(A:D)).这个没什么问题.基本理解了版主的意思.对于small的第二个参数,还是有点疑惑.知道这样能控制数组的形态,使之可以成为8*7或14*4或23*2等.但是,这个参数里是一个+号连接的,加起来还是一个具体的数.怎么实现的行列数控制?原理还是不清楚,只是知道了可以这样可以达到目的.
感谢版主的指导.

TA的精华主题

TA的得分主题

发表于 2011-6-23 08:48 | 显示全部楼层
啃完step by step,来啃这个贴了

TA的精华主题

TA的得分主题

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

版主还没来巡视?

三天了,版主还没来看看.我的问题还没解决.(1106楼.)

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-27 09:49 | 显示全部楼层
原帖由 zoubo604 于 2011-6-26 15:53 发表
三天了,版主还没来看看.我的问题还没解决.(1106楼.)


这个问题问得也很到位,呵呵。

你先试试这些公式:
  1. row(1:4)+10
复制代码
  1. row(1:4)+{10,100}
复制代码
数组公式哟,呵呵。
将数组公式就要明白对应的数组运算是哪个?这里就是加号,另外要明白驱动参数是哪个? 第一个公式是row(1:4),所以依次执行4个加法运算;贵在依次执行,是一个遍历式循环。
第二个公式两个操作数都是数组,并且数组的方向不同,这个时候是两次循环了,row(1:4)和10进行一个加法运算,然后row(1:4)和100再执行4个加法运算。布局上你可以理解为一个表,有行标题有列标题,中间的内容是由行列共同来决定的。慢慢理解一下会明白的,呵呵

TA的精华主题

TA的得分主题

发表于 2011-6-27 20:47 | 显示全部楼层

谢谢了

看完你的解答,使我一下明白了许多.我又想起了线性代数里的矩阵,的确.矩阵的行和列,是由+号两端的行和列共同决定的.理解了这个,理解数组公式又要清晰多了.太感谢你了.没人解释和指导,几天也想不出答案.有你这样细致的讲解,太好了.

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-28 11:59 | 显示全部楼层
呵呵,就数组来说,有时需要看成一个整块,有时又需要打散来以元素为颗粒来对待,那怎么个区分呢?紧紧抓住参数或操作数的类型。比如说SMALL函数第一个参数类型是ARRAY,第二参数是K(数值),因此 small({1;2;3},{1;2;3})两组数组参数参与运算时颗粒是不同的,我想你现在应该能明白这个了,呵呵
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 09:27 , Processed in 0.045889 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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