作者Jerome0511 (Jerome)
看板Office
标题[问题] 回圈取笔数重复值疑问
时间Wed Jul 24 18:36:03 2019
(若是和其他不同软体互动之问题 请记得一并填写)
软体:EXCEL
版本:2010
目前要写一段程式,遇到的问题是
当i=1 k =1时 =>j=2 to 26.1 ->25笔资料
i=1 k=2时 =>j=26.1 to 50.2----->需排除=26.1,
但资料等分笔数每个区间要维持25笔
i=1 k=3时 =>j=50.2 to 74.3----->需排除=50.2,
但资料等分笔数每个区间要维持25笔资料
以此类推
这样在计算平均值的时候,j=26.1 j=50.2这两个位置会被加总计算一次
i=1 k=1 加总时j=2 到j=26.1的列数加总,最後一笔资料列为j=26.1
i=1 k=2 加总第一笔资料列为j=26.1到50.2
i=1 k=3 加总第一笔为50.2到74.3的列数
1.请问要怎麽避免,计算加总时,避免加总重复计算的列数排除j=26.1和j=50.2?
2.计算回圈时j=26.1 这个部分在程式中是取26这格
那如果是26.8就会取27这格四舍五入吗?
请问int取整数是这样写吧? Cells(int(j),6)
3.平均回圈笔数是7.3笔,回圈计算时是会自动进位用8笔去增加列数,但遇到的问题是
实际情况
第一等份2~9列=>8等份
第二等份10~17列=>8等份
第三等份18~25列=>8等份
第四等份26~33列=>8等份
=>这部份程式计算时由於小数点(7.3*4=29.2进位成30)
程式计算的关系会变成25~32笔,
造成第三等份的第25列与第四等份的25列重复计算了,这部分要怎麽处理呢?
------------------------------------------------------
Start(1) = 2 代表资料在第二列
Start(2) = 243 代表资料在第243列
Start(3) = 501
Start(4) = 763
Start(5) = 1040
Start(6) = 1325
Start(7) = 1614
Start(8) = 1915
Start(9) = 2226
Start(10) = 2543
For i = 1 To 10 ----10群资料
For k = 1 To 5 ----代表每一群资料分成5等分
Sum1 = 0
Sum2 = 0
Count = 0
For j = (Start(i) + (Start(i + 1) - Start(i)) * 0.1 * (k - 1)) - (k > 1) To
(Start(i) + (Start(i + 1) - Start(i)) * 0.1 * k) - ( k > 1)
Sum1 = sum1 + Cells(j, 6)
Sum2 = Sum2 + Cells(j, 7)
Count = Count + 1
Next j
Cells(i + 2, 7 + k) = sum1 / Count
Cells(i + 2, 8 + k) = Sum2 / Count
Next k
Next i
--------------------------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.42.54.42 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1563964565.A.858.html
1F:→ soyoso: 问题1.所以第二次起(k为2,3,4,5)时,j的第一笔26.1+1(跳到07/24 18:52
2F:→ soyoso: 第二笔)吗?07/24 18:52
3F:→ soyoso: 如果是的话(...*(k-1)) - (k>1)07/24 18:53
※ 编辑: Jerome0511 (111.71.38.179 台湾), 07/24/2019 18:56:06
4F:→ soyoso: 问题2,cells内的变数j会四舍五入,cells(26.8,6)取的是储 07/24 18:57
5F:→ soyoso: 存格f27 07/24 18:57
6F:→ soyoso: 如果要取26的话,配合int取整数 07/24 18:58
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/24/2019 22:52:45
7F:→ Jerome0511: 不好意思,我有详细描述问题了,再麻烦你谢谢 07/24 22:53
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/24/2019 22:54:44
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/24/2019 22:55:50
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/24/2019 22:57:41
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/24/2019 22:58:16
8F:→ soyoso: 就回文(...*(k-1))-(k>1),j会是27.1和j=51.2来排除26.1和 07/24 23:12
9F:→ soyoso: 50.2 07/24 23:12
10F:→ soyoso: int写法,如原po内所写cells(int(j),6) 07/24 23:14
11F:→ Jerome0511: 请问-(K>1)他是怎麽运算方式是什麽? 07/25 09:11
12F:→ Jerome0511: (.. *0.1*(k-1))-(k>1)to(..* 0.1 * k) -(k>1) 前後 07/25 09:12
13F:→ Jerome0511: 都要加-(K>1)才能保持 每一等分相同的笔数吧? 07/25 09:13
14F:→ soyoso: (k>1)为真,在运算後为-1,减-1的话为+1的意思 07/25 09:20
15F:→ soyoso: 回圈j=26.1到50.2 step没设,就是每执行一次回圈就加1 07/25 09:22
16F:→ soyoso: 所以要排除26.1而是从27.1的话,就是我回文写的 07/25 09:23
17F:→ soyoso: 至於是否前後要加,这要由原po依实际要的去判断 07/25 09:24
18F:→ soyoso: 我只是依内文要的"排除26.1和50.2"来回文而已 07/25 09:25
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/25/2019 12:04:16
19F:→ Jerome0511: 谢谢,明白了,再多一个问题第3点,再麻烦了 07/25 12:04
20F:→ soyoso: 问题3不太了解,7.3*4=29.2进位成30,程式计算变成25~32 07/25 12:20
21F:→ soyoso: 如何计算? 07/25 12:20
※ 编辑: Jerome0511 (114.42.54.42 台湾), 07/25/2019 14:24:16
23F:→ soyoso: 所以是执行程序 Computing_every_season_10等分 吗? 07/25 14:46
24F:→ Jerome0511: 对的 07/25 14:54
25F:→ soyoso: 但测试执行後g3:p5并不同所提供的值 07/25 14:55
27F:→ soyoso: 另外每天都要十等分吗?因为以10/1来看笔数73,如果每等分 07/25 14:59
28F:→ soyoso: 都8个储存格来平均的话,那第10等分时就只会有1笔而已 07/25 15:00
30F:→ Jerome0511: 对哦 每天10等份 最後一等份没关系 1笔也可以 07/25 15:04
31F:→ soyoso: 但我把笔数假设是11好了,那如果roundup平均笔数则会是2 07/25 15:06
32F:→ soyoso: 那7~10等分就不存在了 07/25 15:06
33F:→ soyoso: 或是笔数72,roundup回传一样8,那第10笔分也没有储存格可 07/25 15:09
34F:→ soyoso: 以平均 07/25 15:09
35F:→ soyoso: 所以这方面平均笔数原po再看看是要几笔 07/25 15:10
36F:→ soyoso: 1.保持以roundup来取得平均笔数,但这有可以不满十等分, 07/25 15:19
37F:→ soyoso: 举例就如上 07/25 15:19
38F:→ soyoso: 2.以int来取平均笔数,多出的笔数,如10/1有73笔,int来取 07/25 15:19
39F:→ soyoso: 平均笔数整数为7,余3,而这3笔则将第1~3等分各增加1,也 07/25 15:19
40F:→ soyoso: 就是第1~3取8个储存格,4~10取7个储存格来平均 07/25 15:19
41F:→ Jerome0511: 用1的方式 07/25 15:20
44F:→ soyoso: 变数s、e和cnt忘了宣告,请自行宣告,看要integer或long再 07/25 15:53
45F:→ soyoso: 依实际情况自行调整 07/25 15:53
47F:→ Jerome0511: 笔数是70笔 10等份为每份7笔,但程式会进位变成8笔 07/25 18:51
48F:→ Jerome0511: 这部分要怎麽排除呢? 07/25 18:51
49F:→ soyoso: 这方面以worksheetfunction.roundup方式排除试试 07/25 19:40
50F:→ soyoso: 或是原本iint内e灭s的部分再多加上减1 07/25 19:51
51F:→ Jerome0511: 在这里-1 Int((e - s) / 10) 不就全部都会扣掉1吗? 07/25 23:09
52F:→ soyoso: 是e-s内减,外面还是保留加1的部分 07/25 23:18
53F:→ Jerome0511: Int((e - s - 1) / 10) + 1 这样吗?试过了还是会进位 07/25 23:22
54F:→ soyoso: 假设e-s是61~70再减1,就是60~69,除10,取整数就是6 07/25 23:23
55F:→ soyoso: 6+1=7,不就符合是7笔了;那80笔,减1,79/10取整为7+1=8 07/25 23:24
57F:→ soyoso: 当然,start(3)=143,start(4)=216,216-143=73笔 07/25 23:37
58F:→ soyoso: 73笔就会是8,要70笔,start(4)要改为213 07/25 23:38
59F:→ soyoso: 改为213且e-s-1下,档案内红字上下是可以相同的 07/25 23:42
61F:→ Jerome0511: 谢谢你 可以了 07/28 12:02