質問: excel 巨集程式問題 大家好: 以下是在excel 中建立的數值資料,第一欄是「日期」,第二欄是「數值」,第三欄是記錄計算的結果。 我想在excel中寫個巨集,執行這個巨集計算結果之後,把結果寫在「計算」這一欄的一個儲存格。 我把問題詳述如下: 程式自動搜尋第二欄的網底, 由淺藍變為玫瑰紅時,第一個網底為淺藍的儲存格(b6)減去第一個網底變為玫瑰紅的儲存格(b20),相減的結果再乘以10,...... 運算的公式如下: =(1*(b6-b20)*10)-(1*2*23)-(1*b6*10*0.01)-(1*b20*10*0.01) 公式運算的最終結果寫在b20旁的c20,並把c20的網底變為淺黃色。 程式再繼續搜尋b20以下儲存格的網底, 由玫瑰紅變為淺藍時,第一個網底變為淺藍的儲存格(b42)減去第一個網底變為玫瑰紅的儲存格(b20),相減的結果再乘以10,...... 運算的公式如下: =(1*(b42-b20)*10)-(1*2*23)-(1*b42*10*0.01)-(1*b20*10*0.01) 公式運算的最終結果寫在b42旁的c42,並把c42的網底變為淺黃色。 程式再繼續搜尋b42以下儲存格的網底, 由淺藍變為玫瑰紅時,...... 程式會一直往下搜尋下去,直到第二欄無資料為止。 謝謝各位大大的幫忙! 麻煩各位大大在程式中加上一些註解,謝謝! (不好意思!我不知道如何將 excel 的網底顏色也貼上來。) 1日期 數值 計算 22012/5/14100 32012/5/1598 42012/5/1695 52012/5/1794 62012/5/1890 72012/5/2185 82012/5/2282 92012/5/2380 102012/5/2477 112012/5/2575 122012/5/2872 132012/5/2968 142012/5/3067 152012/5/3165 162012/6/164 172012/6/455 182012/6/556 192012/6/658 202012/6/760 212012/6/862 222012/6/1164 232012/6/1265 242012/6/1370 252012/6/1475 262012/6/1577 272012/6/1880 282012/6/1982 292012/6/2081 302012/6/2180 312012/6/2282 322012/6/2585 332012/6/2688 342012/6/2790 352012/6/2892 362012/6/2995 372012/7/299 382012/7/3102 392012/7/4106 402012/7/5108 412012/7/6105 422012/7/9102 432012/7/10103 442012/7/11104 452012/7/12102 462012/7/13100 472012/7/1698 482012/7/1795 492012/7/1892 502012/7/1988 512012/7/2085 522012/7/2387 532012/7/2485 542012/7/2584 552012/7/2682 562012/7/2780 572012/7/3078 582012/7/3175 592012/8/170 602012/8/368 612012/8/666 622012/8/762 632012/8/860 642012/8/955 652012/8/1052 662012/8/1350 672012/8/1453
回答: sub test0816_1() dim xr as range, xc&, uf&, x, y for each xr in range("b1", [b65536].end(xlup)) xc = xr.interior.colorindex if (xc <> 37 and xc <> 38) or xc = uf then goto 101 y = xr 2012-08-16 14:40:41 補充: if uf > 0 then xr(1, 2) = (x - y) * 10 - 46 - (x + y) * 0.1 xr(1, 2).interior.colorindex = 36 end if uf = xc x = xr 101: next end sub 2012-08-20 18:50:56 補充: excel vba.逐格檢測〔儲存格底色〕,在顏色變換時,進行計算 <.准提部林.> ------------------------------- ■程式碼: sub 執行() dim xr as range, xc&, uf&, x, y for each xr in range("b1", [b65536].end(xlup)) xc = xr.interior.colorindex if (xc <> 37 and xc <> 38) or xc = uf then goto 101 y = xr if uf > 0 then xr(1, 2) = x + y '計算公式請自行設定 xr(1, 2).interior.colorindex = 36 end if uf = xc: x = xr 101: next beep end sub ------------------------------- <範例檔>: http://www.funp.net/63935 ------------------------------- 2012-08-21 09:51:14 補充: xc 是每一格的〔色號〕 uf 是上一次記錄下來的〔色號〕,起始值為0 將範例檔這一行 101: next 改成 101: xr(1, 3) = uf: next 執行後,從d欄即可看出其變化! 2012-08-21 09:54:06 補充: 另外,資料第一列若為〔標題〕, for each xr in range("b1", [b65536].end(xlup)) 請改為: for each xr in range("b2", [b65536].end(xlup))