精华内容
下载资源
问答
  • 字符串替换涉及到的,最主要的3个内容:string、pattern 和 ...举个例子,将下示字符串中的 "Intrahepatic" 替换为 "Extrahepatic":test = "YES329Intrahepatic RecurrenceNoNONOYESNo123"sub("Intrahepatic", "E...

    字符串替换涉及到的,最主要的3个内容:stringpatternreplacement,分别对应从哪里去匹配、匹配什么、以及要替换成什么。

    举个例子,将下示字符串中的 "Intrahepatic" 替换为 "Extrahepatic":

    test = "YES329Intrahepatic RecurrenceNoNONOYESNo123"

    sub("Intrahepatic", "Extrahepatic", test)

    [1] "YES329Extrahepatic RecurrenceNoNONOYESNo123"

    其实就是最简单的,识别一个内容并替换为一个内容!

    如果存在多个匹配,如将 test 中所有的 "No" 全部替换为 "no",则需要使用 gsub 函数:

    gsub("No", "no", test)

    注意,字符串中的 "NO" 并没有被替换,意味着区分大小写!

    所以,如果想将所有可能的大小写情况都被纳入替换,需要列举出所有可能并以"|"间隔:

    gsub("No|NO|no|nO", "no", test)

    或者用"[]"列举出每个字母出现的可能:

    gsub("[Nn][Oo]", "no", test)    

    即,将多个不同的内容替换成一个相同的内容

    其实,本例比较特殊,大小写的问题在 gsub 中设置参数 ignore.case = T 即可:

    gsub("No", "no", test, ignore.case = T)

    上示部分写法涉及到使用正则表达式。再比如,将字符串中的空格和结尾处的数字替换为"-":

    gsub("\\s|\\d+$", "-", test)

    [1] "YES329Intrahepatic-RecurrenceNoNONOYESNo-"

    更进一步的,我们能否在一句命令中实现多种替换?即,将上示三个替换过程在一句命令中完成!

    方法1:简单组合

    gsub("Intrahepatic", "Extrahepatic", gsub("[Nn][Oo]", "no", gsub("\\s|\\d+$", "-", test)))

    [1] "YES329Extrahepatic-RecurrencenononoYESno-"

    以前我会用这种写法,不依赖其他包,简单有效,来几个组几个。但是!随之可读性也会变差,而且总觉得有点冗余,不够智能,只给出对应关系不行吗?

    方法2:stringr 包中的 str_replace_all 函数:

    p_load(stringr)    # 安装加载stringr

    str_replace_all(test, c("Intrahepatic" = "Extrahepatic", "[Nn][Oo]" = "no", "\\s|\\d+$" = "-"))

    直接给出替换的对应关系,用"="连接一目了然,代码无冗余,而且把 string 放在第一个参数很舒服啊!

    方法3:mgsub包中的 mgsub 函数:

    p_load(mgsub)

    mgsub(test, c("Intrahepatic", "[Nn][Oo]", "\\s|\\d+$"), c("Extrahepatic", "no", "-"), recycle = T)

    这里将 patternreplacement 分开写的设计很人性化, str_replace_all 中就不支持这种写法。

    需要注意的是,如果正则配的内容与替换的长度不一致时(如上,"\s" 和 "\\d+$" 同时对应 "-"),需要添加参数 recycle = T,否则报错:

    pattern and replacement vectors must be the same length

    哦,对了,这个时候你输入test会发现还是替换前的内容,是因为上示的替换均是生成一个新的字符串,所以没赋值就不会覆盖掉之前的test!

    哦,还有...新来的小伙伴

    如果你在执行 p_load 的时候报错

    点这里

    873ed2075d3d0a14ad81822317dbcb58.png

    展开全文
  • 点上方关注我们,每日1练,每天进步一点点第13期题目内容如下:Excel函数一直缺乏多层替换的功能……比如说,C列有一组数据,现在需要将:月亮替换为星球,太阳替换为星光,梦想替换为起床,我替换为你,今天替换为...

    点上方关注我们,每日1练,每天进步一点点1d0a48a3c4ce6a116cef03a699102e01.gif

    第13期题目内容如下:

    Excel函数一直缺乏多层替换的功能……
    比如说,C列有一组数据,现在需要将:
    月亮替换为星球,
    太阳替换为星光,
    梦想替换为起床,
    我替换为你,
    今天替换为明天
    D列是模拟结果


    于是你默默打开Excel……

    84c1673cf0df2f105e5b06f3aca5fac0.png

    原题链接:【NO.013】问:多层数据替换

    如果你还没有做这道题,请先思考再向下看↓↓↓↓

    分享几种解法,包含了函数、PowerQuery、VBA…

    这道题,对于以上所有的解法而言都是基础问题,除了函数……有时候完全不明白表格开发者的作为,像Split,Accumulate这些常用的函数,为啥被呼喊了十几年也迟迟不更新……

    2fa483488b900c527a7dd768fa5ef2c8.png

    1,VBA解:

    Sub byVBA()
        Dim aData, aRef, i As Long, j As Long, s As String
        With Worksheets("数据表")
            aData = .Range("a1:b" & .Cells(Rows.Count, 1).End(xlUp).Row) '数据
            aRef = .Range("c1:d" & .Cells(Rows.Count, 3).End(xlUp).Row) '参数
        End With
        For i = 2 To UBound(aData)
            s = aData(i, 1) '原字符串
            For j = 2 To UBound(aRef) '循环使用replace替换  s = Replace(s, aRef(j, 1), aRef(j, 2))
            Next
            aData(i, 2) = s '结果字符串
        Next
        Worksheets("VBA").Select
        Cells.ClearContents '清空数据
        Range("a1").Resize(UBound(aData), 2) = aData
    End Sub

    2,PowerQuery解:

    let
        源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
        参数表 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
        结果 = Table.AddColumn(源,"结果",each List.Accumulate(Table.ToRows(参数表),[数据],(x,y)=>Text.Replace(x,y{0},y{1})))
    in
        结果


    3,函数解:
     1)无可奈何的SUBSTITUTE解:
    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"月亮","星球"),"太阳","星光"),"梦想","起床"),"我","你"),"今天","明天")
     2)再次无可奈何的辅助区域解:90dc9618c1df6a9a9ed996b4ec8e15c1.png国境以北,D列以右,为辅助区,D2单元格输入以下公式,向右多列复制填充。
    =SUBSTITUTE(C2,OFFSET(数据表!$C$1,COLUMN(A1),),OFFSET(数据表!$D$1,COLUMN(A1),))

    B2输入以下公式获取最终替换结果。
    =LOOKUP("座",2:2)

    文件下载:


    https://pan.baidu.com/s/1lGS5BbRR6-crFM4Cbe9atg
    提取码: rya8
     系统学习Excel,推荐加入我的Excel社群a8ac1101fa1452d34d46a3d2e324d612.png

    更多教程&练习

    • 教程1:零基础学Excel(一)什么是Excel?

    • 教程2:零基础学SQL in Excel 25篇合集

    • 作业集:学习不练习=没学习,答题开始!


    ©看见星光

    538268c8bced38b48e663f14802ddfc1.png

    点赞!3ea503fabc85f70732907e003834d7a9.gif

    展开全文
  • 今天示例也是一个自定义函数,可用来替换字符串中第N次出现子字符串。这个自定义函数结合了Mid函数、InStr函数和Replace函数来创建,非常方便使用。下面是完整程序代码:Function ReplaceN(ByVal str1 As ...

    学习Excel技术,关注微信公众号:

    excelperfect

    本文继续学习wellsr.com中提供的优秀VBA程序。今天的示例也是一个自定义函数,可用来替换字符串中第N次出现子字符串。这个自定义函数结合了Mid函数、InStr函数和Replace函数来创建,非常方便使用。

    下面是完整的程序代码:

    Function ReplaceN(ByVal str1 As Variant, _

            strFind As String, _

            strReplace As String, _

            N As Long, _

            Optional Count As Long) As String

        Dim i As Long, j As Long

        Dim strM As String

        strM = str1

        If Count <= 0 Then Count = 1

        For i = 1 To N - 1

            j = InStr(1, strM, strFind)

            strM = Mid(strM, j + Len(strFind),Len(strM))

        Next i

        If N <= 0 Then

            ReplaceN = str1

        Else

            ReplaceN = Mid(str1, 1, Len(str1) -Len(strM)) _

                    & Replace(strM, strFind,strReplace, _

                    Start:=1, Count:=Count)

        End If

    End Function

    示例

    替换字符串中第2次出现的子字符串

    Sub VBA_Replace1()

        Dim str1 As String

        str1 = "One fish, two fish, red fish,blue fish"

        str1 = ReplaceN(str1, "fish","cat", 2)

        '结果为:One fish, two cat, red fish, blue fish

        Debug.Print str1

    End Sub

    替换从第2次出现起的2个子字符串

    Sub VBA_Replace2()

        Dim str1 As String

        str1 = "One fish, two fish, red fish,blue fish"

        str1 = ReplaceN(str1, "fish","cat", 2, 2)

        '结果为:One fish, two cat, red cat, blue fish

        Debug.Print str1

    End Sub

    程序中设置了可选的第5个参数的值,这将会告诉函数从第N次出现子字符串开始要替换的次数。

    在工作表中使用

    可以像内置的Excel函数一样在工作表中使用ReplaceN函数,如下图1所示。

    13fadcfac1624b24bb920b4f347ebb98.png

    1

    9d9141767761da56013ba3c4b9ffde94.png

    展开全文
  • 今天示例也是一个自定义函数,可用来替换字符串中第N次出现子字符串。这个自定义函数结合了Mid函数、InStr函数和Replace函数来创建,非常方便使用。下面是完整程序代码:Function ReplaceN(ByVal str1 As ...

    学习Excel技术,关注微信公众号:

    excelperfect

    本文继续学习wellsr.com中提供的优秀VBA程序。今天的示例也是一个自定义函数,可用来替换字符串中第N次出现子字符串。这个自定义函数结合了Mid函数、InStr函数和Replace函数来创建,非常方便使用。

    下面是完整的程序代码:

    Function ReplaceN(ByVal str1 As Variant, _

            strFind As String, _

            strReplace As String, _

            N As Long, _

            Optional Count As Long) As String

        Dim i As Long, j As Long

        Dim strM As String

        strM = str1

        If Count <= 0 Then Count = 1

        For i = 1 To N - 1

            j = InStr(1, strM, strFind)

            strM = Mid(strM, j + Len(strFind),Len(strM))

        Next i

        If N <= 0 Then

            ReplaceN = str1

        Else

            ReplaceN = Mid(str1, 1, Len(str1) -Len(strM)) _

                    & Replace(strM, strFind,strReplace, _

                    Start:=1, Count:=Count)

        End If

    End Function

    示例

    替换字符串中第2次出现的子字符串

    Sub VBA_Replace1()

        Dim str1 As String

        str1 = "One fish, two fish, red fish,blue fish"

        str1 = ReplaceN(str1, "fish","cat", 2)

        '结果为:One fish, two cat, red fish, blue fish

        Debug.Print str1

    End Sub

    替换从第2次出现起的2个子字符串

    Sub VBA_Replace2()

        Dim str1 As String

        str1 = "One fish, two fish, red fish,blue fish"

        str1 = ReplaceN(str1, "fish","cat", 2, 2)

        '结果为:One fish, two cat, red cat, blue fish

        Debug.Print str1

    End Sub

    程序中设置了可选的第5个参数的值,这将会告诉函数从第N次出现子字符串开始要替换的次数。

    在工作表中使用

    可以像内置的Excel函数一样在工作表中使用ReplaceN函数,如下图1所示。

    5af1106a833194603f4ca8d49fe4c3ed.png

    1

    50d53add73cf2c9842ffa0f7f69c4697.png

    展开全文
  • Len(字符串/字符串变量) 返回字符串的字符个数LenB(字符串/字符串变量) 返回字符串的字节个数Left(字符串表达式,长度) 返回指定字符串从左边算起指定数量的字符Right(字符串表达式,长度) 返回指定字符串从右边算起...
  • VBA中字符串的相关函数

    千次阅读 2019-05-24 15:53:56
    目录 trim()、lcase()、ucase() ...使用 replace() 把字符串中的某个字符替换成其它字符 使用 split() 把字符串按某个字符分割 instr运算符 Like运算符 使用string()进行填充 trim()、lcase()、ucase() ...
  • EXCEL VBA字符串替换

    万次阅读 2015-03-30 17:00:52
    问题描述因为模型结构字段名更改,需要修正对应EXCEL说明文档。 修正规则如下,将原来字符形式改成驼峰式。 原始字段 修正后字段 session_id sessionId 打开VBA这里是使用excel自带的VBA进行处理。 在...
  • 删除字符串中的换行符: Replace(String, vbLf, "") Replace(String, vbCr, "") Replace(String, vbCrLf, "") Replace(String, vbNewLine, "") 有时候只用vbLf还不行,这四个统统替换,应该没有问题了。。。吧
  • cad vba 用EXCEL数据 自动替换CAD中字符,另存为新设计,便于批量修改生成新文档
  • if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_replace]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[f_replace]GO/*--非法字符替换函数去掉字符串中,小于32的字符保留...
  • word vba 如何查找出一个字符串中包括了多少个指定子字符串? Sub at() aaaa = "ASDFSF。ASDF。SDF。234。'XCV。d" '第1种方法 bbb = Replace(aaaa, "。", "") cccc = Split(aaaa, "。") CS1 = Len(aaaa) - Len...
  • VBA 处理字符串

    2013-11-15 16:37:23
    目录 1 VBA中的字符串 2 VBA中处理字符串的函数 2.1 比较字符串 2.2 转换字符串 2.3 创建字符串 2.4 获取字符串的长度 2.5 格式化字符串 2.6 查找字符串 2.7 提取字符/字符串 ...2.14 替换字符串 2.15 反向字符
  •  如题,实际应用,客户输入地址含有回车换行,导致格式转换出错,因此需要清除掉,方法有二: 1、替换,这个方法只能清除一个回车换行 '检测地址是否有回车换行 addr = Cells(row1, 12) If InStr(1, ...
  • 替换Excel表格中的字符或者字符串在职场数据处理中经常遇到,本篇神奇的VBA将介绍如何一一对应的将某些字符替换为其它字符。------ 需求案例------将A1:A9单元格区域中的1,2,3数字分别替换为A,B,C。神奇的VBA提供...
  • 当我们选取图表中的某个数据系列时,在公式栏中就会显示相应的SERIES公式,但这个公式不是真正的公式,不能输入到单元格中。有时,我们可能会批量修改SERIES公式,但是对于SERIES公式来说,没有内置的“查找和替换”...
  • 我的问题是“文本字段”中的文本不是这样找到的。即使在Word中,也没有搜索所有内容的选项——实际上,您必须在“主文档”和“文本字段”之间进行选择。作为Windows世界的新手,我试图浏览VBA文档,但没有找到帮助...
  • 替换Excel表格中的字符或者字符串在职场数据处理中经常遇到,本篇神奇的VBA将介绍如何将不定长的字符筒体替换成一个字符。------ 需求案例------将A1:A9单元格区域中的连续的--,----,------,-------字符替换为一...
  • 利用VBA可以轻松地将某文件夹下的所以WORD文档中的某个字符串全部替换为其他字符串。下面是具体操作步骤。  第一,首先将需要批量替换的多个Word文档放在同一文件夹下面。  第二,新建一空白Word文档,右击空白...
  • 这种字符串处理的问题,并不是Excel的长处,需要编写VBA来完成,今天我们学习一下借助Word来处理这个问题。首先把Excel中的内容复制到Word中;在Word中操作替换,点击更多,打开搜索选项,勾选使用通配符,搜索里面...
  • 将文本中的一个文本字符串替换为另一个文本字符串。此代码片示例将页面上所有出现的“#”替换为当前日期。 参考代码 Sub test() ' 定义形状变量 Dim s As Shape ' 遍历当前页面所有的文本形状(通过查找) ...
  • 导出EXCEL换行符br为什么没有起到作用br是html中的换行符,在excel中并不起效,excel中换行是用alt enter强制插入的,或者用vba代码强制换行的。导出EXCEL换行符为什么没有起到作用br是html中的换行符,在excel中并...
  • 正则表达式(Regular Expression),常被用来检验、替换符合某个模式(规则)的字符串,在代码中常缩写为 regexp。 VBA中并没有直接提供正文表达式对象,需要借助 VBScript 正则对象。 1. 前期引用 如果使用前期绑定...
  • 的字符以字段中的内容替换,并将{照片}替换成照片。如果没有照片,则删除相应的替换字符。参数:photofile——照片文件的路径字符串,为完整绝对路径。不判断文件是否存在,如果不存在将出错。插入图片其实只有...
  • Excel VBA入门基本操作之常用函数

    千次阅读 2013-03-17 11:26:08
    EXCEL VBA基本操作之常用函数   1.字符串操作。...在字符串中替换指定字符串 Left 字符串左边开始,取字符串 Right 字符串右边开始,取字符串 Mid
  • 如果Excel单元格内包含了换行符(又称,软空格,Chr(10),vbLF),则使用Len()函数统计单元格内字符串长度时,会包括换行符长度。要在统计字符串长度时不考虑换行符,则需要在使用Len()函数前移除换行符,即将Chr...
  • 群里(Word学习交流群:180627193)一位朋友问到,如何一次性批量替换多个word文档中的同一内容。其实,实现多个Word文档的字符进行批量替换的方法有多种。(www.itblw.com)  第一种方法,可以利用第三方软件:...
  • '正则表达式是处理字符串的外部工具,它可以根据设置的字符串对比规则,进行字符串的对比、替换等操作。 '正则表达式作用: '1、完成复杂的字符串判断 '2、在字符串判断时,可以最大限度避开循环,从而...
  • 为了这个问题,我们会说{something}当我找到一个特定匹配时,它会被另一个字符串的内容替换,该字符串也可能包含标记.标记必须按照它在最终文档出现顺序进行替换.我必须知道每次替换所做递归级别. 这基本上...
  • 函数作用:从右边开始查找指定字符在字符串中的位置...43 '15.函数作用:从右边开始查找指定字符在字符串中的位置...44 '16.函数作用:计算工龄.................................44 '17.函数作用:计算日期差,除去星期...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

vba替换字符串中的字符