Excel文本索引自定义函数

2025-11-04 23:47:15

1、功能:能从左到右或从右到左通过索引号文本每个字串,合并单元格区域文本,通过索引号范围截取一段文本。

2、语法:

TEXTSY(text,num_chars)

Text   是包含要提取的字符的文本字符串(字串、或一个单元格地址或单元格区域的文本)。

Num_chars   指定要由 TEXTSY 提取的字符的数量或特定数量范围(中间用“:”分隔)。

Num_chars 必须不等0的正负数,并且不大于Text总字符串数。Num_chars带有小数时,向最小最整数,如5.5取5,-5.5取-6。正数为从左至右第Num_char个字符值。负数为从右至左第Num_char绝对值个字符值。

Num_chars范围值表示为N1:N2,N1和N2必须满足上面单个条件处理并且有以下规定:

“N1:N2“  N1和N2全为正数,N2>=N1,例“5:10” TEXTSY返回从左到右第5至10个文本字符串,如果“10:5”,则 TEXTSY返回"#VALUE!";N1和N2全为负数,N1>=N2,例“-5:-10” TEXTSY返回从右到左第10至5个文本字符串,如果“-10:-5”,则 TEXTSY返回"#VALUE!";N1为正数和N2为负数,例“5:-10” TEXTSY返回从左到右第5个与从右到左第10个文本字符这间的文本字符串。

“N1:”N1为正数,例“5:” TEXTSY返回从左到右第5个至最后个文本字符串;N1为负数,例“-5:” TEXTSY返回从右到左第5个至最后个文本字符串。相当RIGHT。

“:N2“N1为正数,例“5:” TEXTSY返回从左至右第1个至第5个文本字符串;N1为负数,例“-5:” TEXTSY返回从第一个字串至从右到左第5个之间文本字符串。相当LEFT。

“:” TEXTSY返回全部文本 。比CONCATENATE好用。

如果 num_chars 大于文本长度或0或文本字串,则 TEXTSY返回"#VALUE!"。

1、首先打开Microsoft Office Excel 2007,新建文档并保存文件名《Excel文本索引自定义函数 .xlsm》(演示文件,下面代码复制到能运行宏的工作簿都可以)如图。

Excel文本索引自定义函数

2、然后按下快捷键ALT+F11打开VBA(宏)编辑界面,然后点菜单栏【插入】下拉中列表中点【模块(M)】如图。

Excel文本索引自定义函数

3、然后插入了一个模块1,在代码框中复制如下代码:

Function TEXTSY(mm, n) As String

    '2020-7-14 22:15:20

    Dim mr As Range, m As String

    Dim mb, mc

    On Error Resume Next

    Set mc = Range(mm)

    For Each mr In mm

        If mr.Text <> "" Then

            m = m & mr.Text

        End If

    Next mr

    If Err.Number <> 0 Then

        m = mm

    End If

    Err.Clear

    If IsNumeric(n) Then

        If Abs(Int(n)) > Len(m) Then

            TEXTSY = "#VALUE!"

        Else

            If Int(n) > 0 Then

                TEXTSY = Mid(m, Int(n), 1)

            ElseIf Int(n) = 0 Then

                TEXTSY = "#VALUE!"

            Else

                TEXTSY = Mid(Right(m, Abs(Int(n))), 1, 1)

            End If

        End If

    Else

        If CStr(n) = ":" Then

            TEXTSY = m

        ElseIf Left(CStr(n), 1) = ":" Then

            mb = Split(CStr(n), ":")

            If IsNumeric(mb(1)) Then

                If Abs(Int(mb(1))) > Len(m) Then

                    TEXTSY = "#VALUE!"

                Else

                    If Int(mb(1)) > 0 Then

                        TEXTSY = Mid(m, 1, Int(mb(1)))

                    ElseIf Int(mb(1)) = 0 Then

                        TEXTSY = "#VALUE!"

                    Else

                        TEXTSY = Mid(m, 1, Len(m) + Int(mb(1)) + 1)

                    End If

                End If

            Else

                TEXTSY = "#VALUE!"

            End If

        ElseIf Right(CStr(n), 1) = ":" Then

            mb = Split(CStr(n), ":")

            If IsNumeric(mb(0)) Then

                If Abs(Int(mb(0))) > Len(m) Then

                    TEXTSY = "#VALUE!"

                Else

                    If Int(mb(0)) > 0 Then

                        TEXTSY = Right(m, Len(m) - Int(mb(0)) + 1)

                    ElseIf Int(mb(0)) = 0 Then

                        TEXTSY = "#VALUE!"

                    Else

                        TEXTSY = Right(m, Int(Abs(mb(0))))

                    End If

                End If

            Else

                TEXTSY = "#VALUE!"

            End If

        Else

            mb = Split(CStr(n), ":")

            If IsNumeric(mb(0)) And IsNumeric(mb(1)) Then

                If Int(mb(0)) <= Int(mb(1)) And Int(mb(0)) > 0 And Int(mb(1)) <= Len(m) Then

                    TEXTSY = Mid(m, Int(mb(0)), Int(mb(1)) - Int(mb(0)) + 1)

                ElseIf Int(mb(1)) < 0 And Int(mb(0)) > 0 And Abs(Int(mb(1))) <= Len(m) And Int(mb(0)) <= Len(m) Then

                    If Len(m) + Int(mb(1)) + 1 >= Int(mb(0)) Then

                        TEXTSY = Mid(m, Int(mb(0)), Len(m) + Int(mb(1)) - Int(mb(0)) + 2)

                    Else

                        TEXTSY = Mid(m, Len(m) + Int(mb(1)) + 1, Int(mb(0)) - (Len(m) + Int(mb(1)) + 1) + 1)

                    End If

                ElseIf Int(mb(0)) >= Int(mb(1)) And Int(mb(0)) < 0 And Abs(Int(mb(1))) <= Len(m) Then

                    TEXTSY = Mid(m, Len(m) + Int(mb(1)) + 1, Abs(Int(mb(1))) - Abs(Int(mb(0))) + 1)

                Else

                    TEXTSY = "#VALUE!"

                End If

            Else

                TEXTSY = "#VALUE!"

            End If

            If Err.Number <> 0 Then

                TEXTSY = "#VALUE!"

            End If

            Err.Clear

        End If

    End If

End Function

Excel文本索引自定义函数

Excel文本索引自定义函数

Excel文本索引自定义函数

4、以上操作动态过程如下:

Excel文本索引自定义函数

1、通过实例填写公式如下:

=TEXTSY(A2,B2)

=TEXTSY(A3,B3)

=TEXTSY(A4,B4)

=TEXTSY(A5,B5)

=TEXTSY(A6,B6)

=TEXTSY(A7,B7)

=TEXTSY(A8,B8)

=TEXTSY(A9,B9)

=TEXTSY(A10,B10)

=TEXTSY(A11,B11)

=TEXTSY(A12,B12)

=TEXTSY(B2:B12,":")

=TEXTSY("123456789abcd",5)

=TEXTSY("123456789abcd",-5)

=TEXTSY("123456789abcd",14)

=TEXTSY("123456789abcd",-14)

=TEXTSY("123456789abcd","5:10")

=TEXTSY("123456789abcd","10:5")

=TEXTSY("123456789abcd","-5:-10")

=TEXTSY("123456789abcd","-10:5")

=TEXTSY("123456789abcd",":")

=TEXTSY("123456790abcd","")

=TEXTSY("123456791abcd","agd")

Excel文本索引自定义函数

Excel文本索引自定义函数

Excel文本索引自定义函数

2、如果觉得这篇经验帮到了您,请点击下方的 “投票点赞" 或者“收藏”支持我!还有疑问的话可以点击下方的 “我有疑问”,谢谢啦!

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢