精华内容
下载资源
问答
  • Excel VBA 里面有个function可以按byte读取字符串
  • @VBA字符串操作:从右向左截取特定分隔符后的内容 熟悉EXCEL函数的朋友遇到截取字符串的时候第一个想到的肯定是FIND()、 LEN() 、LEFT()、**RIGHT()**这一套操作, 但很遗憾VBA里面的FIND针对的是Range对象,用到字符...

    @VBA字符串操作:从右向左截取特定分隔符后的内容

    熟悉EXCEL函数的朋友遇到截取字符串的时候第一个想到的肯定是FIND()LEN()LEFT()、**RIGHT()**这一套操作, 但很遗憾VBA里面的FIND针对的是Range对象,用到字符串类型的变量上只能会不停报错。此时需要请出的大神是VBA/Access里面的函数:

    InStr() 和 InStrRev()兄弟

    对于大量诸如“上海市浦东新区金桥街道某某路某某号”这样的结构化文本而言,可以把重复出现的“市、区、街道、路、号”看做“分隔符”,进而把内容分隔成我们需要的小板块。

    具体来说,InStr从左往右找,InStrRev从右向左,不涉及大小写区分的话直接填——(字符串,“分隔符”)即可,函数返回一个整数来表示分隔符在字符串中的下标。留意下,如果分隔符是“//”,“自治区”之类的多个字符组成,那么返回的下标永远是分隔符左起第一个字符在整个字符串里面的位置。

    举例说明

    待切片字符串: 北 京 > 海 淀 > 学 院 路 > 北 京 语 言 大 学
    对 应 的 下 标: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    要 求: 把最后一个“>”右边的内容解出来

    步骤

    1. 字符串全长 = VBA.Len(“北京>海淀>学院路>北京语言大学”), 结果是16
    2. 找到最右边一个“>”的下标 = VBA.InStrRev(“北京>海淀>学院路>北京语言大学”, “>”),结果是10
      (有趣吧,InStrRev虽然是从右往左找,但下标并没有从右往左数,也不像python用负数,还是正序下标)
    3. 目标字符串=VBA.Right(“北京>海淀>学院路>北京语言大学”, 16-10), 右截取,搞定。
    4. 至于说有些列里面没有“>”, 那就IF判断下即可,没有的保持原样不切片即可

    下面上我的工作实例,要求写宏代码把原表O列中的样式改成仅存在最后一层机构名的形式:

    图1:原表0列的样子

    原表0列,由于系统导出时附带了完整的层级从属关系,因此多处了很多“>>”分隔符,层级多则三层,少则没有图2:清理后的样子
    没有“>>”的话维持不变,有“>>”的话只保留最右边的机构名

    代码如下

    代码是一个子过程,工作表对象w是由主过程传进来的。各个步骤的注释写的很详细,仅供和我一样的小白参考。重点在Do While Loop和里面的IF Else判断里。

    Sub Col_O_UserInstitute(w As Worksheet)
    
        w.Range("O1").ColumnWidth = 25
        
        Dim Delimiter_Sub As Integer '创建变量存储分隔符下标
        Dim ridx As Long '工作表w里的行标row index
        Dim FullStr, FullLen, Institute_Name '未截取前的字符串、未截取前的全长、机构名称,都是字符串
        
        ridx = 2 '第一行是表头,从第二行开始循环处理
        
        Do While w.Cells(ridx, 15) <> "" '只要不为空就接着循环
            
            FullStr = w.Cells(ridx, 15) '把全长的字符串读出来准备查找分隔符
            FullLen = VBA.Len(FullStr) '把全长字符串的长度读出来
            
            Rem 感谢VBA.InStrRev()函数,VBA里面的FIND找的是Range不是Str,不要和Excel函数搞混了
            
            Delimiter_Sub = VBA.InStrRev(FullStr, ">>") '找到以后输出下标
            
            Rem 很有意思的一点,VBA.InStrRev()函数返回的下标还是从左往右数的哦!
          
            Debug.Print "第" & ridx & "行数据里的分隔符出现在" & "" & Delimiter_Sub & "位"
            'VBE立即窗口内可以监视下跑的情况
            
            If Delimiter_Sub = 0 Then '如果InStrRev返回O说明从右往左找了字符串没有发现目标
            
                Institute_Name = FullStr '没找到就不需要截取,机构名就等于原字符串
                
            Else '如果InStrRev返回了大于0的数字,说明找到了分隔符,机构名一定在分隔符右边
            
                Institute_Name = VBA.Right(FullStr, FullLen - Delimiter_Sub - 1)
                '因为是从右边截取,所以截取的长度等于:“字符串全长 - 右起第一个分隔符的下标”
                '截取还要再减1,因为>>本身有长度,InStrRev返回的是“>>”里左边那个的下标
                '因此如果分隔符是由两个或以上字符串组成的话,截取长度为:
                '字符串全长 - InStrRev返回的分隔符下标 - (分隔符本身长度-1)
                
            End If
            
            Debug.Print "第" & ridx & "行数据里的学校名为:" & Institute_Name '输出到立即窗口便于调试
            
            w.Cells(ridx, 15) = Institute_Name
        
            ridx = ridx + 1
            
        Loop
    
    End Sub
    

    代码敲完,在VBE的立即窗口里欣赏下过程就好:

    在立即窗口里监视动态有利于排查原始文件里的问题

    展开全文
  • vba 根据字节数截取字符串 'str 要截取字符串 'byteLen 需要截取的字节长度 ' return byteLen长度的字符串 Public Function kiritoruStr(str As String,byteLen as Integer) As String Dim chA As String ...

    vba 根据字节数截取字符串 
     

    ' str 要截取的字符串
    ' byteLen 需要截取的字节长度
    ' return byteLen长度的字符串
    Public Function kiritoruStr(str As String,byteLen as Integer) As String
        Dim chA As String  
        Dim chANo As Long   'string のbyte number
        Dim k As Long   'byte number
        
        chANo = LenB(StrConv(str, vbFromUnicode))  ' 字符串的字节长度
        k = 0  '当前字节数
        
        For i = 1 To chANo
            ' 每次截取一个字符
            chA = Mid(str, i, 1)
            ' 计算chA字符的字节数
            m = LenB(StrConv(chA, vbFromUnicode))
            ' 累计字节数
            k = k + m
            
            If k < = byteLen Then
                kiritoruStr = kiritoruStr & chA
            Else
                Exit For
            End If
        
        Next i
               
    End Function

     

    展开全文
  • vba字符串处理

    2017-05-15 11:31:02
    返回第x位起m个字符。要求:起始位号+提取长度 left(源字串,左侧截取长度x);返回左侧x个字符 right(源字串,右侧截取长度y);返回右侧y个字符 instr(源字串,待查找子字串u);返回子字串首字符在源字串中的起始...
    mid(源字串,起始位号x,提取长度m);返回第x位起m个字符。要求:起始位号+提取长度<=源字串长度+1 
    left(源字串,左侧截取长度x);返回左侧x个字符
    right(源字串,右侧截取长度y);返回右侧y个字符
    instr(源字串,待查找子字串u);返回子字串首字符在源字串中的起始位号
    chr(65);返回字母A
    展开全文
  • 开篇点题慕司南☺ ...Excel内置vba是功能非常强大以及全面的编程语言,他或许对复杂的逻辑胜任有些难度但对于日常的我们对数据的操作及清洗都可以胜任,其不仅仅可以对Excel表格内的内容进行操作,还可以对

    确定sheet页:worksheets(“sheet1”) “sheet1”为页名称,对应写下你设置好的名称即会定位到你选择的sheet页。

    确定单元格:range("$A$1")这即表明定位到A列第一行,如果想用变量来定义则可以写成range(“A”&linenum)linenum为设置的行变量。

    Excel内置vba是功能非常强大以及全面的编程语言,他或许对复杂的逻辑胜任有些难度但对于日常的我们对数据的操作及清洗都可以胜任,其不仅仅可以对Excel表格内的内容进行操作,还可以对外部文件进行操作。

    当前需求:有80w条数据,数据的格式为:
    第a行[类型]为空,其中[ ]内的字数是不确定的,a也为任意的数字,需要把“第a行“这几个字去掉并对剩下的进行去重。

    这时我们可以用文本编辑器批量进行替换,将“第”“行”以及0-9数字都替换为空即可,但是这样很麻烦且由于数据量很大导致执行速度很慢,因此我们利用vba来进行字符串的截取,上代码!

     dim result,where,start
     fn=freefile  '设置文件号
     open worksheets("sheet1").range("$F$15").text for binary as #fn    '确定文件路径也可以直接输这里讲其放入了单元格
     result =input(lof(fn),fn)   '获取文件内容
     Close #fn
     Dim final() as string
     final()=split(result,chr(13))  '以换行符进行切割
     open "C:\desktop\result.txt" for output as #66
        for each a in final()
        start =instr(a,"[")
        where=mid(a,start,len(a))   '定位截取
        Print #66,where
        Next
        Close #66
    

    以上即为切割代码,切割好后,于ue中进行批量去重(文件——排序——高级排序)即可,有什么不懂的欢迎留言一起解决哈。

    展开全文
  • VBA 字符串的处理方法

    2012-01-11 10:49:07
    --------------本贴收集VBA 及EXCEL 字符串的处理方式 案例: 有一个excel 表 , 保存的是邮件列表. 如下: 地址: aaaa@123.com bbbb@123.com 需要截取@字符前的字符 直接右边在单元格输入如下即可. ...
  • Mid()函数是截取字符串用的,比如“ABCDEF”字符串,我们想截取前面一部分,变成“ABCD”,那我们就需要Mid()函数,摘取网路上的书面解释,Mid()的释义如下: Mid()函数返回给定输入字符串中指定数量的字符。 ...
  • [color=#FF0000][FilePath = "src\main\java\erp_connector\servlet\EmployeePayPostServlet.java"[/color] ...现在需要从最后一个“\”开始截取,只要EmployeePayPostServlet.java,该怎么写,求高手解决
  • 以下是我的代码: Sub Macro1() Dim s As String s = Left("ABC") s = Left("ABC", 1) Range("A20") = s End Sub
  • 12, excel vba 常用字符串处理函数

    万次阅读 2018-09-10 23:24:51
    2, 截取字符串的某一个部分 3, 将字符串里的某个字符进行替换 4, 把字符串按某个字符分割出来 接下来一一介始这几个函数, 0,用 len() 函数获得一个字符串长度 Public Sub 点点didi12() ...
  • aaa = Sheet1.Cells(i, 8).Value 变量赋值。bbb = Mid(aaa, InStrRev(aaa, "&...“ 这个字符后到第100位的字符ddd = UBound(Split(bbb, " ")) 计算空格出现的次数 bbb变量 空格注意是否是英文的还是中文的 ee...
  • 学习资源:《Excel VBA从入门到进阶》第35集 by兰色幻想本课的示例都...一、字符串截取1.left,right,mid,Len这几个函数在Excel中也有,具体的用途如下:left(字符串,截取长度) 返回从字符串左边算起指定截取长度的...
  • VBA字符串的相关函数

    千次阅读 2019-05-24 15:53:56
    使用 left() mid() ,right() 截取字符串 使用 replace() 把字符串中的某个字符替换成其它字符 使用 split() 把字符串按某个字符分割 instr运算符 Like运算符 使用string()进行填充 trim()、lcase()、ucase() ...
  • 大家好,我们今日讲解“VBA信息获取与处理”教程中第十四个专题“Split函数提取数据信息的深入讲解”的第二节“按任意符号间隔拆分字符串的函数”,这个专题是非常实用的知识点,希望大家能掌握利用。第二节 按任意...
  • 下面的用户自定义函数SuperMid函数能够在一段文本中提取两个字符、分隔符、单词等之间的子文本(字符串)。其中,分隔符可以相同,也可以不同。SuperMid函数的代码如下:'提取字符串中在两个子...
  • 利用vba脚本,使用Scripting.FileSystemObject对象可以实现对文本文件的操作,下面以一个朋友的实际例子为例将截获的字符串进行页面显示。 Private Sub CommandButton3_Click() Dim fso Dim txtfile Dim msrt3 As ...
  • 学习资源:《Excel VBA从入门到进阶》第35集 by兰色幻想本课的示例都...一、字符串截取1.left,right,mid,Len这几个函数在Excel中也有,具体的用途如下:left(字符串,截取长度) 返回从字符串左边算起指定截取长度的...
  • 字符串操作是编程中最基本的操作,同时因其方法众多、...'字符串截取 'left,right,mid,Len Sub z1() Dim sr sr = "Excel精英培训网" Debug.Print Left(sr, 5) Debug.Print Right(sr, 5) Debug.Prin...
  • 操作思路:1.使用 ADODB.stream 把字符串转换为UFT-8的编码集存储到文件 AA2....字符串截取第二行,去空格,输出MD5值VBA代码:strBody = "VBA变量字符串转换为UFT-8后MD5加密"'MD5计算Dim stream As...
  • 今天帮表哥研究了一下,成功实现了这一功能,好开心啊~~ Sub bianLi() Dim str2, s For lie = 2 To 1663 a = Cells(lie, 2) s = a  For i = 1 To Len(s) - 1  char = (Left(Right(s, i), 1)) ... 
  • 在python中,我们定义好一个字符串,如下所示。在python中定义个字符串然后把它...没有步长的简单切片语法格式是这样的:首先定义一格字符串,比如叫s,然后给它赋值截取字符串中的一部分,我们用的语法是 s[ start...
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第73讲内容:利用字典,统计出给定字符串中每个字符出现的次数.在VBA的利用中,字典可以利用在方方面面...思路,我们要分别截取字符串的每个字符,放到字典...
  • VBA的一些问题

    2021-02-01 15:52:26
    比如说,字符串处理,函数是left、right,不支持字符串截取、定位功能。 然后是:现在用VB的少,社区基本上没有人。 然后,由于之前VBA宏可以传播病毒,所以默认是禁用宏的……如果你给电脑小白装了一个宏,会给你一...
  • VBA常用函数

    2014-01-08 10:28:00
    截取字符串: 从字符串左侧开始:Left(string,length) 从字符串右侧开始:Right(string,length) 从字符串中间开始:mid(string,start,[length]) length:可选参数 ②大小写变换: 小写变大写:Ucase(string) ...
  • 包含8个自定义函数: 1.提取中文,支持多个中英文交替2.赋值3.Copy首行,给其他行赋值4.获得链接5.截字符串中首尾两个-之间的部分6.提取中文前面的英文7.截取字符串中最后一次出现要str之后的字符串
  • 153、 字符串截取 Left、Right、Mid函数 Sub z1() Dim sr sr = “Excel精英培训网” Debug.Print Left(sr, 5) Debug.Print Right(sr, 5) Debug.Print Mid(sr, 3, 5) Debug.Print Left(sr, Len(sr) - 1) End Sub ...
  • VBA第7课 编写自定义函数

    千次阅读 2015-10-04 19:29:48
    '1.取工作表总个数 在工作表里输入 "=shcount()" 即可,以下同理 Function shcount() shcount = Sheets.Count End Function '2....Function getv(rg As Range) getv = rg.Text ...截取字符串的函数 page为源
  • EXCEL 备忘录

    2021-03-08 08:53:50
    1. 字符串截取(函数mid , left, right)、转日期型text、datevalue、日期加减、格式化显示 例 单元格A1的值为20210307~20210313 , 单元格B1为A1往后移一周(7天),用公式怎么得出B1。 1)先截取前面8位字符: MID...
  • 经典SQL脚本大全

    2013-12-24 15:28:19
    │ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续的5个字符相同.sql │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

vba字符串截取