ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

按照一定规律的间隔提取A列数据。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-2-19 18:02 | 显示全部楼层 |阅读模式
按照一定规律的间隔:0,1,1,2,3,5,8······的顺序提取A列数据到B列同行的位置,后面的间隔等于前面两个间隔依次相加,根据A列数据的多少,依次相加到间隔不够提取为止。

TA的精华主题

TA的得分主题

发表于 2018-2-19 20:20 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
上次有误已更正!!!
D2公式
=INDEX(A:A,ROW()+(POWER((1+SQRT(5))/2,(COLUMN(A1)+ROW(A1)-1))-POWER((1-SQRT(5))/2,(COLUMN(A1)+ROW(A1)-1)))/SQRT(5)-1)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-2-19 23:13 | 显示全部楼层
我想到的可以说是懒得算的办法,思路如下:楼主要的其实是斐波拉契数列,鉴于excel一共只有1048576行,而该数列的第32个值已经达到1346269,所以只用前31个值就够了。因此
理论上公式为
B1=IF(SUM(--(ROW()=({0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040}+{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}))),A1,"")

以下是出于简短考虑,将后数组用公式代替
B1=IF(SUM(--(ROW()=({0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040}+IF(COLUMN(A:AE)-2<=0,0,COLUMN(A:AE)-2)+1))),A1,"")
数组输入,下拉。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-20 14:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2018-2-19 20:20
上次有误已更正!!!
D2公式
=INDEX(A:A,ROW()+(POWER((1+SQRT(5))/2,(COLUMN(A1)+ROW(A1)-1))-POWER((1 ...


依然不行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-20 14:09 | 显示全部楼层
mrzhang007988 发表于 2018-2-19 23:13
我想到的可以说是懒得算的办法,思路如下:楼主要的其实是斐波拉契数列,鉴于excel一共只有1048576行,而该 ...


这个公式提取的与要求不符。

TA的精华主题

TA的得分主题

发表于 2018-2-20 17:56 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2018-2-22 20:52 编辑

不是不行,二楼公式提取的数据是连续的!
您可能要求数据中间要有空格分开!
可把公式变通一下即可!
以下D2为数组公式:
=IF(INDEX(LOOKUP(ROW($A$1:$A$1000),ROW($A$1:$A$1000)+(POWER((1+SQRT(5))/2,ROW($A$1:$A$1000))-POWER((1-SQRT(5))/2,ROW($A$1:$A$1000)))/SQRT(5)-1,ROW($A$1:$A$1000)+(POWER((1+SQRT(5))/2,ROW($A$1:$A$1000))-POWER((1-SQRT(5))/2,ROW($A$1:$A$1000)))/SQRT(5)-1),ROW(A1))=ROW(A1),A2,"")
重要提示:以上数组公式将占用大量内存,如果把单元格区域扩展过大,将造成机器瘫痪!!!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-2-20 19:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
13061057983 发表于 2018-2-20 14:09
这个公式提取的与要求不符。

用第2个公式得数组输入,就是在b1单元格粘贴公式,然后同时按下ctrl+shift+enter三键同时输入
给你发一个我的实验,第1个公式写在F列,第2个公式写在G列
QQ截图20180220190452.jpg

间隔提取A列数据.zip

19.04 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-21 13:20 | 显示全部楼层
lss001 发表于 2018-2-19 20:20
上次有误已更正!!!
D2公式
=INDEX(A:A,ROW()+(POWER((1+SQRT(5))/2,(COLUMN(A1)+ROW(A1)-1))-POWER((1 ...

这个是按多少间隔提取的?

TA的精华主题

TA的得分主题

发表于 2018-2-21 14:10 来自手机 | 显示全部楼层
13061057983 发表于 2018-2-21 13:20
这个是按多少间隔提取的?

可以在A列输入不重复数据,
在B列输入公式查一下便知!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 16:03 , Processed in 0.037838 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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