使用VBA查看excel表格排序的参数

(整期优先)网络出版时间:2024-06-07
/ 2

使用VBA查看excel表格排序的参数

  吴成

三亚技师学院 海南省三亚市  572000

【摘要】

VBA对excel表格排序是通过sort对象来实现的。查看工作表中的数据是否排序,排序的相关参数,可以使用Sort对象的属性。

【关键字】

VBA  excel  表格排序 sort对象

使用VBA对excel表格排序是通过sort对象来实现的。先设置好Sort对象的属性后,再调用Sort对象的方法apply,就可以了。

如果想要查看工作表中的数据是否排序,排序的相关参数,一样可以使用Sort对象的属性。

Sort对象的属性如下:

SortFields                    'SortField的集合

SortField                     '排序的关键字、排序的依据、次序

SortMethod = xlStroke/ xlPinYin  '按笔画还是拼音

MatchCase =Yes/False          '是否区分大小写

Orientation = xlTopToBottom/     '排序方向:xlSortColumns或xlTopToBottom从上到下,按列排序;xlSortRows或xlLeftToRight从左到右,按行排序

Header = xlYes                 '是否带表头:xlYes将第一栏视作标题栏,不参与排序

下面通过实例来说明:

将右图表中的数据按“一班、二班、三班”的顺序排序,班级相同的按性别升序排列,性别相同的按姓名降序排列,按笔划排序。排序完成后通过VBA查看排序的参数,显示在新建的工作表sortcheck中。

Sub b1_Click()

Dim mySheetName As String, mySheetNameTest As String

Dim ws As Worksheet, wsr As Worksheet

mySheetName = "sortcheck"

Set ws = ThisWorkbook.Worksheets("排序")

Set wsr = ThisWorkbook.Worksheets(mySheetName)

On Error Resume Next

mySheetNameTest = Worksheets(mySheetName).Name

If Err.Number = 0 Then

        MsgBox "名为 ''" & mySheetName & "'' 的工作表已存在。"

    Else

        Err.Clear

        Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "sortcheck"

    End If

wsr.Range("A1").Value = "关键字数量"

wsr.Range("B1").Value = ws.Sort.SortFields.Count

wsr.Range("A2").Value = "数据是否包含标题"

wsr.Range("B2").Value = ws.Sort.Header

wsr.Range("A3").Value = "是否区分大小写"

wsr.Range("B3").Value = ws.Sort.MatchCase

wsr.Range("A4").Value = "排序方向"

wsr.Range("B4").Value = ws.Sort.Orientation

wsr.Range("A5").Value = "排序数据区域"

wsr.Range("B5").Value = ws.Sort.Rng.Address

wsr.Range("A6").Value = "按笔划还是字母"

wsr.Range("B6").Value = ws.Sort.SortMethod

Dim i, j As Integer

j = 1

For i = 1 To ws.Sort.SortFields.Count

    wsr.Range("A" & j + 7).Value = "第" & i & "个关键字的字段名"

    wsr.Range("B" & j + 7).Value = ws.Sort.SortFields.Item(i).Key(0)

    j = j + 1

    wsr.Range("A" & j + 7).Value = "排序依据"

    wsr.Range("B" & j + 7).Value = ws.Sort.SortFields.Item(i).SortOn

    j = j + 1

    wsr.Range("A" & j + 7).Value = "升序还是降序"

    wsr.Range("B" & j + 7).Value = ws.Sort.SortFields.Item(i).Order

    j = j + 1

    wsr.Range("A" & j + 7).Value = "自定义次序"

    wsr.Range("B" & j + 7).Value = ws.Sort.SortFields.Item(i).CustomOrder

    j = j + 1

    wsr.Range("A" & j + 7).Value = "关键字中有文本格式的数字选择按数值或按文本排序"

    wsr.Range("B" & j + 7).Value = ws.Sort.SortFields.Item(i).DataOption

    j = j + 2

Next i

End Sub

运行结果如下:

相关数值的意义如下:

Name

Value

Description

XlSortOrder Enumeration                   升序还是降序

xlAscending

1

升序排列,默认。

xlDescending

2

降序排列。

XlOrientation   Enumeration               排序方向

xlSortColumns

1

按列排序,默认。

xlSortRows

2

按行排序。

XlSortMethod  Enumeration               按笔划还是拼音字母

xlPinYin

1

按拼音字母顺序排列,默认。

xlStroke

2

按笔划排列。

XlSortOn Enumeration                     排序依据

SortOnCellColor

1

按单元格颜色排序。

SortOnFontColor

2

按字符颜色排序。

SortOnIcon

3

按单元格图标排序。

SortOnValues

0

按数值排序,默认。

xlSortDataOption                        关键字中有文本格式的数字选择按数值或按文本排序

xlSortNormal

0

将数字与以文本储存的数字分别排序,默认。

xlSortTextAsNumbers

1

将以文本储存的数字与数字一样排序。

XlYesNoGuess Enumeration                数据是否包含标题

xlGuess

0

Excel自动判断数据是否包含标题。

xlNo

2

数据不包含标题,默认。

xlYes

1

数据包含标题。

结束语:

如果想要自动检查学生排序操作的结果并给出评分可以通过VBA的if或是switch case语句来实现。关键是理解SortFields.Item的意义,SortFields.Item(i)实际是关键字的种数,本例中就是有3种关键字,i从1到3。即有3个SortField,关键字的字段名分别对应班级、性别与姓名。另外如果使用python win32com来检查,结果得到的就是上面的数字,如果要排序在设置属性时也应该是对应的数字而不是xlAscending之类的变量名,python中无法识别会报错。

参考文献:

Explore Excel 2013 developer resources

SORT 函数 - Microsoft 支持 

https://support.microsoft.com/zh-cn/office/sort-%E5%87%BD%E6%95%B0-22f63bd0-ccc8-492f-953d-c20e8e44b86c?rs=zh-cn&ui=zh-cn&ad=cn

Excel VBA解读(54):排序——Sort方法 卡美力软件开发组成员 Member of CAMEL Software Studio

http://www.360doc.com/content/17/0507/08/30583536_651749135.shtml