两种方法将数组内容装入

以下是两种方法

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