返回列表 上一主題 發帖

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

回復 9# c_c_lai
.Parent 是指到 前面 With Sheets(1).[A1].CurrentRegion 的 parent 也就是 sheets(1)
直接用 Range(prev) ,應該相當於ActiveSheet.Range(prev),照道理是沒啥影響。

TOP

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

回復 1# c_c_lai

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

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

TOP

回復 2# c_c_lai
資料量龐大,且因為各個儲存格必須要以遞迴方式測是連續與否
跑的有點久
用縮小資料量先行測試應該還OK,你測試看看
面積大小分佈統計.zip (112.96 KB)
學海無涯_不恥下問

TOP

回復 12# ML089
不好意思現在才回來!
那張圖片只是樣張而已,
我個人亦在探索中,那是我另一友人的提問,
也多蒙各位鼎力協助,希望能從中找出頭緒。

TOP

回復 13# Hsieh
謝謝您!
待測出結果後再行向您報告。

TOP

回復 14# c_c_lai

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

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

TOP

回復 13# Hsieh
回復 16# ML089
回復 11# stillfish00
謝謝大家,終於測試出結果了,雖然速度上稍稍慢了點:

TOP

回復 13# Hsieh
回復 16# ML089
回復 11# stillfish00
面積大小分佈統計B.rar (108.71 KB)
感謝各位的幫忙,如還有更佳效益的解決方案,
敬請不吝指教!

TOP

本帖最後由 c_c_lai 於 2013-12-7 08:05 編輯

回復 16# ML089
以常理來論, 10 與 25 應無彼此間之串聯,應屬不同之區塊才是,
你在實作上是如何解析的?

TOP

回復 16# ML089
Hsieh 版大他是應用 "遞迴" 的處理技巧,來求出各歸屬區塊的範圍,
這種點及於面的運用是個蠻不錯的 Idea,你看看程式碼細細地去推敲,
是蠻值得回味的, 在裏頭我加上了 sRng 的位址紀錄處理,並同時求取
每個區塊的實際位址數,以提供參考之用:
  1. Option Explicit

  2. Public s As Long
  3. Public sRng As Variant

  4. Sub ex()
  5.     Dim dic As Object
  6.     Dim A As Range, Rng As Range, sPos As Range
  7.    
  8.     Set dic = CreateObject("Scripting.Dictionary")
  9.     dic("連續數量") = "數量"
  10.     '   增列部分
  11.     工作表2.[C1] = "連續位址"
  12.     工作表2.[D1] = "組合數量"
  13.    
  14.     With 工作表1
  15.         Set Rng = .Range("A1").CurrentRegion
  16.         Rng.Replace 0, Empty, xlWhole
  17.         
  18.         Set sPos = 工作表2.[C2]
  19.         Set A = Rng.Find(Empty)
  20.         
  21.         Do Until A Is Nothing
  22.             A = 0: s = 1
  23.             Cnt A
  24.             dic(s) = dic(s) + 1
  25.             
  26.             sPos = sRng
  27.             sPos.Offset(0, 1) = Range(sRng).Count
  28.             
  29.             Set A = Rng.Find(Empty)
  30.             
  31.             Set sPos = sPos.Offset(1)
  32.         Loop
  33.     End With
  34.    
  35.     With 工作表2
  36.         .[A1].Resize(dic.Count, 1) = Application.Transpose(dic.keys)
  37.         .[B1].Resize(dic.Count, 1) = Application.Transpose(dic.items)
  38.         .[A1].Resize(dic.Count, 2).Sort key1:=.[A1], Header:=xlYes
  39.     End With
  40.    
  41.     '  MsgBox dic.Count - 1
  42.     Set dic = Nothing
  43. End Sub

  44. Function Cnt(Rng As Range)
  45.     Dim A As Range, Temp As Range
  46.     Dim i As Integer
  47.         
  48.     For Each A In Rng
  49.         For i = -1 To 1 Step 2
  50.             If A.Row + i > 0 And A.Row + i < 工作表1.Range("A1").CurrentRegion.Rows.Count Then
  51.                 If IsEmpty(A.Offset(i, 0)) Then Set Temp = Union(Rng, A.Offset(i, 0))   '  "$BF$4:$BF$5"
  52.             End If
  53.         Next
  54.         For i = -1 To 1 Step 2
  55.             If A.Column + i > 0 And A.Column + i < 工作表1.Range("A1").CurrentRegion.Columns.Count Then
  56.                 If IsEmpty(A.Offset(, i)) Then Set Temp = Union(Rng, A.Offset(, i))   '  "$BF$4:$BG$4"
  57.             End If
  58.         Next
  59.     Next

  60.     If Not Temp Is Nothing Then      '  True
  61.         Temp = 0
  62.         s = Temp.Count
  63.         sRng = Temp.Address
  64.         Cnt Temp
  65.     End If
  66. End Function
複製代碼

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題