Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 兰色幻想

工作表按名称排序(VBA80集第25讲课后练习题)上交专贴

  [复制链接]
发表于 2020-9-30 16:06 | 显示全部楼层
这节的习题,一点思路没有,看看别人怎么做的,学习一下。
回复

使用道具 举报

发表于 2020-11-15 13:16 | 显示全部楼层
Option Explicit

Sub 工作表排序之冒泡法()

Dim arr, x, y, tem

arr = Range("a1:a" & [a65535].End(xlUp).Row)

For x = 1 To UBound(arr) - 1
  For y = x + 1 To UBound(arr)
  If arr(x, 1) > arr(y, 1) Then

     tem = arr(y, 1)
     arr(y, 1) = arr(x, 1)
     arr(x, 1) = tem

    End If
     Next y

Next x

Range("a1").Resize(UBound(arr), 1) = arr

End Sub


Sub 工作表排序之选择法()

Dim arr, x, y, tem, imax

arr = Range("a1:a" & [a65535].End(xlUp).Row)

For x = UBound(arr) To LBound(arr) + 1 Step -1
  imax = 1
  For y = LBound(arr) To x
    If arr(y, 1) > arr(imax, 1) Then
       imax = y
     End If
  Next y

    tem = arr(imax, 1)
    arr(imax, 1) = arr(x, 1)
    arr(x, 1) = tem

Next x

Range("a1").Resize(UBound(arr), 1) = arr

End Sub

Sub 工作表排序之插入法()

Dim arr, x, y, tem
arr = Range("a1:a" & [a65535].End(xlUp).Row)

For x = 2 To UBound(arr)
  tem = arr(x, 1)
  For y = x - 1 To LBound(arr) Step -1
    If tem >= arr(y, 1) Then Exit For

    arr(y + 1, 1) = arr(y, 1)

    Next y

    arr(y + 1, 1) = tem
Next x

Range("a1").Resize(UBound(arr), 1) = arr



End Sub

Sub 打乱顺序()

Dim arr, x, num, h
arr = Range("a1:a" & Range("a65535").End(xlUp).Row)
For x = 1 To UBound(arr)

  num = Int((UBound(arr) - LBound(arr) + 1) * Rnd() + LBound(arr))
  h = arr(num, 1)
  arr(num, 1) = arr(x, 1)
  arr(x, 1) = h
  Next x

Range("a1").Resize(UBound(arr), 1) = arr

End Sub


回复

使用道具 举报

发表于 2020-11-15 20:49 | 显示全部楼层
最开始就跟着学习的人,现在肯定都是VBA高手中高手了吧
回复

使用道具 举报

发表于 2020-12-5 15:54 | 显示全部楼层
学习一下

回复

使用道具 举报

发表于 2021-3-18 21:02 | 显示全部楼层
打发士大夫
回复

使用道具 举报

发表于 2021-3-18 21:17 | 显示全部楼层
Sub 工作表排序之冒泡法()
Dim x, y
   For x = 1 To Sheets.Count - 1
    For y = x + 1 To Sheets.Count
     If Sheets(x).Name > Sheets(y).Name Then
         Sheets(y).Move before:=Sheets(x)
     End If
    Next y
   Next x
   Sheets("王6").Select
End Sub
Sub 工作表排序之选择法()
    Dim x, y, sh
        For x = Sheets.Count To 2 Step -1
          Set sh = Sheets(1)
          For y = 1 To x
              If Sheets(y).Name > sh.Name Then Set sh = Sheets(y)
          Next y
           sh.Move after:=Sheets(x)
        Next x
        Sheets("王6").Select
End Sub
Sub 工作表排序之插入法()
Dim x, y, st
   For x = 2 To Sheets.Count
     st = Sheets(x).Name
     For y = x - 1 To 1 Step -1
      If Sheets(y).Name <= st Then Exit For
      Sheets(y).Move after:=Sheets(y + 1)
     Next y
    Next x
     Sheets("王6").Select
End Sub

Sub 打乱顺序()
Dim x, y, sh
        For x = 1 To Sheets.Count
          y = Int(Rnd() * x + 1)
           Sheets(y).Move after:=Sheets(x)
        Next x
        Sheets("王6").Select
End Sub

Sub 工作表排序之希尔排序()
Dim x, y, z, sr
  z = 1
  If Sheets.Count > 13 Then
  Do While z < Sheets.Count
    z = z * 3 + 1
    Loop
    z = z \ 9
    End If
    Do While z
    For x = 1 + z To Sheets.Count
       sr = Sheets(x).Name
      For y = x - z To 1 Step -z
        If Sheets(y).Name <= sr Then Exit For
          Sheets(y).Move after:=Sheets(y + z)
          Sheets(y + z - 1).Move before:=Sheets(y)
        Next y
       Next x
       z = z \ 3
    Loop
    Sheets("王6").Select
End Sub
回复

使用道具 举报

发表于 2021-3-28 18:20 | 显示全部楼层
666
回复

使用道具 举报

发表于 2021-4-21 21:54 | 显示全部楼层
努力学习... 还有好多不懂..
回复

使用道具 举报

发表于 2021-5-2 13:14 | 显示全部楼层
向高手学习
回复

使用道具 举报

发表于 2021-5-3 14:54 | 显示全部楼层
小白前来学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 18:49 , Processed in 0.248263 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表