1.字符串的拼接
1.1 直接拼接
- 字符串中若要涉及变量,需要将字符部分和变量部分用&符号连接,如:
Range("A" & i)
- 一般可以先写出原始样式,将其中需要替换成变量的部分先写两个””→在引号中间加入&&→在&&中间再加入变量,所有新加的字符中间有一个空格;
- 代码助手中Alt+l可以快速将字符串中需要改写成变量的部分替换成连接格式; ```vbnet ‘本案例中需要拼接可以通过参数控制区域行数的区域
Public Sub 拼接区域字符串1()
‘A1:A10
x = 1 y = 10
‘s = “A1:A10” ‘通过黑体字描述的逻辑可转换为下一行代码 s = “A” & x & “:A” & y & “” ‘此时实现了行号用x,y参数控制 Debug.Print s ‘结果为:A1:A10
End Sub
4. 涉及到多层引号时,**内层引号用两个连续的引号代替**,避免混淆。同理,再内层三个引号
> indirect函数中参数本身就是字符串,如果在其中添加参数又会出现内层字符串
```vbnet
Public Sub 字符串的嵌套()
'一般认为通过代码在A1单元格中写入indirect函数如下
[a1]="=INDIRECT("Sheet2!A1")" '但结果报错,因为电脑会将前两个引号中间的部分看做一个字符串整体
'通过代码在A1单元格中写入indirect函数的正确方式如下
'两个引号引出参数字符串,单引号引出本身填入的字符串,相当于吧两个引号看成一个使用
[a1]="=INDIRECT(""Sheet2!A1"")"
'如果需要将确定表明Sheet2更改为第二张表名字worksheets(2).name,直接更改方式如下
'将[a1]="=INDIRECT(""Sheet2!A1"")"中Sheet2替换为"",再在""中间加上&&,再在&&中间加上worksheets(2).name,结果如下
[a1] = "=INDIRECT(""" & Worksheets(3).Name & "!A1"")" '此代码分析如下图
End Sub
1.2 通过字符的数值表达式拼接
- 引号的数值表达式为
chr(34)
换行符的数值表达式为
chr(10)
或vbNewLine
```vbnet Sub test2()[a1] = “A” & Chr(10) & “B” [a2] = “A” & vbNewLine & “B”
End Sub
<a name="sGIVe"></a>
## 1.3 replace函数替换
1. 若果涉及需要在单元格内通过代码输入公式,本书输入的内容久违文本需要使用引号,如果公式本身涉及拼接又要用双层引号较为复杂,且极易出错
2. 特别适合长表达式如:SQL语句,request返回值等的拼接
<a name="huGVe"></a>
### 1.3.1 一般Replace替换
1. 一般replace替换
1. 通过替换的方式做字符串构造不用写过多的引号内容
2. 一般replace替换方式为先写出最终需要得到的形式,通过替换其中的字符串得到最终想要的答案
```vbnet
Public Sub replace_替换()
原始 = "A1:A10"
'希望最终替换结果为:B3:B10.替换的内容通过参数方式写出,方便未来替换成其他
x = "B"
m = 3
N = 10
s = Replace(原始, "A", x)
s = Replace(s, 1, m) '问题在于这一步,1替换为m的时候,后面的10中的1也替换成了m
s = Replace(s, 10, N)
Debug.Print s '结果错误:B3:B30
End Sub
- 占位符Replace替换
为了避免出现一般replace替换中的错误,我们在替换时引入占位符
Public Sub replace_替换()
原始 = "{0}{1}:{0}{2}"
'希望最终替换结果为:B3:B10
x = "B"
m = 3
n = 10
s = Replace(原始, "{0}", x)
s = Replace(s, "{1}", m) '这一步就不会出现问题
s = Replace(s, "{2}", n)
Debug.Print s '结果:B3:B10
End Sub
1.3.2 数组占位符Replace替换
由于一般替换要写多遍replace函数,较为复杂。可以用数组替换函数代替
Sub TestSub()
Dim x As String
x = "大家好,我是{0},今天是{1},现在是{2}" '确认最终形成的结构,并用占位符代替
Debug.Print EEReplace(x, "name", Date, Time) '通过构造函数EEReplace进行宁批量替换
End Sub
'构造EEReplace函数
Function EEReplace(s, ParamArray arrlist() As Variant) '引入数组变量
For i = 0 To UBound(arrlist)
s = Replace(s, "{" & i & "}", arrlist(i)) '通过数组变量替换占位符,注意书写形式
Next
EEReplace = s
End Function
2.字符串的匹配
2.1 精确匹配
2.2 模糊匹配
字符串的模糊匹配需要用到关键字like
和通配符
- 若干字符
*
、一个字符?
、0-9的一个数字#
- 通配符支持
[]
方式及非!
,如:[0-5]
、[A-E]
、[!A-E]
```vbnet ‘在表格中F列找出姓氏为李、叶、王的人,将姓名输出在H列
Sub like_演示()
Dim i, s, rng As Range
s = "F1:F14"
i = 1 '参数i控制输出列的行号
For Each rng In Range(s)
If rng.Value Like "[李叶王]*" Then
Range("H" & i).Value = rng.Value
i = i + 1
End If
Next
End Sub
<a name="RMsSW"></a>
# 3.复制数值到另个一个区域
1. `Range.Copy (Destination)`方法
2. `Range.Copy`+`Worksheet.Paste`方法
3. `Range.Copy`+`Range.PasteSpecial`方法
4. `Range1.value = Range2.value`的方法
1. 需要range1和range2的区域大小完全相同可以用此方式赋值
2. 如果range2大小不相同,需要用`Resize`属性扩展区域
```vbnet
Sub TestSub()
Range("F1").Value = Range("A1:D6").Value '区域大小不同,只能赋值对应区域的值,即A1:D6最左上角的值赋值给F1
Range("F1").Resize(6, 4).Value = Range("A1:D6").Value '区域大小相同,正常赋值(相当于复制粘贴)
End Sub