标签:VBA专题
引言:本文学习整理自functionx.com,可能是我见过的最完整的VBA字符串相关知识介绍,有兴趣的朋友可以参阅。
字符串简介
字符串是一个或多个字符的组合。要声明变量为字符串,可以使用String或Variant数据类型。要初始化字符串变量,将其值放在双引号中并将其赋值给变量。下面是一些例子。
示例:
代码语言:javascript复制Sub Exercise()
ActiveCell = "完美Excel"
End Sub
运行代码后,当前单元格中会输入字符串“完美Excel”。
示例:
代码语言:javascript复制Sub Exercise2()
Dim FirstName As Variant
Dim LastName As String
FirstName = "William"
LastName = "Sansen"
End Sub
发出哔哔声
如果你想的话,可以让电脑发出哔哔声来回应任何事情。为此,Visual Basic语言提供了一个名为Beep的函数。其语法是:
代码语言:javascript复制Public Sub Beep()
调用示例:
代码语言:javascript复制Sub Exercise3()
Beep
End Sub
如果在程序运行时调用此函数,计算机将发出短暂的声音。
字符串联接
字符串联接包括将一个字符串添加到另一个字符串,可以使用 或&运算符实现。下面是一些例子。
示例:
代码语言:javascript复制Sub Exercise4()
Dim FirstName As Variant
Dim LastName As String
Dim FullName As String
FirstName = "William"
LastName = "Sansen"
FullName = LastName "," FirstName
ActiveCell = "Full Name: " & FullName
End Sub
结果如下图1所示。
图1
字符简介
获取数字的ASCII字符
美式英语中使用的字符和拉丁语中最常见的字符都是在字符代码列表或映射中创建的,每个字符都用一个介于0和255之间的数字表示。这意味着每个字符必须符合一个字节。
为了帮助找到此类数字的等效ASCII字符,Visual Basic语言提供了一个名为Chr的函数。其语法是:
代码语言:javascript复制Public Function Chr(ByVal CharCode As Integer) As String
调用此函数时,传递一个数字作为其参数。示例如下:
代码语言:javascript复制Sub Exercise5()
Dim Character As String
Dim Number As Integer
Number = 114
Character = Chr(Number)
ActiveCell = Number & "的ASCII码是" &Character
End Sub
结果如下图2所示。
图2
除了查找数字的ASCII等价值外,Chr函数还可用于在程序中应用某些行为。例如,Chr(13)和Chr(10)的组合可为表达式断行,相当于vbCrLf运算符。
获取数字的宽ASCII字符
如果将小于0或大于255的数字传递给Chr函数,则会收到错误。可能会传递一个大于255的数字,原因是可能希望获得一个超出US英语的字符。为了支持这些数字,Visual Basic语言提供了该函数的另一个版本。其语法是:
代码语言:javascript复制Public Function ChrW(ByVal CharCode As Integer) AsString
这里的W代表宽字符(WideCharacter)。这使得将字符存储在内存中成为可能,相当于短整数数据类型,它可以保存-32768到32767之间的数字。通常,应该考虑字符符合Char数据类型,它应该是0到65535之间的正数。
示例:
代码语言:javascript复制Sub Exercise6()
Dim Character As String
Dim Number As Long
Number = 358
Character = ChrW(Number)
ActiveCell = Number & "的ASCII字符是" &Character
End Sub
结果如下图3所示。
图3
字符串长度
字符串的长度是它包含的字符数。为了查找字符串的长度,Visual Basic语言提供了一个名为Len的函数。其语法是:
代码语言:javascript复制Public Function Len(ByVal Expression As String) As Integer
此函数接受一个字符串作为参数。如果该函数成功地计数了字符数(通常是这样),它将返回一个整数。下面是一个例子。
代码语言:javascript复制Sub Exercise7()
Dim Item As String
Dim Length As Integer
Item = "excelperfect"
Length = Len(Item)
ActiveCell = Item & "中的字符数是" &Length
End Sub
结果如下图4所示。
图4
Microsoft Excel提供了生成相同结果的LEN函数。
字符、字符串和过程
将字符或字符串传递给过程
与普通值一样,可以将字符或字符串传递给过程。创建过程时,在过程的括号中输入参数及其名称。然后,在过程的主体中,使用合适的参数。调用过程时,可以用双引号传递参数的值。同样,可以应用过程的任何功能,包括传递任意数量的参数,或者传递字符、字符串和其他类型参数的混合。还可以创建一个接收可选参数的过程。
从函数返回字符或字符串
若要创建返回字符或字符串的函数,使用Function关键字创建过程,并在括号的右侧包含前面带有As关键字的字符串数据类型,或使用$字符。下面是示例:
代码语言:javascript复制Function GetFullName$()
Dim FirstName, LastName
FirstName = "Raymond"
LastName = "Kouma"
GetFullName$ = LastName & "," & FirstName
End Function
调用该函数时,可以将其用作普通函数,也可以检索它返回的值,并根据需要使用。下面是一个例子:
代码语言:javascript复制Sub Exercise8()
ActiveCell = GetFullName$
End Sub
字符和字符串转换
要将表达式转换为字符串,可以调用VBA的CStr函数。其语法是:
代码语言:javascript复制Public Function CStr(ByVal Express As Variant) As String
该参数几乎可以是任何可以将其转换为字符串的表达式,在大多数情况下,它都可以。如果成功,函数将返回一个字符串。下面是一个例子:
代码语言:javascript复制Sub Exercise9()
Dim DateHired As Date
DateHired = #12/17/2021#
ActiveCell = CStr(DateHired)
End Sub
CStr函数用于将任何类型的值转换为字符串。如果要转换的值是数字,则可以使用Str函数。其语法是:
代码语言:javascript复制Public Function Str(ByVal Number As Variant) As String
此函数需要一个数字作为参数。下面是一个例子:
代码语言:javascript复制Sub Exercise10()
Dim Number As Double
Number = 1505.5 / 2
ActiveCell = Str(Number)
End Sub
数字十六进制转换
Visual Basic语言支持十六进制数。如果你有一个十进制数,但需要十六进制格式,可以转换它。为此,可以调用Hex函数。其语法是:
代码语言:javascript复制Function Hex(ByVal Number As { Byte | Integer | Long | Variant}) As String
此函数用于将基于整数或十进制数转换为其十六进制等效数,以字符串形式返回结果。下面是一个例子:
代码语言:javascript复制Sub Exercise11()
Dim Number As Integer
Number = 28645
ActiveCell = Hex(Number)
End Sub
Microsoft Excel提供了更多函数来执行此类操作。
数字八进制转换
如果要将十进制数转换为八进制格式,可以调用Oct函数。其语法是:
代码语言:javascript复制FunctionOct(ByVal Number As { Byte | Integer | Long | Variant}) As String
此函数接受基于整数或十进制的数字,并将其转换为八进制等效值,以字符串形式返回结果。下面是一个例子:
代码语言:javascript复制Sub Exercise12()
Dim Number As Integer
Number = 28645
ActiveCell = Oct(Number)
End Sub
Microsoft Excel提供了更多函数来执行此类操作。
大小写转换
如果显示的字符串或表达式的大小写必须相同,则可以将其所有字符转换为大写或小写。
要将字符、字符串或表达式转换为大写,可以调用VBA的UCase函数或Microsoft Excel的UPPER函数,这些函数接受一个参数作为要考虑的字符串或表达式。语法是:
代码语言:javascript复制Function UCase(ByVal Value As String) As String
Function UPPER(ByVal Value As String) As String
每个函数接收一个字符或字符串作为参数。如果字符已经是大写的,它将返回相同的字符。如果字符不是可读字符,则不会发生转换,函数将返回该字符。如果字符是小写的,则会将其转换为大写,然后函数将返回等效的大写字母。
下面是一个示例:
代码语言:javascript复制Sub Exercise13()
Dim ProgrammingEnvironment As String
ProgrammingEnvironment = "Visual Basic for Application forMicrosoft Excel"
ActiveCell = UCase(ProgrammingEnvironment)
End Sub
要将字符或字符串转换为小写,可以调用VBA的LCase函数或Microsoft Excel的LOWER函数。它们的语法是:
代码语言:javascript复制Function LCase(ByVal Value As String) As String
Function LOWER(ByVal Value As String) As String
该函数接受字符或字符串作为参数。如果字符不是可读的符号,它将保持“原样”。如果字符为小写,则不会转换。如果字符为大写,则会转换为小写。
字符串的子字符串
子字符串是现有字符串的一个字符或一组字符或符号,Visual Basic语言提供了创建、操作或管理子字符串的函数。要记住的主要规则是子字符串是字符串的一部分,并且依赖于字符串。换句话说,如果没有字符串,则不可能有子字符串。
字符串的左子字符串
如果有一个现有字符串,但希望使用字符串左侧字符中的多个字符创建一个新字符串,则可以使用Microsoft Excel 的LEFT函数或VBA的Left函数。它们的语法是:
代码语言:javascript复制Function LEFT(ByVal str As String, ByVal Length As Integer) As String
Function Left(ByVal str As String, ByVal Length As Integer) As String
每个函数都有两个参数,这两个参数都是必需的。第一个参数是现有字符串,第二个参数是从字符串左侧开始计算的字符数。下面是一个例子:
代码语言:javascript复制Sub Exercise14()
Dim Process As String
Process = "Learning"
ActiveCell = "To " & Left(Process, 5) & " is to gain understanding"
End Sub
结果如下图5所示。
图5
字符串的右子字符串
要使用现有字符串右侧的一个或多个字符创建新字符串,调用MicrosoftExcel的RIGHT函数或VBA的Right函数。其语法是:
代码语言:javascript复制Function RIGHT(ByVal str As String, ByVal Length As Integer) As String
Function Right(ByVal str As String, ByVal Length As Integer) As String
这两个参数都是必需的。第一个参数是原始字符串,第二个参数是从字符串右侧开始计算的字符数。
字符串的中间子字符串
可能希望使用一些来自左侧、右侧或现有字符串内部的字符创建字符串。为此,Visual Basic语言提供了一个名为Mid的函数,Microsoft Excel配备了一个名为Mid的函数。下面是调用Mid函数的示例:
代码语言:javascript复制Sub Exercise15()
Dim ProgrammingEnvironment As String
ProgrammingEnvironment = "VBA for Microsoft Excel"
ActiveCell = "The " & Mid(ProgrammingEnvironment, 9, 15)& " language"
End Sub
查找子字符串
对字符串执行的最常规的操作之一是找出它是包含某个字符还是某个连续的字符组。为此,Visual Basic语言提供了InStr函数和Microsoft Excel配有FIND函数。它们的语法是:
代码语言:javascript复制InStr([start,]string1, string2[, compare])
FIND(Find_Text,Within_Text, Start_Num)
在该函数的第一个版本中,String1参数是将对其执行操作的字符串。String2参数是要查找的字符或子字符串。如果在String1中找到String2(作为String1的一部分),函数将返回第一个字符的位置。下面是一个例子:
该函数的第一个版本要求解释器从左边检查String1,寻找String2。如果String1包含多个String2实例,则该函数将(仅)返回第一个实例的位置,任何其他后续实例都将被忽略。如果要跳过第一个实例或希望解释器从左侧字符以外的位置开始检查,使用第二个版本。在这种情况下,Start参数允许指定开始在String1中查找String2的起始位置。
InStr函数用于从左侧开始检查字符串。如果要从右侧开始检查,调用InStrRev函数,其语法是:
代码语言:javascript复制InstrRev(stringcheck,stringmatch[, start[, compare]])
替换字符串中的字符或子字符串
在字符串中找到字符或子字符串后,可以对其执行操作。可以执行的操作之一是用另一个字符或子字符串替换该字符或子字符串。为此,Visual Basic语言提供了Replace函数,Microsoft Excel提供了REPLACE函数。其语法是:
代码语言:javascript复制Replace(expression,find, replace[, start[, count[, compare]]])
第一个参数是将对其执行操作的字符串。第二个参数是要在expression中查找的字符或字符串。如果找到该字符或字符串,则第三个参数是要替换它的字符或字符串。
字符串上的其他操作
反转字符串
初始化字符串后,可以对其执行的操作之一是将其反转。为此,可以调用StrReverse函数。其语法是:
代码语言:javascript复制Function StrReverse(ByVal Expression As String) As String
此函数将需要反转的字符串作为参数。执行操作后,该函数返回一个由字符按相反顺序组成的新字符串。下面是一个例子:
代码语言:javascript复制Sub Exercise16()
Dim strValue As String
Dim strRev As String
strValue = "lecxE美完"
strRev = StrReverse(strValue)
ActiveCell = strValue & vbCrLf & strRev
End Sub
由于StrReverse函数返回字符串,因此可以将其写成StrReverse$。
字符串和空格
最简单的字符串可能是声明和初始化的字符串。在其他一些情况下,可以处理必须首先检查的字符串。例如,出于某种原因,字符串的左侧或右侧可能包含空白。如果只是开始对其执行某操作,该操作可能会失败。可以对字符串执行的第一个操作之一是删除字符串两侧的空白(如果有的话)。
要删除字符串左侧的所有空格,可以调用LTrim函数。其语法是:
代码语言:javascript复制Function LTrim(ByVal str As String) As String
要删除字符串右侧的所有空格,可以调用RTrim函数。其语法是:
代码语言:javascript复制Function RTrim(ByVal str As String) As String
要删除字符串两侧的空格,可以调用Trim函数。其语法是:
代码语言:javascript复制Function Trim(ByVal str As String) As String
创建空格字符串
如果要创建由一个或多个空格组成的字符串,可以调用Space函数。其语法是:
代码语言:javascript复制Function Space(ByVal Number As Integer) As String
此函数在编程上相当于在键入字符串时按空格键在两个字符之间插入空格。
<未完待续>