返回列表 上一主題 發帖

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

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

因使用 FireFox、IE、 Google Chrome 等工具上傳圖片及測試檔案
都無法順利完成執行 (一片空白,且無法回到原畫面),所以再次
另起爐灶。
不是要計算,是要統計,第一個工作表有"0"部份的面積,

1個0組成的面積 :有多少個?
2個0組成的面積:有多少個
3個0組成的面積 有多少個
.
.
50個0組成的面積:有多少個?
.
要利用統計出來的數據,製成像折線的圖表。
第一工作表數字是從第二工作表圖片轉換來的
0 跟255 是代表第二工作表圖片 顏色的數字
敬請大家指教,謝謝!
  1. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  2. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  3. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  4. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  5. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  6. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        255        255
  7. 0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        255        255        255        255        255        255
  8. 0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255
  9. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255
  10. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255
  11. 0        0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255
  12. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255        255
  13. 0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255
  14. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255        255
  15. 0        0        255        255        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  16. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  17. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  18. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  19. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  20. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  21. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  22. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  23. 0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0
  24. 255        255        255        255        255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        255        255        255        255        0        0        0        0
  25. 255        255        255        255        255        255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        255        255        0        0        0        0        0
  26. 255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        0        0        0        0        0        0
  27. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0
  28. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0
  29. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0
  30. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0
  31. 255        255        255        255        255        255        255        255        255        255        255        0        255        255        255        255        255        255        255        255        255        255        0        0        0        0        255
  32. 255        255        255        255        255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        255        255        255        255        0        0        255        255
  33. 255        255        255        255        255        255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255
  34. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  35. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  36. 255        255        255        255        255        255        255        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  37. 255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  38. 255        255        255        255        255        255        255        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  39. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  40. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  41. 0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  42. 0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  43. 0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  44. 0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  45. 0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  46. 0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  47. 0        0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  48. 0        0        0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        255        255
  49. 0        0        0        255        255        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        255        255        255
  50. 0        0        255        255        255        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        255        255
  51. 0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  52. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  53. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  54. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  55. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  56. 0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  57. 0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0        0
  58. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0        0        0
  59. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0        0        0
  60. 0        0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0        0        0
  61. 0        0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0
  62. 0        0        0        0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        0        0        0        0        0        0
  63. 0        0        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  64. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
  65. 255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255        255
複製代碼

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

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

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

回復 1# c_c_lai
真奇怪! 之前欲上傳的附件於此次發文,竟然莫名地自動全部出現了,
實在太好了。

TOP

回復 2# c_c_lai
對不起! 有關 luhpro 等大大的回文,
我在原發文 "請教要如何使用 VBA 判別不規則儲存格的辦法"中
看不到 (有收到"消息"、但進去欲拜讀時卻無此相關回文內容),
敬請再次賜教,謝謝你等。

TOP

回復 1# c_c_lai
寫得挺亂的,包涵哈~
d1字典 : Address , 面積
d2字典 : 面積 , 個數
依需求再自己改改吧
  1. Sub test()
  2.   Dim d1, d2, bCombine As Boolean, lCol As Long
  3.   Dim stripe As Range, stripeOffset As Range, rngTarget As Range
  4.   
  5.   Set d1 = CreateObject("scripting.dictionary")
  6.   With Sheets(1).[A1].CurrentRegion
  7.     .Replace What:="0", Replacement:=""
  8.     For lCol = 1 To .Columns.Count
  9.       If Application.CountA(.Columns(lCol).Cells) < .Columns(lCol).Cells.Count Then
  10.         For Each stripe In .Columns(lCol).SpecialCells(xlCellTypeBlanks).Areas
  11.           If stripe.Column = 1 Then
  12.             Set stripeOffset = stripe
  13.           Else
  14.             Set stripeOffset = .Parent.Range(stripe.Address).Offset(0, -1)
  15.           End If
  16.           bCombine = False
  17.           For Each prev In d1.keys
  18.             If Not Application.Intersect(.Parent.Range(prev), stripeOffset) Is Nothing Then
  19.               If d1.exists(stripe.Address) Then d1.Remove (stripe.Address)
  20.               Set stripe = Union(.Parent.Range(prev), stripe)
  21.               d1.Remove prev
  22.               d1(stripe.Address) = stripe.Count
  23.               Set stripeOffset = Union(stripeOffset, .Parent.Range(prev))
  24.               bCombine = True
  25.             End If
  26.           Next prev
  27.           If Not bCombine Then d1(stripe.Address) = stripe.Count
  28.         Next stripe
  29.       End If
  30.     Next lCol
  31.     .Replace What:="", Replacement:="0"
  32.   End With
  33.   
  34.   Set d2 = CreateObject("scripting.dictionary")
  35.   For Each x In d1.items
  36.     If d2.exists(x) Then
  37.       d2(x) = d2(x) + 1
  38.     Else
  39.       d2(x) = 1
  40.     End If
  41.   Next
  42.   For Each x In d2.keys
  43.     Debug.Print "面積 " & x & " : " & d2(x) & "個"
  44.   Next
  45. End Sub
複製代碼

TOP

回復 4# stillfish00
不好意思,RUN 到現在已經過 半個多小時 (無回應),
可能檔案太大了吧,明日我再試試,謝謝你!

TOP

回復 4# stillfish00
我稍稍修改了處裡的範圍:
假設 lCol 目前值 為 1
  1. '  Sheets(1).Columns(lCol).Cells.Count : 65536
  2. '  Sheets(1).Range(Chr(64 + lCol) & Sheets(1).Rows.Count).End(xlUp).Row : 960
  3. '  Application.CountA(.Columns(lCol).Cells) : 861
複製代碼
將處裡的範圍予以縮小,以避免耗時處裡:
  1. '  If Application.CountA(.Columns(lCol).Cells) < .Columns(lCol).Cells.Count Then
  2. If Application.CountA(.Columns(lCol).Cells) < .Range(Chr(64 + lCol) & .Rows.Count).End(xlUp).Row Then
複製代碼
目前在執行過程中會出現 1004 的錯誤訊息,所以還在 Debug 中。
(應用程式或物件定義上的錯誤)
謝謝你!

TOP

回復 6# c_c_lai
跑的範圍大概多大呢(幾乘幾) ? 有檔案嗎?
我知道我的方法效率很差的,
因為我的作法是分columns,每個columns再分為數個帶狀連續的0,
然後才依這帶狀0 去判斷結合起來,
因為我也沒想到有甚麼好方法

TOP

回復 7# stillfish00
#1 上的附件 "面積大小分佈統計.rar"  (109.12 KB)
不知道你能否完整下載下來?
真麻煩你了!

TOP

回復 7# stillfish00
另外,
  1. If Not Application.Intersect(.Parent.Range(prev), stripeOffset) Is Nothing Then
複製代碼
我將它改成
  1. If Not Application.Intersect(Range(prev), stripeOffset) Is Nothing Then
複製代碼
不知對否? 如此它才能判斷
  1. '     Application.Intersect(Range(prev), stripeOffset) : Nothing : Object
複製代碼

TOP

回復 8# c_c_lai
我的能跑 ,結果如下
面積 1 : 140個
面積 2 : 178個
面積 3 : 53個
面積 6 : 36個
面積 5 : 39個
面積 10 : 27個
面積 18 : 8個
面積 11 : 13個
面積 15 : 9個
面積 21 : 7個
面積 45 : 2個
面積 13 : 15個
面積 8 : 30個
面積 51 : 3個
面積 23 : 4個
面積 32 : 11個
面積 54 : 5個
面積 31 : 4個
面積 33 : 2個
面積 22 : 14個
面積 86 : 2個
面積 4 : 56個
面積 24 : 13個
面積 12 : 15個
面積 17 : 8個
面積 7 : 38個
面積 49 : 6個
面積 93 : 1個
面積 35 : 1個
面積 122 : 1個
面積 19 : 12個
面積 50 : 1個
面積 109 : 1個
面積 9 : 25個
面積 46 : 3個
面積 60 : 2個
面積 37 : 2個
面積 28 : 9個
面積 40 : 4個
面積 26 : 3個
面積 41 : 4個
面積 14 : 9個
面積 16 : 13個
面積 30 : 3個
面積 87 : 1個
面積 48 : 2個
面積 29 : 4個
面積 72 : 4個
面積 20 : 10個
面積 77 : 1個
面積 84 : 1個
面積 128 : 1個
面積 61 : 2個
面積 39 : 2個
面積 78 : 1個
面積 59 : 1個
面積 81 : 1個
面積 56 : 2個
面積 102 : 2個
面積 36 : 1個
面積 25 : 6個
面積 34 : 4個
面積 38 : 3個
面積 100 : 3個
面積 91 : 1個
面積 75 : 1個
面積 42 : 1個
面積 89 : 1個
面積 85 : 1個
面積 27 : 1個
面積 96 : 1個
面積 108 : 1個
面積 66 : 1個
面積 82 : 1個
面積 53 : 2個
面積 63 : 1個
面積 55 : 1個
面積 119 : 1個
面積 381 : 1個

TOP

        靜思自在 : 君子為目標,小人為目的。
返回列表 上一主題