1.字符串的拼接

1.1 直接拼接

  1. 字符串中若要涉及变量,需要将字符部分和变量部分用&符号连接,如:Range("A" & i)
  2. 一般可以先写出原始样式,将其中需要替换成变量的部分先写两个””→在引号中间加入&&→在&&中间再加入变量,所有新加的字符中间有一个空格;
  3. 代码助手中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

  1. 4. 涉及到多层引号时,**内层引号用两个连续的引号代替**,避免混淆。同理,再内层三个引号
  2. > indirect函数中参数本身就是字符串,如果在其中添加参数又会出现内层字符串
  3. ```vbnet
  4. Public Sub 字符串的嵌套()
  5. '一般认为通过代码在A1单元格中写入indirect函数如下
  6. [a1]="=INDIRECT("Sheet2!A1")" '但结果报错,因为电脑会将前两个引号中间的部分看做一个字符串整体
  7. '通过代码在A1单元格中写入indirect函数的正确方式如下
  8. '两个引号引出参数字符串,单引号引出本身填入的字符串,相当于吧两个引号看成一个使用
  9. [a1]="=INDIRECT(""Sheet2!A1"")"
  10. '如果需要将确定表明Sheet2更改为第二张表名字worksheets(2).name,直接更改方式如下
  11. '将[a1]="=INDIRECT(""Sheet2!A1"")"中Sheet2替换为"",再在""中间加上&&,再在&&中间加上worksheets(2).name,结果如下
  12. [a1] = "=INDIRECT(""" & Worksheets(3).Name & "!A1"")" '此代码分析如下图
  13. End Sub

image.png

1.2 通过字符的数值表达式拼接

  1. 引号的数值表达式为chr(34)
  2. 换行符的数值表达式为chr(10)vbNewLine ```vbnet Sub test2()

    [a1] = “A” & Chr(10) & “B” [a2] = “A” & vbNewLine & “B”

End Sub

  1. <a name="sGIVe"></a>
  2. ## 1.3 replace函数替换
  3. 1. 若果涉及需要在单元格内通过代码输入公式,本书输入的内容久违文本需要使用引号,如果公式本身涉及拼接又要用双层引号较为复杂,且极易出错
  4. 2. 特别适合长表达式如:SQL语句,request返回值等的拼接
  5. <a name="huGVe"></a>
  6. ### 1.3.1 一般Replace替换
  7. 1. 一般replace替换
  8. 1. 通过替换的方式做字符串构造不用写过多的引号内容
  9. 2. 一般replace替换方式为先写出最终需要得到的形式,通过替换其中的字符串得到最终想要的答案
  10. ```vbnet
  11. Public Sub replace_替换()
  12. 原始 = "A1:A10"
  13. '希望最终替换结果为:B3:B10.替换的内容通过参数方式写出,方便未来替换成其他
  14. x = "B"
  15. m = 3
  16. N = 10
  17. s = Replace(原始, "A", x)
  18. s = Replace(s, 1, m) '问题在于这一步,1替换为m的时候,后面的10中的1也替换成了m
  19. s = Replace(s, 10, N)
  20. Debug.Print s '结果错误:B3:B30
  21. End Sub
  1. 占位符Replace替换

为了避免出现一般replace替换中的错误,我们在替换时引入占位符

  1. Public Sub replace_替换()
  2. 原始 = "{0}{1}:{0}{2}"
  3. '希望最终替换结果为:B3:B10
  4. x = "B"
  5. m = 3
  6. n = 10
  7. s = Replace(原始, "{0}", x)
  8. s = Replace(s, "{1}", m) '这一步就不会出现问题
  9. s = Replace(s, "{2}", n)
  10. Debug.Print s '结果:B3:B10
  11. End Sub

1.3.2 数组占位符Replace替换

由于一般替换要写多遍replace函数,较为复杂。可以用数组替换函数代替

  1. Sub TestSub()
  2. Dim x As String
  3. x = "大家好,我是{0},今天是{1},现在是{2}" '确认最终形成的结构,并用占位符代替
  4. Debug.Print EEReplace(x, "name", Date, Time) '通过构造函数EEReplace进行宁批量替换
  5. End Sub
  6. '构造EEReplace函数
  7. Function EEReplace(s, ParamArray arrlist() As Variant) '引入数组变量
  8. For i = 0 To UBound(arrlist)
  9. s = Replace(s, "{" & i & "}", arrlist(i)) '通过数组变量替换占位符,注意书写形式
  10. Next
  11. EEReplace = s
  12. End Function

2.字符串的匹配

2.1 精确匹配

2.2 模糊匹配

字符串的模糊匹配需要用到关键字like和通配符

  1. 若干字符*、一个字符?、0-9的一个数字#
  2. 通配符支持[]方式及非!,如:[0-5][A-E][!A-E] ```vbnet ‘在表格中F列找出姓氏为李、叶、王的人,将姓名输出在H列

Sub like_演示()

  1. Dim i, s, rng As Range
  2. s = "F1:F14"
  3. i = 1 '参数i控制输出列的行号
  4. For Each rng In Range(s)
  5. If rng.Value Like "[李叶王]*" Then
  6. Range("H" & i).Value = rng.Value
  7. i = i + 1
  8. End If
  9. Next

End Sub

  1. <a name="RMsSW"></a>
  2. # 3.复制数值到另个一个区域
  3. 1. `Range.Copy (Destination)`方法
  4. 2. `Range.Copy`+`Worksheet.Paste`方法
  5. 3. `Range.Copy`+`Range.PasteSpecial`方法
  6. 4. `Range1.value = Range2.value`的方法
  7. 1. 需要range1和range2的区域大小完全相同可以用此方式赋值
  8. 2. 如果range2大小不相同,需要用`Resize`属性扩展区域
  9. ```vbnet
  10. Sub TestSub()
  11. Range("F1").Value = Range("A1:D6").Value '区域大小不同,只能赋值对应区域的值,即A1:D6最左上角的值赋值给F1
  12. Range("F1").Resize(6, 4).Value = Range("A1:D6").Value '区域大小相同,正常赋值(相当于复制粘贴)
  13. End Sub