Office 板


LINE

谢谢S大的回覆,第二个版本比较简洁,而且我测试成功,第一个版本是我原本的结构, 後来结果还是失败。不过这里我还是有几个问题想要请教: 1.item_range一开始没有定义它是二维阵列,为什麽後来又要用item_range(i,1),而且 如果不这样用还跑不出结果。 2.sub模式有逐步执行的功能,但function模式似乎没有? 没有办法看到分段执行结果真 的很难侦错。 3.在function模式中修改语法後如何使储存格中的值重新计算? 以上问题请多指教,谢谢!! ※ 引述《nazomegami (深呼吸~)》之铭言: : 软体:excel vba : 版本:2010 : 各位大大好,以下我有一个function,item_range为储存格(如A1:A10),内容为文字串, : 如"A", "B", "A", "B", "B", "C", "B", "C", "D", "B",而number_range亦为储存格 : (如B1:B10),内容为数字,如1, 2, 3, 4, 5, 6, 7, 8, 9, 10。 : 今天想要计算各item_range的项目(以取唯一值)之累加金额,并回传金额第k大(rank_ : order)之项目名称,我之前以虚拟阵列在Sub中执行都没有问题,但是改以Function就 : 执行不出结果,想要请问一下我哪里做错了?(变数定义?) 谢谢! : Function inventory_rank(item_range() As Variant, number_range() As Variant, : rank_order As Integer) As String : Dim c, d, str1, str2 : Dim ary1$(), ary2(100), ary3(100) : '求算资料笔数(阵列上限+1) : c = UBound(item_range) : '若某字串a(i)在组合字串(str)中没有出现才会被加入组合字串(str)中 : For i = 0 To c : If InStr(str1, item_range(i)) = 0 Then : str1 = str1 & "," & item_range(i) : End If : Next : '将第2位开始之字串转换为阵列 : ary1 = Split(Mid(str1, 2), ",") : '求算不重复项目之个数(阵列上限+1) : d = UBound(ary1) : '求算不重复项目之累加金额 : For i = 0 To d : ary2(i) = ary1(i) : ary3(i) = Evaluate("sum(if({""" & Join(item_range, """,""") & """}=""" : & ary1(i) & """, {" & Join(number_range, ",") & "}))") : Next : '求算第k位金额之项目名称 : inventory_rank = Application.WorksheetFunction.Index(ary2, Application. : WorksheetFunction.Match(Application.WorksheetFunction. : Large(ary3, rank_order), ary3, 0)) : End Function --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.39.54.158
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1457011995.A.2EE.html
1F:→ soyoso: 问题1,暂无找到说明;如要一维的话,可用 03/03 23:33
2F:→ soyoso: worksheetfunction.transpose([a1:a10])的方式 03/03 23:33
3F:→ soyoso: 问题2,可先设中断点,接着到资料编辑列(公式列)内按下 03/03 23:34
4F:→ soyoso: nter,就可以侦错;但设中断点处前如有错误产生时则会因无 03/03 23:34
5F:→ soyoso: 法执行到中断点,而无作用 03/03 23:34
6F:→ soyoso: 问题3,可於工作表按f9重新计算 03/03 23:38
7F:→ soyoso: 问题1,查了一下,则是这样说明到,储存格范围是栏列的二 03/03 23:51
8F:→ soyoso: 维表格,可使用二维阵列来完成。在vba中,只要将variant 03/03 23:51
9F:→ soyoso: 型态变数设为储存格范围的值,变数就会自动成为二维阵列的 03/03 23:52
10F:→ soyoso: 变数 03/03 23:52
11F:→ nazomegami: 受教了,谢谢你,我今天再试试。 03/04 06:40
12F:→ nazomegami: 我想要问一下,若阵列只有一个元素,则ubound()函数 03/04 21:14
13F:→ nazomegami: 应会回传0,但是我在测试时只要遇到一个元素的阵列就 03/04 21:14
14F:→ nazomegami: 会在ubound()函数这里停下来。 03/04 21:14
15F:→ nazomegami: 我知道只有一个元素的阵列没有什麽好比较大小的,只是 03/04 21:15
16F:→ nazomegami: 很好奇为什麽会出现这样的结果? 03/04 21:15
17F:→ soyoso: 只有一个储存格时读入时,会以字串string型态,所以会有 03/04 21:47
18F:→ soyoso: 错误而停下无法向下执行,可加上range.rows.count判断 03/04 21:48
19F:→ soyoso: https://imgur.com/hFqy6ho 03/04 21:48
20F:→ nazomegami: 了解了,谢谢你! 03/05 11:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP