Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 11083|回复: 14

[已解决]判断是否为汉字

[复制链接]
发表于 2011-7-30 13:14 | 显示全部楼层 |阅读模式

  1. Sub Test()
  2.     Dim Str As String
  3.     Str = InputBox("请输入一个字符:")
  4.     If Len(Str) <> 0 Then
  5.         If Asc(Str) < 0 Then MsgBox "汉字"
  6.     End If
  7. End Sub
复制代码
如果输入的是")",会误认为汉字。
请问如题,不用正则表达式可以么?
谢谢!
最佳答案
2011-7-30 13:23
本帖最后由 搁浅2008 于 2011-7-30 13:25 编辑

Like "[一-龥]" 表示所有汉字

复制代码
  1. Sub Test()
  2. Dim Str As String
  3. Str = InputBox("请输入一个字符:")
  4. If Len(Str) <> 0 Then
  5. If Str Like "[一-龥]" Then MsgBox "汉字"
  6. End If
  7. End Sub
复制代码

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-7-30 13:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 搁浅2008 于 2011-7-30 13:25 编辑

Like "[一-龥]" 表示所有汉字

复制代码
  1. Sub Test()
  2. Dim Str As String
  3. Str = InputBox("请输入一个字符:")
  4. If Len(Str) <> 0 Then
  5. If Str Like "[一-龥]" Then MsgBox "汉字"
  6. End If
  7. End Sub
复制代码

回复

使用道具 举报

发表于 2011-7-30 13:39 | 显示全部楼层
疯子:以下的不知道满足你的要求不
这个是只有汉字的:
  1. Sub Test()
  2. Dim Str1, Str2, i, m
  3. Str1 = InputBox("请输入一个字符:")
  4. Do While Len(Str1) > i
  5.     i = i + 1
  6.     Str2 = Mid(Str1, i, 1)
  7.     If (Asc(Str2) < 0 And Asc(Str2) > -22000) Or Asc(Str2) < -24300 Then
  8.         GoTo 100
  9.     Else
  10.         Str1 = Replace(Str1, Str2, "")
  11.         i = i - 1
  12.     End If
  13. 100
  14. Loop
  15. MsgBox "是汉字的是:" & Str1
  16. End Sub
复制代码
这个是包含逗号,句号,感叹号,问号的(都是中文状态下的哈):
  1. Sub Test1()
  2. Dim Str1, Str2, i, m
  3. Str1 = InputBox("请输入一个字符:")
  4. Do While Len(Str1) > i
  5.     i = i + 1
  6.     Str2 = Mid(Str1, i, 1)
  7.     If Str2 = "," Or Str2 = "。" Or Str2 = "?" Or Str2 = "!" Or (Asc(Str2) < 0 And Asc(Str2) > -22000) Or Asc(Str2) < -24300 Then
  8.         GoTo 100
  9.     Else
  10.         Str1 = Replace(Str1, Str2, "")
  11.         i = i - 1
  12.     End If
  13. 100
  14. Loop
  15. MsgBox "是汉字的是:" & Str1
  16. End Sub
复制代码
回复

使用道具 举报

发表于 2011-7-30 13:40 | 显示全部楼层
这里面的-22000和-24300都是用笨办法给查找出来的
回复

使用道具 举报

 楼主| 发表于 2011-7-30 13:57 | 显示全部楼层
谢谢搁浅!

1)为什么范围是"[一-龥]"
1.rar (270.88 KB, 下载次数: 6)

点评

Unicode应该是用2个字节表示,两个字节能表示的有符号数是-32,768 到 32,767,如果表无符号数是0-65536.C语言中是有无符号数这个说法的,而VBA里Integer是表示的有符号数。这应该是把原来的无符号数转换成了Integer  发表于 2011-7-30 15:20
回复

使用道具 举报

 楼主| 发表于 2011-7-30 14:05 | 显示全部楼层
EXCEL-YQ 发表于 2011-7-30 13:40
这里面的-22000和-24300都是用笨办法给查找出来的

谢谢yq!

刚刚回帖去了,没发现,不好意思。
3楼的方法,特别是这些数字,是怎么求来的呢?


回复

使用道具 举报

 楼主| 发表于 2011-7-30 14:08 | 显示全部楼层
学习两位的方法了!
主要想理解,这些方法(中的数字)是怎么来的。
回复

使用道具 举报

发表于 2011-7-30 14:17 | 显示全部楼层
爱疯 发表于 2011-7-30 14:05
谢谢yq!

刚刚回帖去了,没发现,不好意思。

疯子,不好意思!这个我现在帮不了你啦。这个还是我们以前在V3入门中的字符串处理的时候弄的。现在过了2年半多了,也都忘记原文件在哪里了
回复

使用道具 举报

发表于 2011-7-30 14:23 | 显示全部楼层
搁浅的方法很好。这个还更简洁,和我用的方法是一样的,只是我们没有找到他的那一规律
回复

使用道具 举报

发表于 2011-7-30 14:32 | 显示全部楼层
  1. Sub Test()
  2.     Dim Str As String
  3.     Str = InputBox("请输入一个字符:")
  4.     Str = Left(Str, 1)
  5.     If Len(Str) <> 0 Then
  6.         If Str Like "[一-龥]" Then
  7.             MsgBox "汉字"
  8.         End If
  9.     End If
  10. End Sub
复制代码
已经收藏此代码!{:101:}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 15:28 , Processed in 0.316419 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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