这个问题在实际工作中还是会经常遇到的。比如,行政执法考试中的多项选择题,怎么判断答案是否正确?如下图所示:
![]() |
某个工作表内有一张考试卷,在答第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
联系客服