首页 > 其他分享 >VBA常用的字符串内置函数

VBA常用的字符串内置函数

时间:2024-07-05 12:31:42浏览次数:20  
标签:Dim VBA 内置 String Cells Value ws 字符串

前言

在VBA程序中,常用的内置函数可以按照功能分为字符串函数、数字函数、转换函数等等,本节主要会介绍常用的字符串的内置函数,包括Len()、Left()、Mid()、Right()、Split()、String()、StrConV()等。
本节的练习数据表以下表为例:
在这里插入图片描述


1.使用Len()计算字符串长度

示例:

Sheet1的A列是商品的ID编码,现需要检查商品编码是否正确,其中正确的商品编码应该为10位字符组成,最终需在B列记录检查结果。完整的代码如下:

Sub LenTest()
    
    Dim ws As Worksheet   ' 声明变量用来存储worksheet对象
    Dim lastRow As Integer
    Dim i As Integer
    
    ' 设置worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 获取工作表的最大行数
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 循环遍历查询,因第一行为表头,故从第二行开始循环
    For i = 2 To lastRow
        ' 判断A列值的长度是否等于10
        If Len(ws.Cells(i, "A").Value) = 10 Then
            ws.Cells(i, "B").Value = "True"
        Else
            ws.Cells(i, "B").Value = "False"
        End If
    Next i

End Sub

2.字符串截取函数Left、Mid、Right

若需要提取字符串中的某一部分时,则可以通过函数Left()、Mid()、Right()函数来进行实现。

函数语法说明
Left()Left(String,Length)获取字符串从左开始,截取指定数量Length的字符串
Mid()Mid(String,Start,Length)获取字符串从固定位置Start开始,截取指定数量Length的字符串
Right()Right(String,Length)获取字符串从右开始,截取指定数量Length的字符串
说明:

String是需要处理的字符串
Length表示需要截取字符串的长度,其中Mid()函数中的Length为非必填项
Start是Mid()函数中用来表示从左数第几个字符开始,若length未填则表示一直截取到最后

示例:

在Sheet1中C列为商品的产品型号,由品牌、名称、型号构成,现需要将产品型号进行拆分后,在F、G、H 三列中的别填入品牌、名称、型号信息,完整的代码如下:

Sub StringTest()
    
    Dim ws As Worksheet   ' 声明变量用来存储worksheet对象
    Dim lastRow As Integer
    Dim i As Integer
    
    ' 设置worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 获取工作表的最大行数
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' 循环遍历查询,因第一行为表头,故从第二行开始循环
    For i = 2 To lastRow
        ' 获取品牌--从左取3个字符
        ws.Cells(i, "F").Value = Left(ws.Cells(i, "C").Value, 3)
        
        ' 获取名称--从第5个字符开始取4位
        ws.Cells(i, "G").Value = Mid(ws.Cells(i, "C").Value, 5, 4)
        
        ' 获取型号--从右取3个字符
        ws.Cells(i, "H").Value = Right(ws.Cells(i, "C").Value, 3)
    Next i

End Sub
运行后截图

在这里插入图片描述

3. 字符串分割Split()

使用Split()可以按照固定的分隔符对字符串进行分割,最终返回类型为数组(默认数组下标从0开始)
如以上案例中,C列的产品型号由品牌、名称、型号构成,三者之间通过“-”进行连接,那么在拆分时也可以通过“-”来进行分割处理,完整的代码如下:

Sub StringTest()
    
    Dim ws As Worksheet   ' 声明变量用来存储worksheet对象
    Dim lastRow As Integer
    Dim i As Integer
    
    ' 设置worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 获取工作表的最大行数
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' 循环遍历查询,因第一行为表头,故从第二行开始循环
    For i = 2 To lastRow
        ' 获取品牌--分割后获取数组下标为0
        ws.Cells(i, "F").Value = Split(ws.Cells(i, "C").Value, "-")(0)
        
        ' 获取名称--分割后获取数组下标为1
        ws.Cells(i, "G").Value = Split(ws.Cells(i, "C").Value, "-")(1)
        
        ' 获取型号--分割后获取数组下标为2
        ws.Cells(i, "H").Value = Split(ws.Cells(i, "C").Value, "-")(2)
    Next i

End Sub

4. String()可生成重复字符串

String(Number,Char) 函数用于生成指定长度Number的重复的字符串Char

示例:

在sheet1中J列为联系电话,为保护联系人的隐私,现需要将其电话号码的中间四位数字隐藏,使用星号*代替。

思路:

先通过Mid() 函数提取出联系电话中间的四位数字,随后使用Replace()函数进行替换,替换后的字符串使用String()来定义,完成的代码如下:

Sub StringTest()
    
    Dim ws As Worksheet   ' 声明变量用来存储worksheet对象
    Dim lastRow As Integer
    Dim i As Integer
    Dim strTel As String  ' 定义联系电话变量
    
    ' 设置worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 获取工作表的最大行数
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' 循环遍历查询,因第一行为表头,故从第二行开始循环
    For i = 2 To lastRow
    
        ' 替换联系电话中间四位数字为四个星号*
        strTel = ws.Cells(i, "J").Value
        ws.Cells(i, "J").Value = Replace(strTel, Mid(strTel, 4, 4), String(4, "*"))
        
    Next i

End Sub
运行后截图

在这里插入图片描述

5. StrConV()转换字符串

StrConv()函数可以实现对字符串英文的大小写转换,还能实现其他类型的一些转换,主要用法是StrConv(String,Conversion,<LCID>),其中String表示待处理的字符串,Conversion表示执行转换的类型,LCID为可选参数,表示与系统LocaleID不同,则为LocaleID。

关于Conversion转换类型,可参考下表总结
常量名称说明
vbUpperCase1将字符串转换成全部大写形式
vbLowerCase2将字符串转换成全部小写形式
vbProperCase3将字符串转换成首字母大写形式
vbWide4将字符串中的单字节字符转换成双字节字符
vbNarrow8将字符串中的双字节字符转换成单字节字符
vbUnicode64将字符串根据系统的默认编码转换成Unicode
vbFromUnicode128将字符串由Unicode转换成系统的默认编码
示例

在Sheet1的I列联系人中,为规范格式,先需要将该列内容统一修改为首字母大写的形式,完整的代码如下:

Sub StringTest()
    
    Dim ws As Worksheet   ' 声明变量用来存储worksheet对象
    Dim lastRow As Integer
    Dim i As Integer
    
    ' 设置worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 获取工作表的最大行数
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' 循环遍历查询,因第一行为表头,故从第二行开始循环
    For i = 2 To lastRow
    
        ' 修改I列 联系人的格式为首字母大写
        ws.Cells(i, "I").Value = StrConv(ws.Cells(i, "I").Value, vbProperCase)
        
        
    Next i

End Sub

运行后截图

在这里插入图片描述


扩展

以下表格整理了字符串常用的字符串函数

函数返回类型功能示例返回值
StrComp(字符串1,字符串2, [,比较])VariantInteger比较两个字符串。字符串1<字符串2,返回值-1;字符串1=字符串2,返回值0;字符串1>字符串2,返回值1;StrComp(“AE”,“FS4”)-1
StrConv(字符串,数字)String变换字符串。数字为1时,将字符串内容转换成大写;数字为2时,将字符串转换成小写…StrConv(“fghh”,1);StrConv(“AAhh”,2)“FGHH”;“aahh”
Format(字符串,可选参数)VariantString设置字符串格式Format(Date,“Long Date”)“2024年7月5日”
LCase(字符串)String将字符串转换成小写LCase(“LoNg”)“long”
UCase(字符串)String将字符串转换成大写UCase(“LoNg”)“LONG”
Space(长度)String将字符串中插入整个空格“Hi” & Space(2) & “World”“Hi World”
String(长度,字符)String重复数个字符String(5,“*”)“*****”
Len(字符串)Long计算字符串的长度Len(“Customer”)8
InStr([开始位置,]字符串1,字符串2[,比较])VariantLong字符串2在字符串1中最先出现的位置,若不存在则返回0InStr(1,“GHmdml”,“m”)3
Left(字符,长度)String从左起取指定个数的字符Left(“fdgm32”,4)“Fdgm”
Right(字符,长度)String从右起取指定个数的字符Right(“fdgm32”,4)“gm32”
Mid(字符,开始位置[,长度])String从开始位置起取指定个数的字符Mid(“fdgm3245”,4,3)“324”
LTrim(字符串)String去掉字符串左边的空格LTrim(" ghd ")"ghd "
RTrim(字符串)String去掉字符串右边的空格RTrim(" ghd ")" ghd"
Trim(字符串)String去掉字符串前后两边的空格Trim(" ghd ")“ghd”
Asc(字符串)Integer字符串收字裤的ASCII代码Asc(“abc”)97
Chr(数字)String将数字转换成ASCII代码执行的字符Chr(65)“A”
Str(数字)String将数字转换成字符串Str(54)“54”
Val(字符串)Variant字符串转换成数字Val(“54D5SL23”)54000000

标签:Dim,VBA,内置,String,Cells,Value,ws,字符串
From: https://blog.csdn.net/hotkoko/article/details/140158418

相关文章

  • 做了一款服务网络安全的多端系统。内置AI(gpt4o)/ai绘画(sd)/ChatTTS,无需登陆免费使用
    上一篇魔盒介绍文章已被我删除,因为本次重新做了产品定位,之前定位有点混乱先上链接之前有个哥们说做了app还不如先做网站,因为不方便下载,这次做了哈。重点:里面有gpt4o,充了几十美元反正也用不完,给大家用了网页端:https://mgb.abyssdawn.com/H5端:https://mgb-h5.abyssdaw......
  • python学习之字符串
    (一)表示方式:一对单影号或一对双影号:常用于单行字符串一对三影号(可双可单):常用于多行字符串,不用于给变量赋值时可作多行注释用字符串不可变,不能像列表一样修改其中某个元素,任何对是字符串的修改实际就是生成了一份新数据。(二)转义符\反斜杠(也是windows中路径分隔符,unix中路径分......
  • 做了一款服务网络安全的多端系统。内置AI(gpt4o)/ai绘画(sd)/ChatTTS,无需登陆免费使用
    上一篇魔盒介绍文章已被我删除,因为本次重新做了产品定位,之前定位有点混乱先上链接之前有个哥们说做了app还不如先做网站,因为不方便下载,这次做了哈。重点:里面有gpt4o,充了几十美元反正也用不完,给大家用了网页端:https://mgb.abyssdawn.com/H5端:https://mgb-h5.abyssdawn.co......
  • 代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网
    344简单写个循环1classSolution{2public:3voidreverseString(vector<char>&s){4chartmp;5intlen=s.size();6for(inti=0;i<len/2;i++){7tmp=s[i];8s[i]=s[len-......
  • 代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串
    151以前写过很呆的写法但能用嘿1classSolution{2public:3stringreverseWords(strings){4//初始化变量5vector<vector<int>>data;//存储单词的起始地址和长度6stringans;//最终结果字符串7intnum=0;......
  • Java 中的字符串替换方法详解:replace, replaceAll 和 replaceFirst
    在Java中,字符串的替换是一种常见的操作,特别是在处理文本和格式化输出时。Java提供了几种不同的方法来实现字符串替换,其中包括replace,replaceAll和replaceFirst。本文将详细讨论这些方法的用法、区别以及示例。1.replace(CharSequencetarget,CharSequencereplaceme......
  • 字符串
    AC自动机用于多个模式串(模式串在文本串里面出现),和文本串匹配对模式串建立trie,每个点上维护一个fail,每个节点其实代表一个前缀。若干个模式串形成了若干个前缀字符串集合S。fail[i]表示S中的所有字符串中,能和i这个字符串的后缀完全匹配的最长字符串。(当然这个字符串不能是i......
  • 字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
    在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。字......
  • 字符和字符串(2)(sizeof和strlen)
    1.初识sizeof与strlen函数    sizeof:准确的讲,sizeof不算一个函数,确切的说,它应该是一个运算符。sizeof使用的文件头文件就是#include<stdio.h>,sizeof运算符计算的是一个变量在计算机空间所占内存,当你使用sizeof函数计算一个变量空间的大小时,把这个变量放在si......
  • 力扣:151.反转字符串里的单词【2023年7月3日学习记录】
     方法一:双指针1.先使用trim()方法删除单词字符串前后空格字符。2.用两个指针指向字符串末尾单词(一个快指针,一个慢指针),快指针先向前移动,直到移动到空格字符停下来,然后截取从快指针到慢指针的单词到新开辟的字符串中。3.快指针再向前移动一位,同时将慢指针指向到快指针的位......