回覆列表
  • 1 # 樂天派的土撥鼠

    在字典和陣列中,是不能如工作表中那樣進行直接排序的,需要藉助於函式來進行.我在上一講中講了利用工作表函式large進行排序的方法,今日我們講解利用MAX排序,已經利用match定位的方法.關於這些函式,在本書中不做重點的講解,只是利用,如果不清楚,可以參考我的其他書籍資料,或者到網上搜索相關的資料參考。

    例項,如下面截圖資料,在A列中有若干資料,我們要對齊排重處理,同時要統計出每個資料的出現次數,最後按出現的次數進行多少排序:

    思路,和上一講大體一致,我們要把這些資料首先裝到字典中,在裝的同時要計算每個數字出現的次數,然後對出現的次數建立迴圈,每次取出最大值,並根據最大值的位置求出對應的鍵,當每次取出最大值後要把這個最大值變成空,以便下次取還是最大值。下面看我給出的程式碼:

    Sub mynzsz_59() "第59講 利用工作表函式,對字典的鍵值按大小排序,並給出對應的鍵

    Dim ran

    Sheets("59").Select

    Set mydic = CreateObject("Scripting.Dictionary") "字典

    TT = Cells(Rows.Count, 1).End(xlUp).Row

    For Each ran In Sheets("59").Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)

    If ran.Value <> "" Then

    If Not mydic.exists(ran.Value) Then

    mydic.Add ran.Value, 1 "需要注意此處要加VALUE

    Else

    mydic(ran.Value) = mydic(ran.Value) + 1

    End If

    End If

    Next

    "注意此處把字典的鍵和鍵值取出

    k = mydic.keys: T = mydic.items

    "建立陣列,用於存放目標資料

    ReDim X(1 To mydic.Count, 1 To 2)

    For i = 1 To mydic.Count

    X(i, 2) = Application.Max(T)

    "找到鍵的位置

    W = Application.Match(X(i, 2), T, 0) - 1

    "提取鍵

    X(i, 1) = k(W)

    "相應的鍵值變成空,以用MAX函式

    T(W) = ""

    Next

    [e:f].Clear

    [E1] = "排序": [f1] = "重複次數"

    Sheets("59").[E2].Resize(mydic.Count, 2) = X

    End Sub

    程式碼解析:

    1 上述程式碼實現了: 這些資料首先裝到字典mydic中,在裝的同時要計算每個數字出現的次數,放到鍵值中,然後提取出見和鍵值放到陣列中k = mydic.keys: T = mydic.items

    在鍵值中建立迴圈,利用MAX函式每次取出最大值,並根據最大值的位置W = Application.Match(X(i, 2), T, 0) - 1求出對應的鍵,當每次取出最大值後要把這個最大值變成空,以便下次取的還是最大值有效.最後回填資料。

    2 Set mydic = CreateObject("Scripting.Dictionary") "字典

    上述語句建立字典

    3 For Each ran In Sheets("59").Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)

    If ran.Value <> "" Then

    If Not mydic.exists(ran.Value) Then

    mydic.Add ran.Value, 1 "需要注意此處要加VALUE

    Else

    mydic(ran.Value) = mydic(ran.Value) + 1

    End If

    End If

    Next

    上述語句將數值放到字典中,需要注意的是一定要用ran.Value,此處讀者可以自己測試一下,如果不加value有什麼不同,透過測試理解一下字典見和鍵值的意義。

    4 "注意此處把字典的鍵和鍵值取出

    k = mydic.keys: T = mydic.items

    上述語句提取出鍵和鍵值到陣列中

    5 For i = 1 To mydic.Count

    X(i, 2) = Application.Max(T)

    "找到鍵的位置

    W = Application.Match(X(i, 2), T, 0) - 1

    "提取鍵

    X(i, 1) = k(W)

    "相應的鍵值變成空,以用MAX函式

    T(W) = ""

    Next

    在上述語句中利用建立了一個迴圈,在每次迴圈中取max值,取出後將數值變成空。同時用W = Application.Match(X(i, 2), T, 0) – 1 函式找到鍵的位置.

    6 [e:f].Clear

    [E1] = "排序": [f1] = "重複次數"

    Sheets("59").[E2].Resize(mydic.Count, 2) = X

    End Sub

    上述語句回填資料.

  • 2 # 樂天派的土撥鼠

    在字典和陣列中,是不能如工作表中那樣進行直接排序的,需要藉助於函式來進行.我在上一講中講了利用工作表函式large進行排序的方法,今日我們講解利用MAX排序,已經利用match定位的方法.關於這些函式,在本書中不做重點的講解,只是利用,如果不清楚,可以參考我的其他書籍資料,或者到網上搜索相關的資料參考。

    例項,如下面截圖資料,在A列中有若干資料,我們要對齊排重處理,同時要統計出每個資料的出現次數,最後按出現的次數進行多少排序:

    思路,和上一講大體一致,我們要把這些資料首先裝到字典中,在裝的同時要計算每個數字出現的次數,然後對出現的次數建立迴圈,每次取出最大值,並根據最大值的位置求出對應的鍵,當每次取出最大值後要把這個最大值變成空,以便下次取還是最大值。下面看我給出的程式碼:

    Sub mynzsz_59() "第59講 利用工作表函式,對字典的鍵值按大小排序,並給出對應的鍵

    Dim ran

    Sheets("59").Select

    Set mydic = CreateObject("Scripting.Dictionary") "字典

    TT = Cells(Rows.Count, 1).End(xlUp).Row

    For Each ran In Sheets("59").Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)

    If ran.Value <> "" Then

    If Not mydic.exists(ran.Value) Then

    mydic.Add ran.Value, 1 "需要注意此處要加VALUE

    Else

    mydic(ran.Value) = mydic(ran.Value) + 1

    End If

    End If

    Next

    "注意此處把字典的鍵和鍵值取出

    k = mydic.keys: T = mydic.items

    "建立陣列,用於存放目標資料

    ReDim X(1 To mydic.Count, 1 To 2)

    For i = 1 To mydic.Count

    X(i, 2) = Application.Max(T)

    "找到鍵的位置

    W = Application.Match(X(i, 2), T, 0) - 1

    "提取鍵

    X(i, 1) = k(W)

    "相應的鍵值變成空,以用MAX函式

    T(W) = ""

    Next

    [e:f].Clear

    [E1] = "排序": [f1] = "重複次數"

    Sheets("59").[E2].Resize(mydic.Count, 2) = X

    End Sub

    程式碼解析:

    1 上述程式碼實現了: 這些資料首先裝到字典mydic中,在裝的同時要計算每個數字出現的次數,放到鍵值中,然後提取出見和鍵值放到陣列中k = mydic.keys: T = mydic.items

    在鍵值中建立迴圈,利用MAX函式每次取出最大值,並根據最大值的位置W = Application.Match(X(i, 2), T, 0) - 1求出對應的鍵,當每次取出最大值後要把這個最大值變成空,以便下次取的還是最大值有效.最後回填資料。

    2 Set mydic = CreateObject("Scripting.Dictionary") "字典

    上述語句建立字典

    3 For Each ran In Sheets("59").Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)

    If ran.Value <> "" Then

    If Not mydic.exists(ran.Value) Then

    mydic.Add ran.Value, 1 "需要注意此處要加VALUE

    Else

    mydic(ran.Value) = mydic(ran.Value) + 1

    End If

    End If

    Next

    上述語句將數值放到字典中,需要注意的是一定要用ran.Value,此處讀者可以自己測試一下,如果不加value有什麼不同,透過測試理解一下字典見和鍵值的意義。

    4 "注意此處把字典的鍵和鍵值取出

    k = mydic.keys: T = mydic.items

    上述語句提取出鍵和鍵值到陣列中

    5 For i = 1 To mydic.Count

    X(i, 2) = Application.Max(T)

    "找到鍵的位置

    W = Application.Match(X(i, 2), T, 0) - 1

    "提取鍵

    X(i, 1) = k(W)

    "相應的鍵值變成空,以用MAX函式

    T(W) = ""

    Next

    在上述語句中利用建立了一個迴圈,在每次迴圈中取max值,取出後將數值變成空。同時用W = Application.Match(X(i, 2), T, 0) – 1 函式找到鍵的位置.

    6 [e:f].Clear

    [E1] = "排序": [f1] = "重複次數"

    Sheets("59").[E2].Resize(mydic.Count, 2) = X

    End Sub

    上述語句回填資料.

  • 中秋節和大豐收的關聯?
  • key社動漫的名句?