返回列表 上一主題 發帖

[發問] 請問當A1輸入數字4時找出下列資料同數字的公式

回復 1# PD961A


    謝謝前輩發表此主題與範例
後學藉此主題練習陣列. 使用大小會視需要動態增加的陣列與 字典,
學習到很多知識,謝謝論壇,謝謝各位前輩,學習方案如下,請各位前輩指教

執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, T, Y, Z, A, xR As Range, xU As Range
'↑宣告變數:(Brr,T,Y,Z,A)是通用型變數,(xR,xU)是儲存格變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y這通用型變數是 字典
Set Z = CreateObject("System.Collections.ArrayList")
'↑令Z這通用型變數是 使用大小會視需要動態增加的陣列
Set xR = [A2:H17]: Brr = xR
'↑令xR這儲存格變數是 [A2:H17]儲存格,
'令Brr這通用型變數是 二維陣列,以xR變數儲存格值帶入陣列裡

Set xU = [A1]: T = Val(xU)
'↑令xU這儲存格變數是 [A1]儲存格,
'令T這通用型變數是 xU變數儲存格值轉成的新數字

For Each A In Brr
'↑設逐項迴圈!令A這通用型變數是 Brr陣列裡的一個陣列值
   A = Format(A, "0000")
   '↑令A變數是 四位數的數字碼字串(若不足四碼!於前方以0補足)
   If A <> vbNullString And Not Z.contains(A) Then Z.Add (A)
   '↑如果A變數不是 長度為零的字串,而且A變數不在Z陣列裡?
   '如果條件成立就把 A變數納入Z陣列裡

Next
Z.Sort
'↑令Z陣列做順排序
For Each A In Z: Y(Val(A)) = 0: Next
'↑設逐項迴圈!將Z陣列裡的值當key,item是0,納入Y字典裡
For Each A In xR
'↑設逐項迴圈!令A變數是xR變數儲存格中的一格
   If Val(A) = T Then Set xU = Union(xU, A)
   '↑如果A變數值轉成數值後 = T變數!就將A變數納入xU儲存格集裡
   Y(Val(A)) = Y(Val(A)) + 1
   '↑令A變數值轉數值當key,item是 item自身值+1
Next
xR.Interior.ColorIndex = xlNone: xU.Interior.ColorIndex = 6
'↑令xR變數儲存格底色設為 無底色:令xU變數儲存格底色設為 黃色
[L:M].ClearContents: [L1:M1] = [{"數字", "出現次數"}]
'↑令[L:M]儲存格清除內容:令[L1:M1]這兩格以↑陣列兩字串帶入
[L2].Resize(Y.Count, 1) = Application.Transpose(Y.keys)
'↑令[L2]擴展向下Y字典key數量數的儲存格,
'以Y字典keys轉置後帶入儲存格

[M2].Resize(Y.Count, 1) = Application.Transpose(Y.items)
'↑令[M2]擴展向下Y字典key數量數的儲存格,
'以Y字典items轉置後帶入儲存格

Set Y = Nothing: Set Z = Nothing: Set xR = Nothing
Set xU = Nothing: Erase Brr
'↑令釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 人生沒有所有權,只有生命的使用權。
返回列表 上一主題