精华内容
下载资源
问答
  • Excel VBA数据排序

    2020-12-15 01:01:54
    关注微信公众号:VBA168 每天更新Excel VBA经典代码,祝你工作和学习更轻松! 在如图1所示数据列表中,需要按总成绩从高到低...Range对象的Sort方法区域进行排序,其语法格式如下。 Sort(Key1, Order1, Key2, Type, O
  • VBA操作Excel内容排序,用Sort函数工作表内容排序

    万次阅读 多人点赞 2019-02-18 23:52:47
    今天有同学问到关于大批量Excel的Sheet如何简化排序,但是网上的攻略比较混乱。因此,在这做一下示例。 需求:80页sheet的Excel文档,每页的格式相同,基本内容如下,要求根据A列,升序排列。 代码如下: ...

    今天有同学问到关于大批量Excel的Sheet如何简化排序,但是网上的攻略比较混乱。因此,在这做一下示例。

    需求:80页sheet的Excel文档,每页的格式相同,基本内容如下,要求根据A列,升序排列。

    代码如下:

    Option Explicit
    Sub MySort()
    Dim i As Integer
    Dim maxRow As Integer
    Dim sht As Worksheet
    
    '遍历所有工作表
    For i = 1 To ActiveWorkbook.Worksheets.Count
    
        Set sht = ActiveWorkbook.Worksheets(i)
    
        '激活当前工作表,Sort只能排序当前工作表
        sht.Activate
    
        '获取当前表最大行数
        maxRow = sht.UsedRange.Rows.Count
    
        '选取范围进行排序:这里是选取a3:ao41(前两行因为是标题,所以不选);key是排序的列,这里写a3,表示以a列为依据排序,最多可以写3个key;order表示升序降序;Header表示是否有标题,由于我们没选a1、a2,所以这里写no
        sht.Range("a3:ao" & maxRow).Sort key1:=sht.Range("a3"), order1:=xlAscending, Header:=xlNo
    
    Next i
    
    End Sub

     

    注意,Vba的排序函数为Sort,基本用法如下:

    Range("待排序数据区域").Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3,
            Header, OrderCustom, MatchCase, Orientation, SortMethod,
            DataOption1, DataOption2, DataOption3)
    其中各类型参数的意义如下:
    ① key1、key2、key3
    这些key是排序的关键列(或行)的单元格地址,如 Range("A1")
    实际只要选对列标题即可,对行数要求不敏感。

    【行数要求不敏感】
    即数据区域中任意行数都可以: Range("A1")、或Range("A2")、或Range("A1000")都可以。

    【注意】
    1. 一次Sort只能调用至多3个参数,没有key4可以使用。
    2. 至少使用1个参数即可,即key2、key3可以省去不用。

    【引用方法】
    1. 带参数名引用,如: key1:=Range("G3")
       带参数名引用时
    2. 参数位置引用,即按照上述Sort命令的参数顺序直接应用,
       如: Range("A1:I19").Sort key1:=Range("G3")  即第1位置参数即为key1
    ②  Order1、Order2、Order3
       这些Order是排序的顺序模式指定参数。即: A-Z升序、或Z-A降序
        参数的模式名称为:
              A-Z升序= xlAscending 或直接=1
                   Z-A降序= xlDescending 或直接=2
      带参数名引用时:
      Order1:=xlAscending  或 Order1:= 1
      参数位置引用时,紧跟key后面。(但注意key2和Order2之间要隔一个Type参数)
    ③  Header
        即是否有标题行参数,一共有3个值:
        Header:= xlGuess=0 或xlYes=1 或 xlNo=2
        即=xlGuess、或=0时,工作表自己判断
         =xlYes、或=1时,强制第1行为列标题,即第1行【不参与排序】
         =xlNo、或=2时,强制没有列标题。即第1行【也参与排序】
      带参数名引用时:
       如: Header:= xlGuess
       参数位置引用时,在第7个逗号之后。
      (如果key只有1个时,要连续空6个逗号,
       如:Range("A1:I19").Sort Range("A1"), 1, , , , , , 2 (order1之后连续写6个逗号)
    ④ MatchCase 是否匹配大小写
        MatchCase:=False 、或=0 不区分大小写
        MatchCase:=True 、或=1 区分大小写(Case Sensitive)
    ⑤ Orientation 排序方向 
       一般为同一列中从上到下各行进行排序:Orientation:= xlTopToBottom 、或=1
        如果是: 同一行中从左到右各列进行排序,则为:Orientation:= xlLeftToRight、或=2
    ⑥ SortMethod 排序方法
        按拼音排序: SortMethod:= xlPinYin 、或=1 (Use phonetic info)
        按笔画排序: SortMethod:= xlStroke、或=2
    ⑦ DataOption1 按数值或按文本排序
        DataOption1:= xlSortNormal

     

     

    展开全文
  • '使用倒排序方式多列进行排序 For col = LastColumn To 2 Step -1 workArea.Sort Key1:=Cells(1, col), Order1:=xlAscending Next col sumRow = LastRow + 1 sumCol = LastColumn + 1 Set ...

    展开全文
  • VBA示例函数之 单元格内数据排序,供初学者参考,大牛勿进~~~~~~~
  • VBA数组的排序

    2021-09-13 16:12:32
    它的工作原理是:第一次从待排序数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序数据

    我们平时用的表格排序,只相对来说是在在表格中的升序降序。今天就好奇如果数组中实现排序
    他是怎么实现的呢。

    经过一番折腾查找,真是一看吓一跳,真是感觉蚂蚁看大象,发现排序分为:
    1,稳定排序与不稳定排序2,内排序和外排序内部排序可分为:直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序。

    晕

    今天仅整理了最简单的两种排序。。。
    先来看下定义和实现的方法吧。

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

    请添加图片描述

    1.简单选择排序

    
    Sub  选择排序()
    Dim i, j, MinIndex As Integer
    Dim MinValue As String
    arr = Range("a1:a10")
     For i = 1 To UBound(arr)
        MinValue = arr(i, 1) '将第一个值先默认为最小值
        MinIndex = i         '记录最小值的索引位置
        For j = MinIndex + 1 To UBound(arr)
            If arr(j, 1) < MinValue Then
                MinValue = arr(j, 1)
                MinIndex = j
            End If
      	Next
        '以此和当前的最小值做对比,比较出后面的最小值并记录 值及索引的位置
        '因为小的值我们都放在最前面,所以遍历只需从当前值的后面开始就可以了,节省时间
        
        If MinIndex > i Then
            arr(MinIndex, 1) = arr(i, 1)
            arr(i, 1) = MinValue
        End If
        '这里的MinIndex和i的关系会有些绕,只会有两个可能,一种是MinIndex > i(在默认最小值的后面有比当前还小的值),另一种MinIndex = i :(在最小值的后面没有找到比当前值的再小的)。
        '【不出现MinIndex < i的情况,只为理解,加不加基本没有影响】
     Next
    [b1].Resize(UBound(arr), 1) = arr
    End Sub
    

    2.冒泡排序

    原理:
    1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    3、针对所有的元素重复以上的步骤,除了最后一个。
    4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
    请添加图片描述

    Sub 冒泡排序()
    arr = Range("a1:a10")
    For j = 1 To UBound(arr)
        For i = 1 To UBound(arr) - 1
              If arr(i, 1) > arr(i + 1, 1) Then
                MinStr = arr(i + 1, 1)
                arr(i + 1, 1) = arr(i, 1)
                arr(i, 1) = MinStr
            End If
        Next
    Next j
    [b1].Resize(UBound(arr), 1) = arr
    End Sub
    
    类别说明
    选择排序缺点:不稳定,具体怎么不问题不知道。。优点:速度要比冒泡排序快很多
    冒泡排序缺点:速度很慢。。优点:稳定

    太多了 ,其他的在这里插入图片描述

    展开全文
  • Excel VBA多关键字数据排序

    千次阅读 2020-02-21 19:12:21
    使用Range对象的Sort方法区域进行排序时,同时最多只能指定3个关键字,当需要按照超过3个关键字区域进行排序时,可以通过多次执行Sort方法实现。需要注意的是,在排序时应按照各关键字的倒叙顺序。例如,如果...

    关注微信公众号:VBA168
    每天更新Excel VBA经典代码,祝你工作和学习更轻松!

    使用Range对象的Sort方法对区域进行排序时,同时最多只能指定3个关键字,当需要按照超过3个关键字对区域进行排序时,可以通过多次执行Sort方法实现。需要注意的是,在排序时应按照各关键字的倒叙顺序。例如,如果按照A→B→C→D的关键字顺序进行排序,则应按D→C→B→A的顺序执行Sort方法。

    在这里插入图片描述
    图1 带排序数据

    如图1所示数据表中,需要按"总成绩"、“基础知识”、"教育学"和"心理学"的成绩降序排列,实例代码如下。

    Sub SortByKeysA()
         With Range("A1")
             .Sort Key1:="心理学", order1:=xlDescending, Header:=xlYes
             .Sort Key1:="教育学", order1:=xlDescending, Header:=xlYes
             .Sort Key1:="基础知识", order1:=xlDescending, Header:=xlYes
             .Sort Key1:="总成绩", order1:=xlDescending, Header:=xlYes
         End With
     End Sub
    

    运行以上过程,结果如图2所示。在这里插入图片描述
    图2 数据排序结果​

    使用Range对象的Sort方法对区域进行超过3个关键字排序时,需要多次执行Sort方法,而通过Worksheet对象的Sort方法则可以一次完成。如下示例代码实现与上面示例代码相同的排序功能。

    Sub MoreKeySort()
         With ActiveSheet.Sort.SortFields
             .Clear
             .Add Key:=Range("G1"), SortOn:=xlSortOnValues, Order:=xlDescending
             .Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlDescending
             .Add Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlDescending
             .Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlDescending
         End With
         With ActiveSheet.Sort
             .SetRange Range("A1").CurrentRegion
             .Header = xlYes
             .Apply
         End With
     End Sub
    

    第3行代码清除工作表所有的SortFields对象。

    第4~7行分别在Sort对象中添加SortFields对象。SortFields对象的Add方法创建新的排序字段,并返回SortFields对象,其语法格式如下。

    Add(Key, SortOn, Order, CustomOrder,  DataOption)
    

    该方法的各参数分别对应于Range对象Sort方法的参数。

    第10行代码指定Sort对象的排序区域。

    第11行代码指定排序区域包含标题。

    第12行代码应用工作表排序。

    展开全文
  • 一 问题描述,列非空数据重排--进化:删除非空数据后重排 (1)原始问题 我想把下表这样的一些数据,转化为,每列数据都往上对齐 数据里暂时没有空行,但实际上如果有空行,我是想删除空行的 肯定不能手动搞吧,...
  • 学习VBA的同学经常会用到数组的排序,网上介绍的程序算法一般都是举例一维数组, 而一般实际使用时更多的需要二维数组进行排序,本人结合大家分享的冒泡排序算法 编写了二维数组的冒泡排序实例,供大家参考。...
  • Excel VBA自定义序列排序

    千次阅读 2020-02-22 19:52:09
    在图1中所示的数据集中,如果希望按单元格区域E2:E6所列序列进行排序,需要先使用AddCustomList方法为应用程序添加自定义序列,示例代码如下。 Sub SortByLists() Dim avntList As Variant, lngNum As Long ...
  • vba excel排序 Excel VBA单击“形状以进行排序” (Excel VBA Click Shape to Sort Column)People are lazy! Shocking, I know, but who wants to click twice in Excel, if you can do the same thing by only ...
  • vba 实现桶排序

    2020-12-26 22:22:12
    排序对数据的要求非常严格;且最好是能够轻松切分成均匀块。 PriorityQueue 由优先队列改写,这里是为了方便演示,实际操作中,不允许破环优先队列内部 ' 优先队列 Private pq() As Variant Private n As ...
  • 数字排序的方法有很多,最简单的方式可能就是下面两种方法了。 =SMALL($G29:29:29:G37,1*ROW(A1)-1+COLUMN(A1)) =SMALL(G29:G37,ROW(A1:A9)) 这两行代码虽然都是用了SMALL函数,原理也是一样的,但是实用性还是有很...
  • 快速排序快速实现三向切分 快速实现 Sub debugTest() Dim a() As Variant a = Array(6, 2, 5, 3, 7, 4, 6) sort a Debug.Print 1 End Sub Sub sort(a() As Variant) doSort a, LBound(a), UBound(a) End...
  • Excel VBA一行代码搞定分组排序

    千次阅读 2019-12-08 19:14:56
    最近很多小伙伴都被分组排序所困扰,Excel没有现成的分组排序功能,想要这功能基本都是靠录制宏.但是一旦录制宏,你就可以看到一长串不知道用不用得上,又不敢随便删除的代码 录制宏虽然好用,但是很容易有坑,例如你录制...
  • VBA中实现数组排序的多种方法

    万次阅读 2015-08-25 09:40:59
    VBA里面没有现成的Sort方法可以使用,VBA里面要对数组进行排序,现有的通常做法: 1,通过单元格赋值以后利用工作表里的Sort方法进行排序, 2,通过SQL实现,也需要调用单元格区域存放数据, 3,直接写循环语句...
  • VBA自定义排序

    2019-10-22 09:03:18
    EXCEL自定义排序最多只能有255个值,超过了就不能用自定义序列了,使用以下方法 求助excelhome论坛得出的答案 Sub 自定义排序() Application.ScreenUpdating = False '排序标准 Dim d As Object Set d = ...
  • vba二维数组排序及转为一维数组

    千次阅读 2020-09-03 23:02:34
    = "'" & sht.Cells(i + 2, 1) & "'" arr(i, 2) = Round(sht.Cells(i + 2, "R") * 100, 2) Next '排序 For i = 1 To 8 For j = i + 1 To 8 If arr(i, 2) (j, 2) Then temp1 = arr(j, 1): temp2 = arr(j, 2) arr(j, 1)...
  • 使用vba实现excel 列的快速排序

    千次阅读 2019-01-10 11:39:51
    Sub test2()  Dim r%, i%  With Worksheets("sheet2")  r = .Cells(.Rows.Count, 1).End(xlUp).Row  .Sort.SortFields.Clear  .Sort.SortFields.Add Key:=.Range("A1:E1"...
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第65讲内容:从字典提取数据后,实现乱序排序.对于排序而言,方式有很多,有升序,有降序,今日我们讲解既不是升序也不是降序,是乱序.为什么会有这种排序呢?...
  • 在实际业务中,有一些场景需要一组列表数据先分组后然后组内排序,这时不能单纯的使用传统的group by和order by语句了,因为会提示xxxx字段必须在group by聚合函数中,为了解决此问题,我们可以使用ROW_NUMBER ( ) ...
  • VBA 数据透视表的创建

    千次阅读 2021-01-21 15:21:37
    方法 读/写 值类别 默认值 说明 .ColumnGrand ...数据透视表在刷新或移动域时自动设置格式 ...如果数据透视表在有错误的单元格中显示用户自定义的错误字符串,则该值为 True。 .ErrorString 返回...
  • VBA 排序之Sort说明

    千次阅读 2020-06-18 09:29:47
    Sub 排序之Sort() Sheet3.Range("A1:CN6").Sort Key1:=Range("N1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=n + 1, MatchCase:=True '↑↑↑↑↑↑↑↑....以上为实际操作时的代码写法,特别注意...
  • 在excel工作簿中有多个工作表,由于个人需要,每个工作表中某一值的比较大小后,然后进行排序。 由于vba中字典对应值比较难以排序,所以就分为两步 第一步是提取工作表名和对应字段写到工作表中: Sub ...
  • 2、首先将Sheet2即一车间中的数据按照时间顺序进行排列(这里可以尝试采用代码将Sheet2中乱序的数据按照折半查找方法直接插入至总表格内,本人直接在excel中直接排序,后期更新方法),然后读取每个表格中每行数据中...
  • 现在希望能够将该表数据以C列(科室)按照“外妇科l手术室l内儿科l西医科l中医科l耳鼻喉科I放射科l检验科l超室|口腔科l针灸科I西药房l中药房l收费室J疾控科l合管办|后勤科”的依次顺序进行排序,如何利用VBA实 ...
  • vba-Sort 函数工作表排序的方法

    千次阅读 2019-02-21 13:32:00
    来源:... 360doc@途之人 Range("待排序数据区域").Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orient...
  • VB编辑器,在N1所在列后边添加数据  ### 特别注意r是对象  sub demo()  dim r as range    If Cells(i, 58) = 0 Then      Set r = Sheets("改动表").Range("N1", Sheets("改动...
  • VBA示例_高级筛选

    2018-06-27 08:27:36
    excel,vba,高级筛选示例代码及文件 Sub ɸѡ() ' ' ɸѡ Macro ' aa ¼Ç¼µÄºê 2006-3-7 ' ' Range("J7").Select Sheets("Ã÷ϸ±í").Range("A1:G22").AdvancedFilter Action:=xlFilterCopy, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,822
精华内容 1,128
关键字:

vba对数据进行排序