返回列表 上一主題 發帖

[發問] 請教要如何使用 VBA 判別不規則儲存格的辦法2

本帖最後由 ML089 於 2013-12-6 12:31 編輯

回復 1# c_c_lai

請問檔案案中有圖片,如何將圖片的圖形轉成 0, 255數字

算0的面積,我初步算完有381組(也不知道對不對還沒有驗算),其中有很多組是 0,需要把0組過濾掉嗎?
有標準答案可以給我驗證媽?
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 14# c_c_lai

請問連在一起得原則是什麼,請看圖中說明

{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 19# c_c_lai
回復 13# Hsieh
回復 4# stillfish00

我做3個標準圖型及統計數量以供大家測試用
我的程式也採用遞迴呼叫方式處理,原圖形執行時間大概2~3秒就能完成。
這程式寫得很慢很久,每個指令都是從網路上或參考大家的程式慢慢堆出來的,一共花了7~8小時才完成,也滿有成就感,請有語法待改進之處請大家多多指教。
下方為測試檔案
面積大小分佈統計_ML089.rar (139.12 KB)
   
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 22# ML089
Timer使用的怪怪的,有時瞬間執行完成卻顯示9.X秒,Timer及TimeE計算出來也差很多(1.5秒及1.0秒),幾乎差1.5倍,大家可以幫我看看嗎?
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 22# ML089

這是DEBUD對話框輸入1時,可以產生陣列處理後的資料以供查核

   
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 26# stillfish00
哈哈,內行人一看就找出問題,我竟然怪timer函數怪怪的,感謝
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 25# c_c_lai

Frequency 可以按F1看看說明。(以前我一開始看也不懂,這是正常的,多做題目才能慢慢了解)

用舉例說明
例一:有一群數字 {1,2,3,4,5,6,7,8,9},要求3個範圍各有多少數字 1~2、3~7、8~9,公式如下
=FREQUENCY({1,2,3,4,5,6,7,8,9},{2,7,9}) = {2;4;2;0},最後0是指大於9之數


用舉例說明
例二:例如以#22程式中下面部分程式來說明
   '  ↓ 計算每組個數。 注意! Frequency 回傳 i + 1 組,所先將 i - 1
    Bins_array = Application.Evaluate("Row(1:" & i - 1 & ")")
    ArrN = Application.Frequency(Arr, Bins_array)
    MaxN = Application.Max(ArrN)

    '  ↓ 統計每組個數。 注意! Frequency 回傳 i + 1 組,所先將 MaxN - 1
    Bins_array = Application.Evaluate("Row(1:" & MaxN - 1 & ")")
    ArrF = Application.Frequency(ArrN, Bins_array)

說明
   '  ↓ 計算每組個數。
1. 將每組連續0進行序號編碼放在陣列中,陣列資料例如下
   Arr={1,1,.."X" ,2,.."X" ,3,3,.."X" ,4,4,.."X" ,5,5,5,.."X" ,6,.."X" ,7,.."X" ,8,8,.."X" ,9,9,9,.."X"}
2. 我想求 1有幾個,2有幾個....9有幾個,可以用下列公式
   ArrN = FREQUENCY(Arr,{1,2,3,4,5,6,7,8}) = {2;1;2;2;3;1;1;2;3}
   回傳值表示為 1有3個、2有1個、3有2個、4有2個、5有3個、6有1個、7有1個、8有2個、9有3個
3. MaxN = Max({2;1;2;2;3;1;1;2;3}) = 3,所有組數中最大個數為 3 (後面計算要用)
       

    '  ↓ 統計每組個數。
4. 上面已經計算出每組的個數陣列 ArrN 及最大個數 MaxN,要統計各個數有幾組,公式如下
   ArrF = FREQUENCY(ArrN,{1,2,...,MaxN-1}) = {{2;1;2;2;3;1;1;2;3},{1,2}) = {3;4;2}       
   回傳值表示為 1個有3組、2個有4組、3個有2組

5. 公式中 Bins_array = Application.Evaluate("Row(1:" & i - 1 & ")") 就是要產生 {1,2,...i-1} 序號


6. 其他說明就要靠 GOOGLE 來查詢,多看幾個網頁說明就能明白,我也是一邊查一邊TRY才成功的。

剛接觸VBA功力尚淺,說明不清之處尚且見諒。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 28# c_c_lai

修正計時方式錯誤,將 INPUTBOX() 移至最前面,哇! 1秒多就能完成。
面積大小分佈統計_ML089.rar (141.68 KB)

面積大小分佈統計_ML089.rar (141.68 KB)

{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 31# c_c_lai

昨天是用儲存格方式處理,大致需要3分鐘,早上改為陣列處理約需要10秒鐘,再進行優化可達2~3秒鐘
可見儲存格與陣列處理速度相差20倍以上
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 人的心地是一畦田,土地沒有播下好種子,也長不出好的果實。 -
返回列表 上一主題