分享

自定义函数myReplace,替换指定字符为A/B/C/D......

 冷茶视界 2024-06-13 发布于江苏

内容提要

  • 字符替换
  • 字符串按指定字符分列
  • 根据ASC码取得字符(字母)
大家好,我是冷水泡茶。
今天有朋友咨询一个问题:

我让她模拟了一个数据,是这样的:

乍一看,用函数公式是不是也能处理?但仔细一想,把“|”替换成A、B、C、D,甚至不知道有多少个“|”,好像也不太好弄,还是用VBA吧,我们可以设置一个自定义函数来处理。
基本思路:
1、我们设置一个自定义函数,名称为myReplace,参数如下:

(1)参数1:rng,为一个单元格;

(2)参数2:delimiter,分隔符,本案例中的“|”符号,被替换的字符;

(3)参数3:strType,需要替换成的字符类型:

(A)默认为1,则为“A:”、“B:”、“C:”、“D:”......,
(B)若输入其他数字,则为“1:、“2:”、“3:”、“4:”......
2、函数实现逻辑:

(1)把第一参数按照分隔符进行分列,存到一个字符串数组arr中;

(2)循环数组arr,循环变量为i,如果第三参数为默认值,则通过Chr函数计算出对应 i 的字母:Chr(65 + i) ,如果第三参数不等于1,则给出对应数字i+1,

(3)把计算得出的字母或数字序号与arr对应的元素全部连接起来,则为最终的函数结果。

VBA代码,在myModule里,自定义函数myReplace:

Function myReplace(rng As Range, delimiter As String, Optional strType As Integer = 1) As String    Dim arr() As String    Dim strTarget As String    Dim result As String    Dim i As Integer    '//第一参数为一个单元格,如果选择多个单元格则显示错误信息    If rng.CountLarge > 1 Then        myReplace = "Err:目标单元格错误"        Exit Function    End If        '//把单元格的值赋值给变量strTarget    strTarget = rng.Value        '//分列strTarget到数组arr    arr = Split(strTarget, delimiter)    result = ""        '//第三参数默认为1,替换为ABCD.....,输入其他,则替换为数字    For i = LBound(arr) To UBound(arr)        If strType = 1 Then            result = result & Chr(65 + i) & ":" & Trim(arr(i))        Else            result = result & i + 1 & ":" & Trim(arr(i))        End If    Next    myReplace = resultEnd Function

后记

1、本案例的关键点就是“分列再组合”。
2、还有一个关键点就是如何根据一个数字取得相应的字母,我们需要知道字母的ASC码值,再用Chr函数取得相应字母:

大写字母(A-Z):65~90

小写字母(a-z):97~122。

3、经过沟通,确定“|”的数量不超过26个,所以直接用Chr(i+65)来表示。
4、函数中,去除了每段字符前后的空格。如果仅仅把“|”替换为“A:”之类的,那么,需要修改函数中带有Trim的地方,把Trim函数去掉。
5、这个分隔符“|”,手工输入好不行,得从原文字中复制。
好,今天就到这里,我们下期再会!
~~~~~~End~~~~~~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多