首页 > 其他分享 >VBA学习(50):实现一键对所有工作表进行排序

VBA学习(50):实现一键对所有工作表进行排序

时间:2024-08-21 20:58:34浏览次数:12  
标签:VBA shtArray 一键 50 工作 Sheets 升序 排序 降序

要按名称对工作表进行排序,我们可以逐张选定某工作表,按住鼠标将该工作表拖放在所需的位置,从而实现工作表排序的效果。但如果工作表较多,手动拖放进行工作表排序,显然不是最有效率的方式。

为此,我们可以借助于VBA实现按工作表名称,一键对所有工作表进行升序或降序排列。

对工作表进行排序,首先要确认排序规则。本文主要是利用Excel筛选的升序降序规则

以升序规则为例。Excel中筛选的升序规则:数字-->字母-->汉字。其中,数字从小到大排序;字母按A-Z排序;汉字按拼音排序。如果文本为数字+字母+汉字的组合,数字开头的文本-->字母开头的文本-->汉字开头的文本。如果文本第一个字符相同,则比较第二个字符,以此类推。

同理可知,Excel筛选的降序规则。了解Excel升序/降序的筛选规则后,我们就可以将Excel的筛选升序降序规则应用于工作表的排序。VBA的实现思路如下:

1.新建一个临时工作表,A列存储所有工作表名称,筛选升序/降序;

2.创建字典,存储A列排序后的工作表名以及对应的行号;

3.以行号作为工作表的排序依据,利用冒泡排序,冒泡式地移动工作表,从而实现所有工作表的升序排列。

工作表升序排列的VBA代码


Sub 按名称对工作表升序排列()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '定义工作表名称的数组
    Dim shtArray() As Variant
    ReDim shtArray(ActiveWorkbook.Sheets.Count - 1)
    
    '在第一张工作表前新建临时表
    Sheets.Add before:=Sheets(1)
    Sheets(1).Name = "temp" & Format(Now, "yyyymmddhhmmss")

    '在临时表的A列存储所有工作表的名称
    Sheets(1).Range("a1") = "工作表名称"
    Dim sht As Worksheet, i As Integer
    i = 0
    For Each sht In Sheets
        If sht.Name <> Sheets(1).Name Then
            Range("a" & i + 2) = sht.Name
            shtArray(i) = sht.Name
            i = i + 1
        End If
    Next
    
    '在A列进行升序筛选
    Sheets(1).Columns("A:A").AutoFilter
    Sheets(1).AutoFilter.Sort.SortFields.Clear
    Dim rng As Range
    Set rng = Sheets(1).Range("A1:A" & Sheets(1).Range("a" & Rows.Count).End(xlUp).Row)
    Sheets(1).AutoFilter.Sort.SortFields. _
        Add2 Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With Sheets(1).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    '以字典形式存储排序后的工作表名,和对应的行号
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    For aaa = 2 To Range("a" & Rows.Count).End(xlUp).Row
        d(CStr(Range("a" & aaa).Value)) = aaa
    Next
    
    '利用冒泡排序,冒泡式地移动工作表
    For i = LBound(shtArray) To UBound(shtArray) - 1
        For j = i + 1 To UBound(shtArray)
            If Val(d(shtArray(i))) > Val(d(shtArray(j))) Then
                Sheets(shtArray(j)).Move before:=Sheets(shtArray(i))
                temp = shtArray(i)
                shtArray(i) = shtArray(j)
                shtArray(j) = temp
            End If
        Next j
    Next i
    '删除临时表
    Sheets(1).Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

要实现工作表降序排列,只要将上述代码中AutoFilter的Order参数改为xlDescending,其他不变。这里不再赘述。

 技术交流,软件开发,欢迎微信沟通:

标签:VBA,shtArray,一键,50,工作,Sheets,升序,排序,降序
From: https://blog.csdn.net/nianfen/article/details/141323004

相关文章

  • 力扣面试经典算法150题:跳跃游戏
    跳跃游戏今天的题目是力扣面试经典150题中的数组的中等难度题:跳跃游戏。题目链接:https://leetcode.cn/problems/jump-game/description/?envType=study-plan-v2&envId=top-interview-150题目描述给定一个非负整数数组nums,你最初位于数组的第一个下标,即nums[0]。数......
  • 一键关闭windows10自动更新
    win10这个系统,别的方面还算不错的,但我当初坚守WIN7是因为win7老实有自主权,而win10时不时的来一个更新,而且常常玩自动更新,一个误操作就让自己半天心血没搞没。所以我对win10一直是很嫌弃的,但人生有时候确实不得已,就像我最初要坚守xp,结果不得不使用多年的win7,而现在win7也已......
  • 关于DensiStak™ 板对板连接器:10169063-5002100LF、10169063-5602100LF、10169064-500
    系列概述该DensiStak™板对板连接器是高密度连接器,采用双梁接触系统,可确保可靠性能。该连接器采用11排设计(具有多达1034个引脚位置)和开放式引脚现场设计,可提高灵活性。DensiStak连接器具有高达16Gb/s的高速性能,符合PCIe®Gen4、以太网、USB、DP和MIPI协议。DensiStak板对板连......
  • leetcode面试经典150题- 3. 无重复字符的最长子串
    https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-interview-150  packageleetcode150import"testing"funcTestLengthOfLongestSubstring(t*testing.T){s:=&qu......
  • iMazing3汉化版一键下载无需激活版
    随着科技的不断进步,我们的生活方式也在发生着翻天覆地的变化。手机、电脑、平板等智能设备已经成为了我们生活中不可或缺的一部分。然而,随之而来的问题也越来越多,如何管理这些设备上的数据成为了许多人头疼的问题。而今天,我要为大家介绍的这款神器——iMazing3,就能轻松解决你的......
  • 2000-2023年逐年最大NDVI数据集(500m)
        植被指数(NDVI,NormalizedDifferenceVegetationIndex)可以准确反映地表植被覆盖状况。目前,NDVI时序数据已经在各尺度区域的植被动态变化监测、土地利用/覆被变化检测、宏观植被覆盖分类和净初级生产力估算等研究中得到了广泛的应用。   中国年度500M植被指......
  • 多功能便携工具!VH501TC多类型传感器读数仪,助你完成频率、温度、电压和电流测量!
    多功能便携工具!VH501TC多类型传感器读数仪,助你完成频率、温度、电压和电流测量!VH501TC是一款专用的多类型传感器手持式读数仪,主要用于测量单弦式振弦传感器的读数,同时也可以辅助测量电压和电流传感器的数据。该设备内置了LoRA无线技术,可以与我公司的NLM系列产品配合使用,实现传感......
  • VSCode深度配置,学会这些至上提升50的效率
    看完本文,你将让你的VSCode打字流畅度提升114倍不同工程使用各自的项目配置、插件更加美观的自定义窗口更加智能代码提示、替换更加清晰的代码块结构,能一目了然删掉那些标题党推荐的无用插件,使用VSCode自带的功能自定义代码颜色,VSCode主题现况概要作者......
  • 怎么一键清理电脑垃圾,清理垃圾的简单快捷的方法有哪些
    一键清理电脑垃圾以及清理垃圾的简单快捷方法主要包括以下几种:一、使用专业的电脑清理软件优点:这些软件通常具有强大的扫描和清理能力,能够自动识别并删除系统中的垃圾文件、临时文件、无用注册表项等,同时提供一键清理功能,操作简便快捷。操作步骤:下载并安装专业的电脑清理软件......
  • 实用的 IEC61850 装置设备模拟器
    目录实用的IEC61850装置设备模拟器主要功能软件截图实用的IEC61850装置设备模拟器官网地址:https://www.redisant.cn/iec61850serverIEC61850是国际电工委员会(IEC)制定的一项国际标准,主要用于电力系统自动化领域,特别是变电站自动化系统。IEC61850是电力系统自动化领域的......