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函数中参数本身就是字符串,如果在其中添加参数又会出现内层字符串```vbnetPublic 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替换方式为先写出最终需要得到的形式,通过替换其中的字符串得到最终想要的答案```vbnetPublic Sub replace_替换()原始 = "A1:A10"'希望最终替换结果为:B3:B10.替换的内容通过参数方式写出,方便未来替换成其他x = "B"m = 3N = 10s = Replace(原始, "A", x)s = Replace(s, 1, m) '问题在于这一步,1替换为m的时候,后面的10中的1也替换成了ms = Replace(s, 10, N)Debug.Print s '结果错误:B3:B30End Sub
- 占位符Replace替换
为了避免出现一般replace替换中的错误,我们在替换时引入占位符
Public Sub replace_替换()原始 = "{0}{1}:{0}{2}"'希望最终替换结果为:B3:B10x = "B"m = 3n = 10s = Replace(原始, "{0}", x)s = Replace(s, "{1}", m) '这一步就不会出现问题s = Replace(s, "{2}", n)Debug.Print s '结果:B3:B10End Sub
1.3.2 数组占位符Replace替换
由于一般替换要写多遍replace函数,较为复杂。可以用数组替换函数代替
Sub TestSub()Dim x As Stringx = "大家好,我是{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)) '通过数组变量替换占位符,注意书写形式NextEEReplace = sEnd 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 Ranges = "F1:F14"i = 1 '参数i控制输出列的行号For Each rng In Range(s)If rng.Value Like "[李叶王]*" ThenRange("H" & i).Value = rng.Valuei = i + 1End IfNext
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`属性扩展区域```vbnetSub TestSub()Range("F1").Value = Range("A1:D6").Value '区域大小不同,只能赋值对应区域的值,即A1:D6最左上角的值赋值给F1Range("F1").Resize(6, 4).Value = Range("A1:D6").Value '区域大小相同,正常赋值(相当于复制粘贴)End Sub
