Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: 张雄友

[已解决]去字母

[复制链接]
发表于 2013-6-17 21:48 | 显示全部楼层
  1. Sub 方法3()

  2.     Dim i As Long, j As Long, k As Long
  3.     Dim arr(), result()

  4.     Application.ScreenUpdating = False
  5.     Application.DisplayAlerts = False
  6.     Application.EnableEvents = False
  7.     Application.Calculation = xlCalculationManual


  8.     If TypeName(Selection) > "Range" Then
  9.         MsgBox "所选对象非单元格"
  10.         GoTo Quit
  11.     End If
  12.     Dim objRegExp As Object
  13.     Set objRegExp = CreateObject("VBScript.regExp")
  14.     With objRegExp
  15.         .Global = True
  16.         .Pattern = "[a-z,A-Z]"

  17.         For k = 1 To Selection.Areas.Count
  18.             '防止区域只有一个单元格,这样赋值就不存在数组一说了。
  19.             If Selection.Areas(k).Count = 1 Then
  20.                 Selection.Areas(k).Value = .Replace(Selection.Areas(k).Value, "")
  21.             Else
  22.                 arr = Selection.Areas(k).Value
  23.                 ReDim result(1 To UBound(arr), 1 To UBound(arr, 2))
  24.                 For i = LBound(arr) To UBound(arr)
  25.                     For j = LBound(arr, 2) To UBound(arr, 2)
  26.                         If .test(arr(i, j)) Then
  27.                             result(i, j) = .Replace(arr(i, j), "")
  28.                         Else
  29.                             result(i, j) = arr(i, j)
  30.                         End If
  31.                     Next
  32.                 Next
  33.                 Selection.Areas(k).Value = arr
  34.             End If
  35.         Next
  36.     End With
  37.     MsgBox "OK"

  38. Quit:
  39.     Application.ScreenUpdating = True
  40.     Application.DisplayAlerts = True
  41.     Application.EnableEvents = True
  42.     Application.Calculation = xlCalculationAutomatic

  43. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2013-6-17 21:55 | 显示全部楼层
hwc2ycy 发表于 2013-6-17 21:48

选中后执行宏,无法实现。

无法实现.rar

7.69 KB, 下载次数: 2

回复

使用道具 举报

发表于 2013-6-17 22:00 | 显示全部楼层
    If TypeName(Selection) > "Range" Then
这名有问题,我可能打落了。
应该是<>
回复

使用道具 举报

发表于 2013-6-17 22:02 | 显示全部楼层
Selection.Areas(k).Value = arr

这句也写误了,应该是 result
回复

使用道具 举报

发表于 2013-6-17 22:03 | 显示全部楼层    本楼为最佳答案   
不好意思,我这没测。
  1. Sub 方法3()

  2.     Dim i As Long, j As Long, k As Long
  3.     Dim arr(), result()

  4.     Application.ScreenUpdating = False
  5.     Application.DisplayAlerts = False
  6.     Application.EnableEvents = False
  7.     Application.Calculation = xlCalculationManual


  8.     If TypeName(Selection) <> "Range" Then
  9.         MsgBox "所选对象非单元格"
  10.         GoTo Quit
  11.     End If
  12.     Dim objRegExp As Object
  13.     Set objRegExp = CreateObject("VBScript.regExp")
  14.     With objRegExp
  15.         .Global = True
  16.         .Pattern = "[a-z,A-Z]"

  17.         For k = 1 To Selection.Areas.Count
  18.             '防止区域只有一个单元格,这样赋值就不存在数组一说了。
  19.             If Selection.Areas(k).Count = 1 Then
  20.                 Selection.Areas(k).Value = .Replace(Selection.Areas(k).Value, "")
  21.             Else
  22.                 arr = Selection.Areas(k).Value
  23.                 ReDim result(1 To UBound(arr), 1 To UBound(arr, 2))
  24.                 For i = LBound(arr) To UBound(arr)
  25.                     For j = LBound(arr, 2) To UBound(arr, 2)
  26.                         If .test(arr(i, j)) Then
  27.                             result(i, j) = .Replace(arr(i, j), "")
  28.                         Else
  29.                             result(i, j) = arr(i, j)
  30.                         End If
  31.                     Next
  32.                 Next
  33.                 Selection.Areas(k).Value = result
  34.             End If
  35.         Next
  36.     End With
  37.     MsgBox "OK"

  38. Quit:
  39.     Application.ScreenUpdating = True
  40.     Application.DisplayAlerts = True
  41.     Application.EnableEvents = True
  42.     Application.Calculation = xlCalculationAutomatic
  43. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-17 22:19 | 显示全部楼层
hwc2ycy 发表于 2013-6-17 22:03
不好意思,我这没测。

Selection.NumberFormatLocal = "@"

加多这句就更好了,因为不设置为文本格式,0就不见了。
回复

使用道具 举报

发表于 2013-6-17 22:29 | 显示全部楼层
恩,这个有道理,我习惯是加',不修改单元格格式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 11:07 , Processed in 0.586800 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表