如何在vba中做这样的处理:
输入一个字符串(例如 JAEHG)希望他输出时是按照字母从A到Z的顺序输出(AEGHJ)
vba中字符串按照顺序排列
答案:2 悬赏:20 手机版
解决时间 2021-12-18 05:08
- 提问者网友:最美的风景
- 2021-12-17 21:44
最佳答案
- 五星知识达人网友:低血压的长颈鹿
- 2021-12-17 23:08
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False '屏蔽事件响应
If Target.Address = "$A$1" Then
a = Range("$A$1") '取字符串到a
b = Len(a) '计算字符串字符数
Dim arr
ReDim arr(1 To b)
For i = 1 To b
arr(i) = Mid(a, i, 1) '拆分字符串到数组arr
Next i
'排序
For i = 1 To b - 1 '外循环次数
For j = 1 To b - i '内循环次数
If Asc(arr(j)) > Asc(arr(j + 1)) Then '比下一个大则交换位置
tmp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = tmp
End If
Next j
Next i
a = "" '清空a中字符串
For i = 1 To b
a = a & arr(i) '数组转字符串
Next i
Range("$A$1") = a '排序后字符串返回原单元格
End If
Application.EnableEvents = True '开启事件响应
End Sub 在工作表标签上点右键点查看代码,粘贴上面代码。然后在A1单元格输入字符串查看效果。
Application.EnableEvents = False '屏蔽事件响应
If Target.Address = "$A$1" Then
a = Range("$A$1") '取字符串到a
b = Len(a) '计算字符串字符数
Dim arr
ReDim arr(1 To b)
For i = 1 To b
arr(i) = Mid(a, i, 1) '拆分字符串到数组arr
Next i
'排序
For i = 1 To b - 1 '外循环次数
For j = 1 To b - i '内循环次数
If Asc(arr(j)) > Asc(arr(j + 1)) Then '比下一个大则交换位置
tmp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = tmp
End If
Next j
Next i
a = "" '清空a中字符串
For i = 1 To b
a = a & arr(i) '数组转字符串
Next i
Range("$A$1") = a '排序后字符串返回原单元格
End If
Application.EnableEvents = True '开启事件响应
End Sub 在工作表标签上点右键点查看代码,粘贴上面代码。然后在A1单元格输入字符串查看效果。
全部回答
- 1楼网友:动情书生
- 2021-12-18 00:04
楼主,这个应该调用什么api能很快搞定,不过我一般用vba主要处理数据啥的,我大概试了下,用下面的方法也可行的。
sub test()
dim arr() as string, brr() as string
dim crr() as string
dim i as long, k as long
'随便定义了2个数据,按楼主说的,brr的所有元素在arr都存在
arr = split("a,b,c,d,e,f,g", ",")
brr = split("b,d,g", ",")
'用crr来存取 arr-brr的元素,crr的大小如下
redim crr(ubound(arr) - ubound(brr) - 1)
'开整,遍历arr,把每个brr中没有的放到crr中就好了
for i = 0 to ubound(arr)
if ubound(filter(brr, arr(i))) <> 0 then
crr(k) = arr(i)
k = k + 1
end if
next i
end sub
我试过了,可以滴。方法思路就是这个啦
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯