永发信息网

vba中字符串按照顺序排列

答案:2  悬赏:20  手机版
解决时间 2021-12-18 05:08
  • 提问者网友:最美的风景
  • 2021-12-17 21:44
如何在vba中做这样的处理:
输入一个字符串(例如 JAEHG)希望他输出时是按照字母从A到Z的顺序输出(AEGHJ)
最佳答案
  • 五星知识达人网友:低血压的长颈鹿
  • 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单元格输入字符串查看效果。
全部回答
  • 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 我试过了,可以滴。方法思路就是这个啦
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯