VBA-3--String Manipulation字符串操作

String Manipulation字符串操作

在本章中,您将找到在Excel VBA中操作字符串的最重要函数。

在工作表上放置一个命令按钮并在下面添加代码行。要执行代码行,请单击工作表上的命令按钮。

连接字符串

我们使用&运算符连接(连接)字符串。

代码:

Dim text1 As String, text2 As String

text1 = "Hi"

text2 = "Tim"

MsgBox text1 & " " & text2

结果:

 

注意:若要插入空格,请使用“”键

Left取左

要从字符串中提取最左边的字符,请使用Left。

代码:

Dim text As String

text = "example text"

MsgBox Left(text, 4)

结果:

 

同样的操作还有:取右Right、取中Mid

MsgBox Right("example text", 2)

MsgBox Mid("example text", 9, 2)

注:从位置9(t)开始,长度为2。如果要提取从字符串中间开始直到字符串结束的子字符串,可以省略第三个参数。

取长度Len

要获得字符串的长度,请使用Len。

代码:

MsgBox Len("example text")

 

找位Instr

要查找字符串中子字符串的位置,请使用Instr。

代码:

MsgBox Instr("example text", "am")

 

折分字符串

下面我们将看一个Excel VBA中分隔符拆分字符串的程序。

情况:

 

在工作表上放置命令按钮并添加以下代码行:

1首先,我们声明一个名为字符串类型全名的变量、一个名为commaposition整数类型的变量和一个名为i的整数类型变量。

Dim fullname As String, commaposition As Integer, i As Integer

我们要处理的问题是,我们需要告诉Excel VBA要在哪里分隔开字符串。对于“Smith, Mike”逗号在第6位,而对于“ Williams, Janet ”逗号在第9位。

2 我们使用一个循环对在Excel中输入的每个名称执行操作。首先,我们初始化变量fullname。接下来,我们使用Instr函数来查找逗号的位置。

For i = 2 To 7

    fullname = Cells(i, 1).Value

commaposition = InStr(fullname, ",")

3最后,我们想把逗号后面的部分写到B列,把逗号前面的部分写到C列。您可以通过添加以下行来实现:

Cells(i, 2).Value = Mid(fullname, commaposition + 2)

Cells(i, 3).Value = Left(fullname, commaposition - 1)

4别忘了结束本次循环

Next i

5添加六个由逗号和空格分隔的名称到范围(“A2:A7”)。

6测试程序。

结果:

 

反转字符串Reverse Strings

下面我们将看一个Excel VBA中可以反转字符串的程序。

情况:

在工作表上放置命令按钮并添加以下代码行:

1首先,我们声明四个变量。一个称为text 字符串类型的变量,一个称为reversedText字符串类型的变量,一个称为length整数类型的变量,以及一个称为i的整数类型的变量。

Dim text As String, reversedText As String, length As Integer, i As Integer

2我们初始化了两个变量。我们使用输入框函数从用户中获得一个文本字符串。我们在VBA外使用Len长度函数获得该文本字符串的长度。

text = InputBox("Enter the text you want to reverse")

length = Len(text)

 

3我们开始使用一个For循环。

For i = 0 To length - 1

4下面是简单的技巧。我们从文本中提取最后一个字符,并将其放在ReversedText的前面。我们可以使用Excel VBA中的Mid函数从字符串中提取字符。我们使用&运算符连接(连接)两个字符串。

reversedText = reversedText & Mid(text, (length - i), 1)

5别忘了结束本次循环

Next i

6最后,我们使用MsgBox显示reversedText。

msgbox reversedText

7测试程序,输入Car,结果:

 

转换为正确的大小写

下面我们将看看Excel VBA中的一个程序,它将文本转换为正确的大小写。也就是说,每个单词的第一个字母大写,所有其他字母小写。

情况:

 

1首先,我们声明两个Range对象。我们称之为Range对象rng和cell。

Dim rng As Range, cell As Range

2我们用选定的范围初始化Range对象rng。

Set rng = Selection

3我们要检查任意选择的范围内每个单元格(此范围可以是任意大小)。在Excel VBA中,您可以为此使用For Each Next循环。添加以下代码行:

For Each cell In rng

Next cell

4为了忽略包含公式的单元格,在For Each和Next之间添加以下代码行(仅当cell.hasfula为false时,我们继续)。

If Not cell.HasFormula Then

End If

5接下来,我们要将这个范围内的每个单词转换为“正确的大小写”。您可以使用适合此任务的工作表函数WorksheetFunction.Proper。在if语句中添加以下代码行。

cell.Value = WorksheetFunction.Proper(cell.Value)

6测试程序,结果如下:

 

字数

下面我们将看一个Excel VBA中的程序,它计算选定范围内的字数。假设一个或多个空格分隔单词。

 

1首先,我们声明两个Range对象和三个变量。我们称之为Range对象rng和cell。一个整型变量我们称之为cellWords,一个整型变量我们称之为totalWords,还有一个字符串变量我们称之为content。

Dim rng As Range, cell As Range

Dim cellWords, totalWords As Integer, content As String

2我们用0初始化两个整数类型变量,用选定的范围初始化Range对象rng。

Set rng = Selection

cellWords = 0

totalWords = 0

3我们要检查所选范围内的每个单元格(此范围可以是任意大小)。在Excel VBA中,您可以为此使用For Each Next循环。添加以下代码行:

For Each cell In rng

Next cell

4为了忽略包含公式的单元格,在For Each和Next之间添加以下代码行(仅当cell.hasfula为false时,我们继续)。

If Not cell.HasFormula Then

End If

5首先,我们将单元格的内容写入变量内容。接下来,我们移除开头和结尾的空格(如果有的话)。在Excel VBA中,可以使用Trim函数来完成此操作。例如,“ excel vba”将转换为“excel vba”。在If语句中添加以下代码行。

content = cell.Value

content = Trim(content)

注意:Excel VBA中的trim函数不会删除单词之间的多余空格,但在本例中这是可以的。

6此时,单元格仍然可以为空。如果单元格为空,我们将值0赋给变量cellWords。否则,它至少包含一个单词,我们将值1赋给变量cellWords。在If语句中添加以下代码行。

If content = "" Then

    cellWords = 0

Else

    cellWords = 1

End If

当然,一个单元格可以包含多个单词。这正是我们现在想知道的。以“excel vba”为例。如果一个单元格在此阶段至少包含一个空格,则它至少包含一个以上的单词。可以使用Excel VBA中的Instr函数查找空间。Instr(content,“”)查找内容中第一个空格的位置。

7我们将使用Do-While循环结构。放置在这些单词之间的代码(在步骤8、9和10)将重复,只要Do While后面的部分是真的。只要Instr(content,“ ”>0为真(只要content包含空格和更多单词),我们就要重复这些步骤。在If语句中添加Do While循环。

Do While InStr(content, " ") > 0

Loop

8. 接下来,我们从第一个空格的位置开始获取单元格中的部分内容。我们使用Mid函数。

content = Mid(content, InStr(content, " "))

例如: Mid("excel vba", InStr("excel vba", " ")) 将会获得 " vba".

9. 消除前后空格

content = Trim(content)

结果: "vba"

10. 增加cellWords 加 1.

cellWords = cellWords + 1

这个Do While循环将被重复,只要截取得到的内容包含一个空格,从而包含更多的单词。在我们的例子中,我们退出了DO while循环,因为“VBA”不再包含一个空间了!结果:此单元格包含两个单词。

11. 检查完一个单元格后,我们将cellWords添加到变量totalWords中。此代码行应放在Do While循环之外,但在If语句中。

totalWords = totalWords + cellWords

下一个单元格又重新开始整个查空格的过程,直到检查完所有单元格。

12. 最后,我们使用msgbox显示totalWords的值。此代码行应放置在For-Each-Next循环的外部。

MsgBox totalWords & " words found in the selected range."

13. 测试程序。

结果如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值