VBA常用的字符串内置函数

前言

在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/776483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前后端的导入、导出、模板下载等写法

导入&#xff0c;导出、模板下载等的前后端写法 文章目录 导入&#xff0c;导出、模板下载等的前后端写法一、导入实现1.1 后端的导入1.2 前端的导入 二、基础的模板下载2.1 后端的模板下载-若依基础版本2.2 前端的模板下载2.3 后端的模板下载 - 基于资源文件读取2.4 excel制作…

使用maven搭建一个SpingBoot项目

1.首先创建一个maven项目 注意选择合适的jdk版本 2.添加依赖 2.在pom.xml中至少添加依赖 spring-boot-starter-web 依赖&#xff0c;目的是引入Tomcat&#xff0c;以及SpringMVC等&#xff0c;使项目具有web功能。 <!-- 引入 包含tomcat&#xff0c;SpringMVC&#xff0c…

二维Gamma分布的激光点云去噪

目录 1、Gamma 分布简介2、实现步骤 1、Gamma 分布简介 Gamma 分布在合成孔径雷达( Synthetic Aperture &#xff32;adar&#xff0c;SA&#xff32;) 图像分割中具有广泛应用&#xff0c;较好的解决了SA&#xff32; 图像中相干斑噪声对图像分割的影响。采用二维Gamma 分布对…

配置基于不同端口的虚拟主机

更改配置文件&#xff0c;添加三个不同端口的虚拟主机 <directory /www> allowoverride none require all granted </directory><virtualhost 192.168.209.136:80> documentroot /www servername 192.168.209.136 </virtualhost><virtualhost 192.…

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…

Floyd判圈算法——环形链表(C++)

Floyd判圈算法(Floyd Cycle Detection Algorithm)&#xff0c;又称龟兔赛跑算法(Tortoise and Hare Algorithm)&#xff0c;是一个可以在有限状态机、迭代函数或者链表上判断是否存在环&#xff0c;求出该环的起点与长度的算法。 …

实验四 图像增强—灰度变换之直方图变换

一&#xff0e;实验目的 1&#xff0e;掌握灰度直方图的概念及其计算方法&#xff1b; 2&#xff0e;熟练掌握直方图均衡化计算过程&#xff1b;了解直方图规定化的计算过程&#xff1b; 3&#xff0e;了解色彩直方图的概念和计算方法 二&#xff0e;实验内容&#xff1a; …

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】认证服务03—分布式下Session共享问题

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】分布式下Session共享问题 session原理分布式下session共享问题Session共享问题解决—session复制Session共享问题解决—客户端存储Session共享问题解决—hash一致性Session共享问题…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos&#xff08;磁盘操作系统&#xff09;界面命令下不区分大小写&#xff1b; 1.2. 文件格式区分 windows用扩展名区分文件&#xff1b;如.exe代表执行文件&#xff0c;.txt代表文本文件&#xff0c;.…

Seatunnel本地模式快速测验

前言 SeaTunnel&#xff08;先前称为WaterDrop&#xff09;是一个分布式、高性能、易于扩展的数据集成平台&#xff0c;旨在实现海量数据的同步和转换。它支持多种数据处理引擎&#xff0c;包括Apache Spark和Apache Flink&#xff0c;并在某个版本中引入了自主研发的Zeta引擎…

【c++】通过写一个C++函数来模拟跨境洗钱和系统警告

效果图&#xff1a; 源码&#xff1a; #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> #include <chrono> #include <thread> // 引入线程头文件#ifdef _WIN32 // 确保只在Windows上包含Windows.h #inclu…

zigbee笔记:六、看门狗定时器(Watch Dog)

一、看门狗基础 1、看门狗功能&#xff1a; 由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成各种寄存器和内存的数据混乱&#xff0c;会导致程序指针错误等&#xff0c;程序运行可能会陷入死循环。程序的正常运行被打断&#xff0c;由单片机控制的系统无法继…

芯片的PPA-笔记

写在前面&#xff1a;这个仅记录自己对芯片PPA的一些思考&#xff0c;不一定正确&#xff0c;还请各位网友思辨的看待&#xff0c;欢迎大家谈谈自己的想法。 1 此次笔记的起因 记录的原因&#xff1a;自己在整理这段时间的功耗总结&#xff0c;又看到工艺对功耗的影响&#x…

12.SQL注入-盲注基于时间(base on time)

SQL注入-盲注基于时间(base on time) boolian的盲注类型还有返回信息的状态&#xff0c;但是基于时间的盲注就什么都没有返回信息。 输入payload语句进行睡5秒中&#xff0c;通过开发这工具查看时间&#xff0c;如图所示&#xff0c;会在5秒钟后在执行&#xff0c;因此存在基于…

面试篇-系统设计题总结

文章目录 1、设计一个抢红包系统1.1 高可用的解决方案&#xff1a;1.2 抢红包系统的设计1.3 其他 2、秒杀系统设计 这里记录一些有趣的系统设计类的题目&#xff0c;一般大家比较喜欢出的设计类面试题目会和高可用系统相关比如秒杀和抢红包等。欢迎大家在评论中评论自己遇到的题…

磁钢生产领域上下料解决方案

随着智能制造技术的不断革新&#xff0c;磁钢生产领域正逐步引入自动化生产线。然而&#xff0c;传统的人工上下料方式存在诸多问题&#xff0c;难以满足现代生产需求。富唯智能提出了一款复合机器人磁钢上下料解决方案&#xff0c;通过先进的自动化技术&#xff0c;提高生产效…

填报高考志愿,怎样正确地选择大学专业?

大学专业的选择&#xff0c;会关系到未来几年甚至一辈子的发展方向。这也是为什么很多人结束高考之后就开始愁眉苦脸&#xff0c;因为他们不知道应该如何选择大学专业&#xff0c;生怕一个错误的决定会影响自己一生。 毋庸置疑&#xff0c;在面对这种选择的时候&#xff0c;我…

Keycloak SSO 如何验证已添加的 SPN 是否生效

使用 Kerberos Ticket 验证&#xff1a; 在客户端计算机上&#xff0c;运行以下命令以获取 Kerberos Ticket&#xff1a; klist检查是否存在与 HTTP/yourdomain.com 相关的票证。如果存在&#xff0c;说明 SPN 已生效。 测试应用程序&#xff1a; 使用具有 HTTP/yourdomain.com…

windows USB 设备驱动开发-控制传输的数据包

每次在主机控制器和 USB 设备之间移动数据时&#xff0c;都会发生传输。 通常&#xff0c;USB 传输可大致分为控制传输和数据传输。 所有 USB 设备都必须支持控制传输&#xff0c;并且可以支持用于数据传输的端点。 每种类型的传输都与设备缓冲区USB 端点 的类型相关联。 控制传…

Linux 查看磁盘是不是 ssd 的方法

lsblk 命令检查 $ lsblk -d -o name,rota如果 ROTA 值为 1&#xff0c;则磁盘类型为 HDD&#xff0c;如果 ROTA 值为 0&#xff0c;则磁盘类型为 SSD。可以在上面的屏幕截图中看到 sda 的 ROTA 值是 1&#xff0c;表示它是 HDD。 2. 检查磁盘是否旋转 $ cat /sys/block/sda/q…