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 IntegerDim i As Integer' 设置worksheetSet ws = ThisWorkbook.Worksheets("Sheet1")' 获取工作表的最大行数lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row' 循环遍历查询,因第一行为表头,故从第二行开始循环For i = 2 To lastRow' 判断A列值的长度是否等于10If Len(ws.Cells(i, "A").Value) = 10 Thenws.Cells(i, "B").Value = "True"Elsews.Cells(i, "B").Value = "False"End IfNext iEnd 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 IntegerDim i As Integer' 设置worksheetSet 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 iEnd Sub
运行后截图

3. 字符串分割Split()
使用Split()可以按照固定的分隔符对字符串进行分割,最终返回类型为数组(默认数组下标从0开始)
如以上案例中,C列的产品型号由品牌、名称、型号构成,三者之间通过“-”进行连接,那么在拆分时也可以通过“-”来进行分割处理,完整的代码如下:
Sub StringTest()Dim ws As Worksheet ' 声明变量用来存储worksheet对象Dim lastRow As IntegerDim i As Integer' 设置worksheetSet ws = ThisWorkbook.Worksheets("Sheet1")' 获取工作表的最大行数lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row' 循环遍历查询,因第一行为表头,故从第二行开始循环For i = 2 To lastRow' 获取品牌--分割后获取数组下标为0ws.Cells(i, "F").Value = Split(ws.Cells(i, "C").Value, "-")(0)' 获取名称--分割后获取数组下标为1ws.Cells(i, "G").Value = Split(ws.Cells(i, "C").Value, "-")(1)' 获取型号--分割后获取数组下标为2ws.Cells(i, "H").Value = Split(ws.Cells(i, "C").Value, "-")(2)Next iEnd Sub
4. String()可生成重复字符串
String(Number,Char) 函数用于生成指定长度Number的重复的字符串Char
示例:
在sheet1中J列为联系电话,为保护联系人的隐私,现需要将其电话号码的中间四位数字隐藏,使用星号*代替。
思路:
先通过Mid() 函数提取出联系电话中间的四位数字,随后使用Replace()函数进行替换,替换后的字符串使用String()来定义,完成的代码如下:
Sub StringTest()Dim ws As Worksheet ' 声明变量用来存储worksheet对象Dim lastRow As IntegerDim i As IntegerDim strTel As String ' 定义联系电话变量' 设置worksheetSet ws = ThisWorkbook.Worksheets("Sheet1")' 获取工作表的最大行数lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row' 循环遍历查询,因第一行为表头,故从第二行开始循环For i = 2 To lastRow' 替换联系电话中间四位数字为四个星号*strTel = ws.Cells(i, "J").Valuews.Cells(i, "J").Value = Replace(strTel, Mid(strTel, 4, 4), String(4, "*"))Next iEnd Sub
运行后截图

5. StrConV()转换字符串
StrConv()函数可以实现对字符串英文的大小写转换,还能实现其他类型的一些转换,主要用法是StrConv(String,Conversion,<LCID>),其中String表示待处理的字符串,Conversion表示执行转换的类型,LCID为可选参数,表示与系统LocaleID不同,则为LocaleID。
关于Conversion转换类型,可参考下表总结
| 常量名称 | 值 | 说明 |
|---|---|---|
| vbUpperCase | 1 | 将字符串转换成全部大写形式 |
| vbLowerCase | 2 | 将字符串转换成全部小写形式 |
| vbProperCase | 3 | 将字符串转换成首字母大写形式 |
| vbWide | 4 | 将字符串中的单字节字符转换成双字节字符 |
| vbNarrow | 8 | 将字符串中的双字节字符转换成单字节字符 |
| vbUnicode | 64 | 将字符串根据系统的默认编码转换成Unicode |
| vbFromUnicode | 128 | 将字符串由Unicode转换成系统的默认编码 |
示例
在Sheet1的I列联系人中,为规范格式,先需要将该列内容统一修改为首字母大写的形式,完整的代码如下:
Sub StringTest()Dim ws As Worksheet ' 声明变量用来存储worksheet对象Dim lastRow As IntegerDim i As Integer' 设置worksheetSet 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 iEnd 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中最先出现的位置,若不存在则返回0 | InStr(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 |
相关文章:
VBA常用的字符串内置函数
前言 在VBA程序中,常用的内置函数可以按照功能分为字符串函数、数字函数、转换函数等等,本节主要会介绍常用的字符串的内置函数,包括Len()、Left()、Mid()、Right()、Split()、String()、StrConV()等。 本节的练习数据表以下表为例ÿ…...
大数据面试题之Spark(7)
目录 Spark实现wordcount Spark Streaming怎么实现数据持久化保存? Spark SQL读取文件,内存不够使用,如何处理? Spark的lazy体现在哪里? Spark中的并行度等于什么 Spark运行时并行度的设署 Spark SQL的数据倾斜 Spark的exactly-once Spark的…...
AI绘画 Stable Diffusion图像的脸部细节控制——采样器全解析
大家好,我是画画的小强 我们在运用AI绘画 Stable Diffusion 这一功能强大的AI绘图工具时,我们往往会发现自己对提示词的使用还不够充分。在这种情形下,我们应当如何调整自己的策略,以便更加精确、全面地塑造出理想的人物形象呢&a…...
liunx离线安装Firefox
在Linux系统中离线安装Firefox浏览器,您需要先从Mozilla的官方网站下载Firefox的安装包,然后通过终端进行安装。以下是详细的步骤: 准备工作 下载Firefox安装包: 首先,在一台可以上网的电脑上访问Firefox官方下载页面…...
UNet进行病理图像分割
数据集链接:https://pan.baidu.com/s/1IBe_P0AyHgZC39NqzOxZhA?pwdnztc 提取码:nztc UNet模型 import torch import torch.nn as nnclass conv_block(nn.Module):def __init__(self, ch_in, ch_out):super(conv_block, self).__init__()self.conv nn…...
初二数学基础差从哪开始补?附深度解析!
有时候,当你推不开一扇门的时候,不要着急,试着反方向拉一下,或者横向拉一下。下面是小偏整理的初二数学基础差从哪开始补2021年,感谢您的每一次阅读。 初二数学基础差从哪开始补2021年 第一个问题是很多同学都…...
【C语言】return 关键字
在C语言中,return是一个关键字,用于从函数中返回值或者结束函数的执行。它是函数的重要组成部分,负责将函数的计算结果返回给调用者,并可以提前终止函数的执行。 主要用途和原理: 返回值给调用者: 当函数执…...
华为机试HJ13句子逆序
华为机试HJ13句子逆序 题目: 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 想法: 将输入的字符串通过…...
代码随想录day40 动态规划(5)
52. 携带研究材料(第七期模拟笔试) (kamacoder.com) 完全背包,可重复放入物品,需要用一维滚动数组从前往后遍历。 由于第0个物品和后面物品的转移方程没有区别,可以不额外初始化dp数组,直接用元素全0的d…...
FFmpeg 命令行 音视频格式转换
📚:FFmpeg 提供了丰富的命令行选项和功能,可以用来处理音视频文件、流媒体等,掌握命令行的使用,可以有效提高工作效率。 目录 一、视频转换和格式转换 🔵 将视频文件转换为另一种格式 🔵 指定…...
Jmeter使用JSON Extractor提取多个变量
1.当正则不好使时,用json extractor 2.提取多个值时,默认值必填,否则读不到变量...
c++ 设计模式 的课本范例(下)
(19) 桥接模式 Bridge,不是采用类继承,而是采用类组合,一个类的数据成员是类对象,来扩展类的功能。源码如下: class OS // 操作系统负责绘图 { public:virtual ~OS() {}virtual void draw(cha…...
结合数据索引结构看SQL的真实执行过程
引言 关于数据库设计与优化的前几篇文章中,我们提到了数据库设计优化应该遵守的指导原则、数据库底层的索引组织结构、数据库的核心功能组件以及SQL的解析、编译等。这些其实都是在为SQL的优化、执行的理解打基础。 今天这篇文章,我们以MySQL中InnoDB存…...
spark shuffle——shuffle管理
ShuffleManager shuffle系统的入口。ShuffleManager在driver和executor中的sparkEnv中创建。在driver中注册shuffle,在executor中读取和写入数据。 registerShuffle:注册shuffle,返回shuffleHandle unregisterShuffle:移除shuff…...
HTMLCSS(入门)
HTML <html> <head><title>第一个页面</title></head><body>键盘敲烂,工资过万</body> </html> <!DOCTYPE>文档类型声明,告诉浏览器使用哪种HTML版本显示网页 <!DOCTYPE html>当前页面采取…...
富格林:曝光可信策略制止亏损
富格林指出,相信大家都对黄金投资的价值空间有目共睹,现如今黄金市场波动频繁,因此不少投资者也开始加入该市场试图赢得额外的财富。但作为新手投资者贸贸然地进场操作,亏损的几率是很大的,因此要学会掌握正规平台曝光…...
Android --- Service
出自于此,写得很清楚。关于Android Service真正的完全详解,你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 服务可由其他应用组件…...
Vue3从入门到精通(三)
vue3插槽Slots 在 Vue3 中,插槽(Slots)的使用方式与 Vue2 中基本相同,但有一些细微的差异。以下是在 Vue3 中使用插槽的示例: // ChildComponent.vue <template><div><h2>Child Component</h2&…...
【FreeRTOS】同步与互斥通信-有缺陷的互斥案例
目录 同步与互斥通信同步与互斥的概念同步与互斥并不简单缺陷分析汇编指令优化过程 - 关闭中断时间轴分析 思考时刻 参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 同步与互斥通信 同步与互斥的概念 一句话理解同步与互斥:我等你用完厕所,我再…...
Docker 安装 Python
Docker 安装 Python 在当今的软件开发领域,Docker 已成为一项关键技术,它允许开发人员将应用程序及其依赖环境打包到一个可移植的容器中。Python,作为一种广泛使用的高级编程语言,经常被部署在 Docker 容器中。本文将详细介绍如何在 Docker 中安装 Python,以及如何配置环…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
