打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何对Excel单元格内英文字符串进行排序?


    这个问题在实际工作中还是会经常遇到的。比如,行政执法考试中的多项选择题,怎么判断答案是否正确?如下图所示:


    某个工作表内有一张考试卷,在答第1条多项选择题时,标准答案是BCD(这个应该是按顺序排列的),但答题人员因为紧张等原因,输入的答案是CBDB,这个答案也应该算正确的。为了在程序中能方便地判断出答题是否正确,编写程序代码的人员就要在该工作表的Worksheet_Change事件中,去掉重复字母“B”,并按A-Z顺序对该单元格内字符重新排序,结果是BCD。这样,再与“标准答案”直接比较,就简单了。

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    
    '作用:把纯英文字符串的单元格值转为大写,去掉重复值,并按A-Z顺序重新排序。
    '对含有A至Z之外其它字符的单元格,仅转化为大写,不作其它处理。
    '可同时选定多个单元格,但只对要重新排序的单元格进行处理。
    
    Const iColumn As Long = 2   '要重新排序的列号是2,即B列。根据需要修改。
    Dim iASC As Integer
    
    Application.EnableEvents = False
    If iColumn >= Target.Columns(1).Column And iColumn <= Target.Columns(Target.Columns.Count).Column Then
        For i = 1 To Target.Count
            If Target(i).Column = iColumn Then
                Target(i) = UCase(Trim(Target(i)))   '转为大写
                If Len(Target(i)) > 1 Then
                    '去掉单元格中大写字母串内的重复值,并按A-Z顺序重新排序
                    ReDim A2Zarr(26) As String
                    For k = 1 To Len(Target(i))
                        iASC = Asc(Mid(Target(i), k, 1))   'A至Z值分别是65至90
                        If iASC < 65 Or iASC > 90 Then  '含有A至Z之外的其它字符
                                                        '该单元格保留原值,不重新排序
                            GoTo errHandle
                        End If
                        A2Zarr(iASC - 64) = Chr(iASC)    'A至Z分别保存在A2Zarr(1)至在A2Zarr(26)中
                    Next
                    Target(i) = Join(A2Zarr, "")
                End If
errHandle:
            End If
        Next
    End If
    Application.EnableEvents = True

End Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Excel – 另类排序,按单元格填充色顺序排序
Excel排序时候发现排序之后更加的混乱怎么办
Excel中Small和Column函数配合实现排序
合并单元格也能排序,一拆一合,脑力崩溃
按指定部门排序怎么解决?Excel按行排序及按单元格字符串长度排序案例教程
跨工作表求和的完美方法终于找到了。Excel INDIRECT函数跨工作表引用案例详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服