VBA学习笔记35-2:字符串查找替换与转换

VBA学习笔记35-2:字符串查找替换与转换

学习资源:《Excel VBA从入门到进阶》第35集 by兰色幻想


二、字符串的查找与替换

1.instr

instr(字符串,要查找的字符) 在字符串里从前向后查找,从左到右计数,找到之后就停止。
Sub c1()
  Dim sr
  sr = "Excel精英培训培训论坛"
  Debug.Print InStr(sr, "培") 
End Sub

巧用:如果得出的结果大于0,就证明字符存在,可以替代search和Find使用。

Sub c11()
  Dim sr
  sr = "Excel精英培训"
  Debug.Print InStr(sr, "培") > 0 
End Sub
从前往后找,从前往后计数


2.InStrRev

InStrRev (字符串,要查找的字符) 在字符串里 从后向前查找 ,从左到右计数,找到之后就停止。(查找和计数方向相反)
Sub c2()
  Dim sr
  sr = "Excel精英培训培训论坛"
  Debug.Print InStrRev(sr, "培")
End Sub
从后往前找,从前往后计数


3.Replace

Replace(字符串,要查找的字符串,把要查找的替换成某个字符串) 替换字符串的特定字符。
Sub c5()
  Dim sr
  sr = "Excel精英培训网"
  sr = Replace(sr, "培训网", "论坛")
  Debug.Print sr
End Sub


4.mid

mid(字符串,截取的起始位置,截取长度) 从字符串中的某个位置开始截取字符。
Sub c6()
 Dim sr
  sr = "Excel精英培训网"
  Mid(sr, 8, 2) = "论坛" '指定位置替换成字符串“论坛”
  Debug.Print sr
End Sub

注意:如果截取长度和替换的字符串长度不一致,以替换的字符串长度为准。譬如上例,如果改为:

Mid(sr, 8, 3) = "论坛" 

写的截取长度为3,但“论坛”只有两个字符,也只能替换2个字符,运行结果如下:


三、字符转换

1. TRim、Ltrim和Rtrim

TRim(字符串) 删除两端空格
Ltrim(字符串) 删除左边空格
Rtrim(字符串) 删除右边空格
Dim sr
  sr = " A B BC "
  Debug.Print Trim(sr)
  Debug.Print LTrim(sr)
  Debug.Print RTrim(sr)
End Sub


2.ASC和CHr

ASC(字符串) 返回一个 Integer,代表字符串中首字母的字符代码,ANSI 字符集。
CHr(字符代码) 返回 String,其中包含有与指定的字符代码相关的字符。

这是一对相互转换的字符函数。

Sub z4()
  Debug.Print Asc("Z")  'Z的字符代码是90.
  Debug.Print Chr(90)
End Sub


3.Space和string

Space(空格数量) 生成多少个空格。
String(重复数量,要重复的字符) 生成多少个重复的字符。
Sub z5()
    Debug.Print "A" & Space(10) & "B"          '在A和B之间添加10个空格
    Debug.Print "C" & String(10, "a") & "D"    '在C和D之间添加10个a
End Sub


4.LCase和UCase

LCase(字符串) 转换字符串中的英文字符为小写
UCase(字符串) 转换字符串中的英文字符为大写
Sub z1()
  Debug.Print LCase("ABC")
  Debug.Print UCase("Abc")
End Sub


5.StrConv

StrConv(字符串,转换类型) 把字符串转换成指定类型,常用的转换类型如下表:
还有其他类型,但比较少用,如有兴趣可以自行了解。

Windows系统对字符采用了DBCS编码

系统的缺省码页:说的是Windows系统对字符采用的DBCS编码。

DBCS编码实际上是一套单字节和双字节的混合编码,即西文和ASCII编码一样,是单字节,而中文以两个字节编码。所以vbUnicode和vbFromUnicode函数只能在Windows系统上Excel中使用。

例1:展示vbUpperCase、vbLowerCase和vbProperCase的用法。

Sub 转换()
  Debug.Print VBA.StrConv("wHo ARE you?", vbUpperCase)
  Debug.Print VBA.StrConv("wHo ARE you?", vbLowerCase)
  Debug.Print VBA.StrConv("wHo ARE you?", vbProperCase)
End Sub

例2:展示vbFromUnicode的用法。

Sub 转换2()
Dim i As Long
Dim x() As Byte
x = StrConv("ABCDEFG", vbFromUnicode)    ' 转换字符串为系统的缺省码页。