[問題] 迴圈取筆數重複值疑問

看板Office作者 (Jerome)時間5年前 (2019/07/24 18:36), 5年前編輯推噓0(0061)
留言61則, 2人參與, 5年前最新討論串1/1
(若是和其他不同軟體互動之問題 請記得一併填寫) 軟體: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://www.ptt.cc/bbs/Office/M.1563964565.A.858.html

07/24 18:52, 5年前 , 1F
問題1.所以第二次起(k為2,3,4,5)時,j的第一筆26.1+1(跳到
07/24 18:52, 1F

07/24 18:52, 5年前 , 2F
第二筆)嗎?
07/24 18:52, 2F

07/24 18:53, 5年前 , 3F
如果是的話(...*(k-1)) - (k>1)
07/24 18:53, 3F
※ 編輯: Jerome0511 (111.71.38.179 臺灣), 07/24/2019 18:56:06

07/24 18:57, 5年前 , 4F
問題2,cells內的變數j會四捨五入,cells(26.8,6)取的是儲
07/24 18:57, 4F

07/24 18:57, 5年前 , 5F
存格f27
07/24 18:57, 5F

07/24 18:58, 5年前 , 6F
如果要取26的話,配合int取整數
07/24 18:58, 6F
※ 編輯: Jerome0511 (114.42.54.42 臺灣), 07/24/2019 22:52:45

07/24 22:53, 5年前 , 7F
不好意思,我有詳細描述問題了,再麻煩你謝謝
07/24 22:53, 7F
※ 編輯: 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

07/24 23:12, 5年前 , 8F
就回文(...*(k-1))-(k>1),j會是27.1和j=51.2來排除26.1和
07/24 23:12, 8F

07/24 23:12, 5年前 , 9F
50.2
07/24 23:12, 9F

07/24 23:14, 5年前 , 10F
int寫法,如原po內所寫cells(int(j),6)
07/24 23:14, 10F

07/25 09:11, 5年前 , 11F
請問-(K>1)他是怎麼運算方式是什麼?
07/25 09:11, 11F

07/25 09:12, 5年前 , 12F
(.. *0.1*(k-1))-(k>1)to(..* 0.1 * k) -(k>1) 前後
07/25 09:12, 12F

07/25 09:13, 5年前 , 13F
都要加-(K>1)才能保持 每一等分相同的筆數吧?
07/25 09:13, 13F

07/25 09:20, 5年前 , 14F
(k>1)為真,在運算後為-1,減-1的話為+1的意思
07/25 09:20, 14F

07/25 09:22, 5年前 , 15F
迴圈j=26.1到50.2 step沒設,就是每執行一次迴圈就加1
07/25 09:22, 15F

07/25 09:23, 5年前 , 16F
所以要排除26.1而是從27.1的話,就是我回文寫的
07/25 09:23, 16F

07/25 09:24, 5年前 , 17F
至於是否前後要加,這要由原po依實際要的去判斷
07/25 09:24, 17F

07/25 09:25, 5年前 , 18F
我只是依內文要的"排除26.1和50.2"來回文而已
07/25 09:25, 18F
※ 編輯: Jerome0511 (114.42.54.42 臺灣), 07/25/2019 12:04:16

07/25 12:04, 5年前 , 19F
謝謝,明白了,再多一個問題第3點,再麻煩了
07/25 12:04, 19F

07/25 12:20, 5年前 , 20F
問題3不太了解,7.3*4=29.2進位成30,程式計算變成25~32
07/25 12:20, 20F

07/25 12:20, 5年前 , 21F
如何計算?
07/25 12:20, 21F
※ 編輯: Jerome0511 (114.42.54.42 臺灣), 07/25/2019 14:24:16

07/25 14:42, 5年前 , 22F
紅字代表手算與程式算有差異https://reurl.cc/q7Z1E
07/25 14:42, 22F

07/25 14:46, 5年前 , 23F
所以是執行程序 Computing_every_season_10等分 嗎?
07/25 14:46, 23F

07/25 14:54, 5年前 , 24F
對的
07/25 14:54, 24F

07/25 14:55, 5年前 , 25F
但測試執行後g3:p5並不同所提供的值
07/25 14:55, 25F

07/25 14:55, 5年前 , 26F

07/25 14:59, 5年前 , 27F
另外每天都要十等分嗎?因為以10/1來看筆數73,如果每等分
07/25 14:59, 27F

07/25 15:00, 5年前 , 28F
都8個儲存格來平均的話,那第10等分時就只會有1筆而已
07/25 15:00, 28F

07/25 15:03, 5年前 , 29F
不好意思 再一次https://reurl.cc/ExXVK
07/25 15:03, 29F

07/25 15:04, 5年前 , 30F
對哦 每天10等份 最後一等份沒關係 1筆也可以
07/25 15:04, 30F

07/25 15:06, 5年前 , 31F
但我把筆數假設是11好了,那如果roundup平均筆數則會是2
07/25 15:06, 31F

07/25 15:06, 5年前 , 32F
那7~10等分就不存在了
07/25 15:06, 32F

07/25 15:09, 5年前 , 33F
或是筆數72,roundup回傳一樣8,那第10筆分也沒有儲存格可
07/25 15:09, 33F

07/25 15:09, 5年前 , 34F
以平均
07/25 15:09, 34F

07/25 15:10, 5年前 , 35F
所以這方面平均筆數原po再看看是要幾筆
07/25 15:10, 35F

07/25 15:19, 5年前 , 36F
1.保持以roundup來取得平均筆數,但這有可以不滿十等分,
07/25 15:19, 36F

07/25 15:19, 5年前 , 37F
舉例就如上
07/25 15:19, 37F

07/25 15:19, 5年前 , 38F
2.以int來取平均筆數,多出的筆數,如10/1有73筆,int來取
07/25 15:19, 38F

07/25 15:19, 5年前 , 39F
平均筆數整數為7,餘3,而這3筆則將第1~3等分各增加1,也
07/25 15:19, 39F

07/25 15:19, 5年前 , 40F
就是第1~3取8個儲存格,4~10取7個儲存格來平均
07/25 15:19, 40F

07/25 15:20, 5年前 , 41F
用1的方式
07/25 15:20, 41F

07/25 15:48, 5年前 , 42F
07/25 15:48, 42F

07/25 15:50, 5年前 , 43F
07/25 15:50, 43F

07/25 15:53, 5年前 , 44F
變數s、e和cnt忘了宣告,請自行宣告,看要integer或long再
07/25 15:53, 44F

07/25 15:53, 5年前 , 45F
依實際情況自行調整
07/25 15:53, 45F

07/25 16:05, 5年前 , 46F
07/25 16:05, 46F

07/25 18:51, 5年前 , 47F
筆數是70筆 10等份為每份7筆,但程式會進位變成8筆
07/25 18:51, 47F

07/25 18:51, 5年前 , 48F
這部分要怎麼排除呢?
07/25 18:51, 48F

07/25 19:40, 5年前 , 49F
這方面以worksheetfunction.roundup方式排除試試
07/25 19:40, 49F

07/25 19:51, 5年前 , 50F
或是原本iint內e滅s的部分再多加上減1
07/25 19:51, 50F

07/25 23:09, 5年前 , 51F
在這裡-1 Int((e - s) / 10) 不就全部都會扣掉1嗎?
07/25 23:09, 51F

07/25 23:18, 5年前 , 52F
是e-s內減,外面還是保留加1的部分
07/25 23:18, 52F

07/25 23:22, 5年前 , 53F
Int((e - s - 1) / 10) + 1 這樣嗎?試過了還是會進位
07/25 23:22, 53F

07/25 23:23, 5年前 , 54F
假設e-s是61~70再減1,就是60~69,除10,取整數就是6
07/25 23:23, 54F

07/25 23:24, 5年前 , 55F
6+1=7,不就符合是7筆了;那80筆,減1,79/10取整為7+1=8
07/25 23:24, 55F

07/25 23:28, 5年前 , 56F
照理說是這樣但實際好像不是https://reurl.cc/vY0Zy
07/25 23:28, 56F

07/25 23:37, 5年前 , 57F
當然,start(3)=143,start(4)=216,216-143=73筆
07/25 23:37, 57F

07/25 23:38, 5年前 , 58F
73筆就會是8,要70筆,start(4)要改為213
07/25 23:38, 58F

07/25 23:42, 5年前 , 59F
改為213且e-s-1下,檔案內紅字上下是可以相同的
07/25 23:42, 59F

07/25 23:42, 5年前 , 60F

07/28 12:02, 5年前 , 61F
謝謝你 可以了
07/28 12:02, 61F
文章代碼(AID): #1TE3ILXO (Office)
文章代碼(AID): #1TE3ILXO (Office)