ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: fanjy

[分享]在VBA中处理字符串

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:31 | 显示全部楼层
本帖已被收录到知识树中,索引项:文本处理和正则
2.8 删除空格
LTrim函数删除字符串前面的空格;
RTrim函数删除字符串后面的空格;
Trim函数删除两头的空格。
示例如下:
MyString = "  <-Trim->  "    ' 设置字符串初值
TrimString = LTrim(MyString)    ' TrimString = "<-Trim->  "
TrimString = RTrim(MyString)    ' TrimString = "  <-Trim->"
TrimString = LTrim(RTrim(MyString))    ' TrimString = "<-Trim->"
' 只使用 Trim 函数也同样将两头空格去除
TrimString = Trim(MyString)    ' TrimString = "<-Trim->"

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2.9 返回字符代码
Asc函数返回指定字符串表达式中第一个字符的字符代码。示例如下:
MyNumber = Asc("A")    ' 返回 65
MyNumber = Asc("a")    ' 返回 97
MyNumber = Asc("Apple")    ' 返回 65
[编程方法和技巧]
(1) 在数据验证中用Asc来决定一些条件,如第一个字符是大写还是小写、是字母还是数字。
Private Sub CommandButton1_Click()
  Dim sTest As String
  Dim iChar As Integer
  sTest = TextBox1.Text
  If Len(sTest) > 0 Then
    iChar = Asc(sTest)
    If iChar >= 65 And iChar <= 90 Then
      MsgBox "第一个字符是大写"
    ElseIf iChar >= 97 And iChar <= 122 Then
      MsgBox "第一个字符是小写"
    Else
      MsgBox "第一个字符不是字母"
    End If
  Else
    MsgBox "请在文本框中输入"
  End If
End Sub
(2) 用Asc函数和Chr函数来创建基本加密的方法。
Private Sub CommandButton2_Click()
  Dim MyName As String, MyEncryptedString As String
  Dim MyDecryptedString As String
  Dim i As Integer
  MyName = "fanjy"
  For i = 1 To Len(MyName)
    MyEncryptedString = MyEncryptedString & Chr(Asc(Mid(MyName, i, 1)) + 25)
  Next i
  MsgBox "您好!我的名字是" & MyEncryptedString
  For i = 1 To Len(MyName)
    MyDecryptedString = MyDecryptedString & Chr(Asc(Mid(MyEncryptedString, i, 1)) - 25)
  Next i
  MsgBox "您好!我的名字是" & MyDecryptedString
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:33 | 显示全部楼层
2.10 返回数值代表的相应字符
Chr函数返回指定字符码所代表的字符,其语法为:
Chr(charcode)
其中参数charcode代表字符码,一般为0~255。例如:
MyChar = Chr(65)   ' 返回 A
MyChar = Chr(97)   ' 返回 a
MyChar = Chr(62)   ' 返回 >
MyChar = Chr(37)   ' 返回 %
[编程方法和技巧]
(1) 使用Chr(34)将引号嵌入字符串,如
Chr(34) & sString & Chr(34)
(2) 下面列出了在调用Chr函数时比较常用的字符代码:
代码  值    描述
0   Null   相当于vbNullChar常数
8   BS   相当于vbBack常数
9   TAB   相当于vbTab常数
10   CR   相当于vbCr和vbCrLf常数
13   LF   相当于vbLf和vbCrLf常数
34   “”   引号

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:35 | 显示全部楼层
2.12 返回数组的函数
2.12.1 Filter函数
Filter函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。其语法为:
Filter(sourcearray,match[,include[,compare]])
其中,参数sourcearray必需,是要执行搜索的一维字符串数组;参数match必需,是要搜索的字符串;参数include可选,Boolean值,表示返回子串包含还是不包含match字符串,如果include为True,返回包含match子字符串的数组子集,如果include为False,返回不包含match子字符串的数组子集;参数compare可选,表示所使用的字符串比较类型,其设置值为:-1(常数为vbUseCompareOption)表示使用Option Compare语句的设置值来执行比较;0(常数为vbBinaryCompare)表示执行二进制比较;1(常数为vbTextCompare)表示执行文字比较;2(常数为vbDatabaseCompare)只用于Microsoft Access,表示基于数据库信息来执行比较。
如果在sourcearray中没有发现与match相匹配的值,Filter函数返回一个空数组;如果sourcearray是Null或不是一个一维数组,则产生错误。
Filter函数所返回的数组,其元素数是所找到的匹配项目数。
[编程方法和技巧]
(1) Filter函数也可以过滤数字值。此时,应指定Variant类型的字符串sourcearray,并用数字值给数组赋值。同时,也可以将字符串、Variant、Long或Integer数据传递给match。但应注意,返回的字符串表现为被过滤数字的字符串的形式。例如:
Sub test()
  Dim varSource As Variant, varResult As Variant
  Dim strMatch As String, i
  strMatch = CStr(2)
  varSource = Array(10, 20, 30, 21, 22, 32)
  varResult = Filter(varSource, strMatch, True, vbBinaryCompare)
  For Each i In varResult
    Debug.Print i
  Next
End Sub
将返回20,21,22,32
(2) Filter函数可以和Dictionary对象很好地配合使用。可以把Dictionary对象产生的Key值作为一种过滤Dictionary对象成员的快速方法传递给Filter函数,如:
Sub test()
  Dim i As Integer
  Dim sKeys() As Variant
  Dim sFiltered() As String
  Dim sMatch As String
  Dim blnSwitch As Boolean
  Dim oDict As Dictionary
  Set oDict = New Dictionary
  oDict.Add "Microsoft", "One Microsoft Way"
  oDict.Add "AnyMicro Inc", "31 Harbour Drive"
  oDict.Add "Landbor Data", "The Plaza"
  oDict.Add "Micron Co.", "999 Pleasant View"
  sKeys = oDict.Keys
  sMatch = "micro"
  blnSwitch = True
  '寻找包含字符串macro(不区分大小写)的所有键
  sFiltered() = Filter(sKeys, sMatch, blnSwitch, vbTextCompare)
  For i = 1 To UBound(sFiltered)
      Debug.Print sFiltered(i) & "," & oDict.Item(sFiltered(i))
  Next i
End Sub
2.12.2 Split函数
Split函数返回一个下标从零开始的一维数组,包含指定数目的子字符串。其语法为:
Split(expression[,delimiter[,limit[,compare]]])
其中,参数expression必需,表示包含子字符串和分隔符的字符串,若expression是一个长度为零的字符串(“”),该函数则返回一个没有元素和数据的空数组;参数delimiter用于标识子字符串边界的字符串字符,若忽略则使用空格(“ “)作为分隔符,若是一个长度为零的字符串则返回仅包含一个元素的数组,该元素是expression所表示的字符串;参数limit表示要返回的子字符串数,-1表示返回所有的子字符串;参数compare表示判别子字符串时使用的比较方式,其值与Filter函数的设置值相同。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:35 | 显示全部楼层
2.13 连接字符串
Join函数返回连接某数组中的多个子字符串而组成的字符串,即将数组中的字符串连接起来。其语法为:
Join(sourcearray[,delimiter])
其中,参数sourcearray必需,是包含被连接子字符串的一维数组;参数delimiter可选,代表在所返回的字符串中用于分隔子字符串的字符,若忽略则使用空(“ ”)来分隔,若为零长字符串(“”),则所有项目都连接在一起,中间没有分隔符。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:36 | 显示全部楼层
2.14 替换字符串
Replace函数返回一个被替换了的字符串,该字符串中指定的子字符串已被替换成另一个子字符串,并且替换指定次数。其语法为:
Replace(expression,find,replace[,start[,count[,compare]]])
其中,参数expression必需,表示所要替换的子字符串;参数find必需,表示要搜索到的子字符串;参数replace必需,表示用来替换的子字符串;参数start表示开始搜索的位置,若忽略,则从1开始;参数count表示进行替换的次数,缺省值是-1,表示进行所有可能的替换;参数compare表示判别子字符串时所用的比较方式,与Filter函数的设置值相同。
如果expression的长度为零,Replace返回零长度字符串(“”);如果expression为Null,则返回错误;如果find的长度为零,则返回expression的副本;如果replace的长度为零,则返回删除了所有出现find的字符串的副本;如果start的值大于expression的长度,则返回长度为零的字符串;如果count为0,则返回expression的副本。
Replace函数返回的字符串是从参数start所指定的位置开始到expression结尾已经进行过替换的字符串。
注意:
(1) 如果没有使用参数count,那么当替换较短字符串时就要注意,防止形成一个不相关的字符。
(2) 如果start值大于1,返回的字符串将从start开始,而不是从原有字符串的第一个字符开始。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-13 14:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
2.15 反向字符串
StrReverse函数返回与指定字符串顺序相反的字符串,其语法为:
StrReverse(expression)
其中,参数expression是一个字符串,应用StrReverse函数后将返回与该字符串顺序相反的字符串。如果expression是一个长度为零的字符串(“”),则返回一个长度为零的字符串;如果expression为Null,则产生一个错误。
By fanjy in 2007-3-13

TA的精华主题

TA的得分主题

发表于 2007-3-13 16:30 | 显示全部楼层
  好帖子,2.12.1 Filter函数在这之前还陌生,又学到新的东西,谢谢。

TA的精华主题

TA的得分主题

发表于 2007-3-13 16:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-13 17:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
长见识,谢谢楼主!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 22:39 , Processed in 0.033660 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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