excel中提取字母和数字

rayayanami 2016-07-15 10:39:55
表内容大概是

D5-78某某工厂
某某公司XHJ-123

这样,要求只提取数字和字母,去掉汉字。

Dim i, j, k, h As Integer
Dim l, m, n As String


For i = 1 To 995
n = "a"
k = Len(Cells(i, 1))
m = Cells(i, 1)
For j = 1 To k

l = Mid(m, j, 1)
If LenB(l) = 1 Then n = n & l

Next j
Sheet2.Cells(i, 2).Value = n
Next i

每次到LenB(l)这里,这个值都是2,为啥……求高手赐教,拜谢。
...全文
1577 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-07-27
  • 打赏
  • 举报
回复
在VB6中:

Dim hz As String
Dim yw As String
Dim hzyw As String
hz = "汉字"
yw = "English"
hzyw = "汉字English"
Debug.Print Len(hz), Len(yw), Len(hzyw)
Debug.Print LenB(hz), LenB(yw), LenB(hzyw)
Debug.Print LenB(StrConv(hz, vbFromUnicode)), LenB(StrConv(yw, vbFromUnicode)), LenB(StrConv(hzyw, vbFromUnicode))

' 2             7             9 
'4             14            18 
'4             7             11 
of123 2016-07-18
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim strItems(1) As String, strSource As String, strTemp As String
Dim i As Integer, j As Integer

strItems(0) = "D5-78某某工厂"
strItems(1) = "某某公司XHJ-123"

For i = 0 To 1
    strTemp = ""
    strSource = strItems(i)
    For j = 1 To Len(strSource)
        If Not Mid(strSource, j, 1) Like "*[!0-9A-Za-z\-]*" Then strTemp = strTemp & Mid(strSource, j, 1)
    Next j
    
    MsgBox strTemp
Next i


End Sub
舉杯邀明月 2016-07-16
  • 打赏
  • 举报
回复
在VB6或VBA中,不能以Len()与LenB() 的“差值关系”来判断一个字符串中有多少中文、多少西文。 因为它们都是用的Unicode格式存储字符串内容,不管中、西文,都是每个字符占2字节。 也就是说,假设:某字符串sText ,不管它的内容是全中文、全西文、还是中西混合的内容,        LenB(sText)恒等于 Len(sText) × 2 (即使是“空中字符串”,也符合这个关系式: 0 = 0 × 2) 另外说一下,你的“变量声明语句”的写法是不正确的。 照你的写法,只有h、n 是指定的数据类型,其它几个都是 Variant 类型。
Private Sub Main()
'Dim i, j, k, h As Integer
'Dim l, m, n As String
   Dim i%, j%, k%, h As Integer
   Dim m   As String

   'For i = 1 To 995
   For i = 1 To 4
      m = Sheet1.Cells(i, 1).Text
      h = Len(m)
      For j = 1 To h
         If (0 < Asc(Mid$(m, j, 1))) Then Exit For
      Next
      If (j > h) Then
         m = "***"      ' 文字全是中文
      Else
         For k = j To h
            If (0 > Asc(Mid$(m, k, 1))) Then Exit For
         Next
         m = Mid$(m, j, k - j)
      End If
      Sheet1.Cells(i, 2).Value = m
   Next
End Sub
'处理结果:
' D5-78某某工厂       D5-78
' 某某公司XHJ-123     XHJ-123
' 全中文字符串测试    ***
' ABC123456           ABC123456
无·法 2016-07-16
  • 打赏
  • 举报
回复
Private Sub Main()
    Dim i%, reg As Object
    Set reg = CreateObject("vbscript.regExp")
    reg.Global = True
    reg.Pattern = "[\u4e00-\u9fa5]" '匹配中文都删除,如果只保留数字字母用"[^\da-zA-Z\-]"
    For i = 1 To 995
        Sheet1.Cells(i, 2).Value = reg.Replace(Sheet1.Cells(i, 1).Text, "")
    Next
    Set reg = Nothing
End Sub
不放弃任何使用正则的机会,哈哈
rayayanami 2016-07-16
  • 打赏
  • 举报
回复
拜谢,学习了
rayayanami 2016-07-15
  • 打赏
  • 举报
回复
995是一共995条记录,思路是用LenB函数判断字节位数,去掉汉字

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧