ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 关于{一列数列}转化为{矩阵数列}的方法探讨

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-7-23 22:55 | 显示全部楼层 |阅读模式
需要达到的效果如图所示:
1.png
条件一:表格中A列B列的数剧可自由无限增加,从而矩阵会随之改变;
条件二:表格中绿色单元格内的数值可以任意修改,从而矩阵会随之改变:
2.png
表格在附件里下载。
数列矩阵转换_出题.rar (8.75 KB, 下载次数: 19)

尽量不做伸手党,所以我自己也作出了一种解题方式,稍候我会在下面的楼层上传,希望也有大神能帮我把算法优化,感谢感谢!!!

点评

可以参考学习一下胡剑老师的贴子  发表于 2019-7-24 13:53

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-23 23:00 | 显示全部楼层
本帖最后由 水和米 于 2019-7-24 11:55 编辑

数列矩阵转换_方式1.rar (22.78 KB, 下载次数: 12)
这是我个人关于这个题目的解答答案,期待有大神能帮我优化一下我所运用的函数公式~~~

  1. =IF((COLUMNS($A2:A2)-1)<$E$16,IF(ROWS(D17:D$17)<ROUNDUP(COUNT($A:$A)/$E$16,0)+IF($E$16-MOD(COUNT($A:$A),$E$16)>=ROUNDUP(COUNT($A:$A)/$E$16,0),IF(COLUMNS($D17:D17)<=MOD(COUNT($A:$A)-1,$E$16)+1,1,0),1),OFFSET($A$2,ROWS(D17:D$17)-1+(COLUMNS($D17:D17)-1)*ROUNDUP(COUNT($A:$A)/$E$16,0)-IF($E$16-MOD(COUNT($A:$A),$E$16)>=ROUNDUP(COUNT($A:$A)/$E$16,0),IF(COLUMNS($D17:D17)>MOD(COUNT($A:$A)-1,$E$16)+1,COLUMNS($D17:D17)-MOD(COUNT($A:$A)-1,$E$16)-2,0),),),),)
复制代码

这个公式繁琐的见不了人
以及期待更优秀高效简洁的解答方式~~~感谢~~~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-24 08:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哈哈,大家早上好,希望有大神能指点一二~

TA的精华主题

TA的得分主题

发表于 2019-7-24 10:08 | 显示全部楼层
=OFFSET(OFFSET($A$1,ROW(A1)*$E$8-$E$8,),(MOD(COLUMN(A1)-1,$E$8)+1),)想了一个效果3的,数学不好,玩不动

TA的精华主题

TA的得分主题

发表于 2019-7-24 10:31 | 显示全部楼层
PQ参考解法~1-4
题目最好结合实际情景,这样才有解题的价值
QQ图片20190724102807.png

数列矩阵转换.rar

25.45 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-24 11:53 | 显示全部楼层
本帖最后由 水和米 于 2019-7-25 10:43 编辑
deadzlq 发表于 2019-7-24 10:31
PQ参考解法~1-4
题目最好结合实际情景,这样才有解题的价值

有实际应用价值的,比如自动生成货物的清单:
太平洋c.jpg

TA的精华主题

TA的得分主题

发表于 2019-7-24 13:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
N2 右拉 下拉=IF((COLUMN(A1)>MOD(COUNTA($A:$A)-1,$C$2))*(ROW(A1)>INT((COUNTA($A:$A)-1)/$C$2))+(ROW(A1)>ROUNDUP((COUNTA($A:$A)-1)/$C$2,))+(COLUMN(A1)>$C$2),"",OFFSET($A$1,(COLUMN(A1)-1)*ROUNDUP((COUNTA($A:$A)-1)/$C$2,)+ROW(A1)-TEXT(COLUMN(A1)-MOD(COUNTA($A:$A)-1,$C$2)-1,"0;!0")*(MOD(COUNTA($A:$A)-1,$C$2)>0),))
5885.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-24 14:20 | 显示全部楼层
hcm19522 发表于 2019-7-24 13:57
N2 右拉 下拉=IF((COLUMN(A1)>MOD(COUNTA($A:$A)-1,$C$2))*(ROW(A1)>INT((COUNTA($A:$A)-1)/$C$2))+(ROW(A1 ...

可以有文件上传来分享一下吗

TA的精华主题

TA的得分主题

发表于 2019-7-24 14:43 | 显示全部楼层
水和米 发表于 2019-7-24 14:20
可以有文件上传来分享一下吗

~~~~~~~~~~~~

转置 末行优先空缺 (5885).rar

9.54 KB, 下载次数: 7

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-24 16:00 | 显示全部楼层

感谢感谢,从兄弟你的函数里我汲取到了我不曾掌握的知识,下面允许我在这里做一个小笔记:
  1. =IF((COLUMN(A1)>MOD(COUNTA($A:$A)-1,$C$2))*(ROW(A1)>INT((COUNTA($A:$A)-1)/$C$2))+(ROW(A1)>ROUNDUP((COUNTA($A:$A)-1)/$C$2,))+(COLUMN(A1)>$C$2),"",OFFSET($A$1,(COLUMN(A1)-1)*ROUNDUP((COUNTA($A:$A)-1)/$C$2,)+ROW(A1)-TEXT(COLUMN(A1)-MOD(COUNTA($A:$A)-1,$C$2)-1,"0;!0")*(MOD(COUNTA($A:$A)-1,$C$2)>0),))
复制代码
首来用“自创”的一个长公式分析方式一下辣么辣么长的公式:
  1. =IF(a,"",b)

  2. a=(c)*(d)+(e)+(f)
  3. c=COLUMN(A1)>MOD(COUNTA($A:$A)-1,$C$2)
  4. d=ROW(A1)>INT((COUNTA($A:$A)-1)/$C$2)
  5. e=ROW(A1)>ROUNDUP((COUNTA($A:$A)-1)/$C$2,)
  6. f=COLUMN(A1)>$C$2

  7. b=OFFSET($A$1,g+ROW(A1)-h*(i),)
  8. g=(COLUMN(A1)-1)*ROUNDUP((COUNTA($A:$A)-1)/$C$2,)
  9. h=TEXT(COLUMN(A1)-MOD(COUNTA($A:$A)-1,$C$2)-1,"0;!0")
  10. i=MOD(COUNTA($A:$A)-1,$C$2)>0
复制代码
这样就方便阅读理解了。


从这个公式里,我需要汲取的营养有:
1、今后在IF函数里要多多运用乘法和加法进行逻辑运算;
2、从我分解的”i=MOD(COUNTA($A:$A)-1,$C$2)>0”里得到启发,不在IF语句里,也是可以用了逻辑运算的;
3、“h=TEXT(COLUMN(A1)-MOD(COUNTA($A:$A)-1,$C$2)-1,"0;!0")”里,新学到了TEXT函数的(0;0;0;!0)的妙用,比如这里把数值转换成了自然数。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 05:21 , Processed in 0.038645 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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