EXCEL VBA字符串替换

来源:互联网 发布:你见过最恐怖的事 知乎 编辑:程序博客网 时间:2024/06/11 16:13

问题描述

因为模型结构中字段名更改,需要修正对应的EXCEL说明文档。
修正规则如下,将原来的连字符形式改成驼峰式。

原始字段 修正后字段 session_id sessionId

打开VBA

这里是使用excel自带的VBA进行处理。
在excel里调出VBA的方法如下图所示。在某个表单上右击,并点击”查看代码“。

excel里调出VBA

EXCEl2010的VBA窗口打开如下

这里写图片描述

解决思路

将原始字段按照符号”_”进行split,将切分后的words,除第一个word之外,其他的word首字母改为大写,然后再将所有的words连接起来。

主要方法

Range(): 代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域,如Range(D:D)可以代表D这一整列,Range(D1:D2)表示D列的第一和第二行,其中的数字还可以用变量来替代,具体方法见下面的示例代码。

Split(str[,delimiter[,count[,compare]]]): str是要拆分的字符串,delimiter是拆分依据的分隔符,count是分隔后的subStrings的最大个数,compare用来指定比较方式,有二进制比较方式和文本比较方式(未深究,不太懂)

Join(List[,delimiter]): 第一个参数List可以是一个Array,第二个参数delimiter是Array中每个字符串连接时的连接符,不填delimiter的话则默认为一个空格” “。

Left(Str, Len): 返回从左边开始,长度为Len的Str的子串。

Right(Str, Len): 返回从右边开始,长度为Len的Str的子串。

不过就我个人经验而言,不建议在代码中写Range(D:D)。我一开始用了Range(D:D),然后在调试时,于Range(D:D)的循环中调用了MsgBox,结果这个MsgBox始终无法结束。

如果想查询VBA中某个方法或是关键字的官方文档,可以google “MSDN VBA” + “方法名/关键字”

代码实现

//Sub: Declares the name, parameters, and code that define a Sub procedure//这里的Sub的含义是“子过程”Private Sub replace()    Set Values = ActiveSheet.Range("D2:D102")//将EXCEL D列第2行到第102行的数据存储在Values中    Dim num As Integer//这个num用来记录处理到D列的哪一行    num = 2    For Each Value In Values//遍历Values,D列的某行对应Value        Words = Split(Value, "_")//将Value按照"_"进行拆分        Dim result As String//用来存储Value处理后的结果(即用来记录sessionId)        Dim count As Integer//用来标识是否是拆分后的第一个word        result = ""        count = 0        For Each word In Words            If (count = 0) Then//如果是第一个word,仅做里连接,而不大写首字母                result = Join(Array(result, word), "")                count = count + 1            Else//否则,首字母大写                //UCase(Left(word, 1))用来将首字母大写                //Right(word, Len(word) - 1))用来获取除首字母外的剩余字符                result = Join(Array(result, UCase(Left(word, 1)), Right(word, Len(word) - 1)), "")                count = count + 1            End If        Next        ActiveSheet.Range("D" & num) = result//将num行的值,设置为处理后的结果result    NextEnd Sub
0 0