字典直接创建和引用法的区别

如图所示

以下是直接创建

Set d=Createobject(“scripting.dictionary”)

以下是用引用法,复制到别的电脑有可能不能用,必须启用

Private Sub CommandButton1_Click()
    Dim d As New dictionary
'前期引用,VBA中,工具,引用 scrrun.dll
'勾选 Microsoft Scripting runtime 
    Dim x As Long
    For x = 2 To 5
        d.Add Cells(x, 1).Value, Cells(x, 2).Value
    Next
    Range("d1").Resize(d.Count) = Application.Transpose(d.Keys)
    Range("e1").Resize(d.Count) = Application.Transpose(d.items)
End Sub

字典的4个属性

字典经典用法计数

字典的4个常用属性,d.key,d.item,d.count.d.comparemode使用方法如下

Private Sub CommandButton1_Click()
  Dim d                   '创建一个变量
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", "Athens"     '添加一些关键字和条目
    d.Add "b", "Belgrade"
    d.Add "c", "Cairo"
      d.Key("a") = "d"
    If d.exists("d") Then
        MsgBox "存在"
    Else
        MsgBox "不存在"
    End If
End Sub
Private Sub CommandButton2_Click()
Dim d                   '创建一个变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
    MsgBox d.Item("b")
End Sub
Private Sub CommandButton3_Click()
  Dim d                   '创建一个变量
  Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", "Athens"     '添加一些关键字和条目
    d.Add "b", "Belgrade"
    d.Add "c", "Cairo"
    MsgBox d.Count
End Sub
Private Sub CommandButton4_Click()
  Dim d                   '创建一个变量
  Set d = CreateObject("Scripting.Dictionary")
    d.comparemode = 0 'VBTEXTCOMPARE 不区分大小写
    'vbbinarycompare 区分大小写 1
    d.Add "a", "Athens"     '添加一些关键字和条目
    d.Add "b", "Belgrade"
    d.Add "c", "Cairo"
    d.Add "A", "ABVCD"
End Sub

字典应用的六个方法

本文介绍字典中最常用的六个方法

Private Sub CommandButton1_Click()
Dim d                   '创建一个变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
    If d.exists("a") = True Then
        MsgBox "存在"
    Else
        MsgBox "不存在"
    End If
End Sub
Private Sub CommandButton2_Click()
    Dim d                   '创建一个变量
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", "Athens"     '添加一些关键字和条目
    d.Add "b", "Belgrade"
    d.Add "c", "Cairo"
        k = d.keys
        [a1].Resize(d.Count, 1) = Application.Transpose(k)
End Sub
Private Sub CommandButton3_Click()
    Dim d                   '创建一个变量
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", "Athens"     '添加一些关键字和条目
    d.Add "b", "Belgrade"
    d.Add "c", "Cairo"
        k = d.items
        [b1].Resize(d.Count, 1) = Application.Transpose(k)
End Sub
Private Sub CommandButton4_Click()
Dim d                   '创建一个变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
    d.Remove ("a")
    If d.exists("a") = True Then
        MsgBox "存在"
    Else
        MsgBox "不存在"
    End If
End Sub
Private Sub CommandButton5_Click()
Dim d                   '创建一个变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
    d.RemoveAll
    If d.exists("b") = True Then
        MsgBox "存在"
    Else
        MsgBox "不存在"
    End If
End Sub

字典基本用法

优点1:字典第一列只能装非重复的值,可以用来提取不重复的元素,用数组不方便

优点2:每一个KEY对应唯一的ITEM,数组按序号不太方便

缺点1:只有两列,处理多列需要用字符串组合拆分来实现

缺点2:会需要一定的时间调用

字典有六个方法:

d.add
d.exists
d.keys
d.items
d.remove
d.removeall

字典有四个属性:

key
item
count
comparemode

创建字典两种方法

直接创建: Set d=createobject(“scripting dictionary”)

引用法:工具,引用,浏览  SCRRUN.DLL

 

 

 

插入排序的方法

插入排序的方法

如下图所示,需要对A列重新排序,使用的原理是,从第二个开始,都要和上面的比较,如果遇到大的,大的下沉一位,然后和当前X的值进行对调。

Option Explicit
Sub Test()
    Dim arr, temp, x, y  '声明变量 
        arr = Range("a1:a10")
        For x = 2 To UBound(arr) '从第二个开始
                temp = arr(x, 1) '记得要插入的值
            For y = x - 1 To 1 Step -1
                If arr(y, 1) <= temp Then Exit For
                arr(y + 1, 1) = arr(y, 1)
            Next y
            arr(y + 1, 1) = temp
        Next
    Range("d1").Resize(UBound(arr)) = arr
End Sub

两种方法将数组内容装入

以下是两种方法

Private Sub CommandButton1_Click()
   Dim arr, arr1()
   arr = Range("a1:d6")
   Dim x, k
     For x = 1 To UBound(arr)
       If arr(x, 1) = "B" Then
         k = k + 1
         ReDim Preserve arr1(1 To 4, 1 To k)
         arr1(1, k) = arr(x, 1)
         arr1(2, k) = arr(x, 2)
         arr1(3, k) = arr(x, 3)
         arr1(4, k) = arr(x, 4)
       End If
     Next x
   Range("a9").Resize(k, 4) = Application.Transpose(arr1)
End Sub
Private Sub CommandButton2_Click()
  Dim arr, arr1(1 To 1000, 1 To 4)
  arr = Range("a1:d6")
  Dim x, k
    For x = 1 To UBound(arr)
      If arr(x, 1) = "B" Then
        k = k + 1
        arr1(k, 1) = arr(x, 1)
        arr1(k, 2) = arr(x, 2)
        arr1(k, 3) = arr(x, 3)
        arr1(k, 4) = arr(x, 4)
      End If
    Next x
  Range("a15").Resize(k, 4) = arr1
End Sub

选择排序

选择排序,倒过来,从最后一个分别以上面最大的进行比较,优点是速度更快,不需要和每一个对调位置,只需要和最大的比较。

先理解以下的代码,目的是找出最大的值

Private Sub CommandButton1_Click()
    Dim x, y, imax, arr
    arr = Range("a1:a10")
    imax = 1 '先假设为1
    For x = 1 To UBound(arr)
        If arr(x, 1) = 47 Then imax = x
        '第一次和第一个判断,大于的话,IMAX值发生变化
        '第二次和新的IMAX值对比,双于的话,IMAX值再次改变
    Next
    MsgBox arr(imax, 1)
End Sub
Private Sub CommandButton1_Click()
  Dim x, y, imax, temp '声明变量
  Dim arr '声明数组
  arr = Range("a1:a10") '将区域内容装入到数组中
    For x = UBound(arr) To 2 Step -1
    '从最后一个到第二个做循环,第二个需要和上面的比较,第一个不需要比较
    imax = 1 '记下最大值,先假设为1
      For y = 1 To x '从第一个到X循环,第一次x为10,第二次为9
        If arr(y, 1)>arr(imax, 1) Then imax = y
        '捕捉最大值,并记下
      Next
        temp = arr(imax, 1) '先将最大的值 装入内存
        arr(imax, 1) = arr(x, 1) '对调位置
        arr(x, 1) = temp '对调位置
    Next
  Range("c1").Resize(UBound(arr), 1) = arr
End Sub

使用数组进行冒泡排序

今天学习了使用数组进行排序,对其总结如下

Private Sub CommandButton1_Click()
  Dim ARR '声明数组
  Dim X, Y '声明变量
  ARR = Range("A1:A10") '数区域装入数组中
  For X = 1 To UBound(ARR) - 1 '从1到数组最后减1,假设一共10个,原因9和10对比
    For Y = X + 1 To UBound(ARR) '第一个是和2到最后进行对比
      If ARR(X, 1) >= ARR(Y, 1) Then '如果大于
        temp = ARR(X, 1) '先记下当前
        ARR(X, 1) = ARR(Y, 1) '互换内容
        ARR(Y, 1) = temp '再将其原来记下的内容存入
      End If
    Next
  Next
 Range("C1").Resize(UBound(ARR), 1) = ARR '数组内容存入到C1扩展后的区域
End Sub