如何在Excel中从文本串中调用正确的数字?

问题描述 投票:1回答:1

考虑以下文本字符串。

(*4,14)(7,15)(10,13)(9,12)-(1,8)(2,6)-5,3-11

我的目标是计算这个字符串中每个单独的数字前有多少个左括号("("))、括号外的逗号和连字符(例如,数字10前有3个左括号,11前有6个左括号和3个连字符)。

我现在的解决方案是先把每个独立数字前面剩余的文本串召回来,简单来说就是 =LEFT(A1,(FIND("1",A1,1)-1))但是,Excel会调用出现在第一个 "1 "之前的字符串(即。(*4,),而不是从字符串中的实际数字 "1 "开始调用剩余的字符串(即。(*4,14)(7,15)(10,13)(9,12)-().

附注,有什么办法可以计算出括号外的逗号数量吗?

如果能得到帮助,将非常感激

excel string excel-formula ms-office countif
1个回答
2
投票

如果你有一个版本的Excel与 FILTERXML 函数(Windows Excel 2013+),您可以使用。

=SUM(LEN(FILTERXML("<t>" & SUBSTITUTE(SUBSTITUTE(A1,"(","<s>"),")","</s>") & "</t>","//t")))- LEN(SUBSTITUTE(FILTERXML("<t>" & SUBSTITUTE(SUBSTITUTE(A1,"(","<s>"),")","</s>") & "</t>","//t"),",",""))

该公式创建一个xml,其中 s 节点是括号内的内容,而括号内的 t 节点就是其他一切。

如果你没有 FILTERXML 函数,最好采用VBA方案。 这取决于你的Excel版本,以及它是Windows还是MAC。


1
投票

计数字符

enter image description here

Option Explicit

Function countChars(SourceString As String, SourceNumber As Variant, _
  CountChar As String, Optional countRight As Boolean = False) As Long

    Dim NumberDouble As Double
    Dim NumberString As String
    Dim NumberLength As Long
    Dim StringLength As Long
    Dim CurrentStart As Long
    Dim CurrentFound As Long
    Dim i As Long
    Dim isFound As Boolean

    StringLength = Len(SourceString)

    If VarType(SourceNumber) = 8 Then
        If Not IsNumeric(SourceNumber) Then _
          Exit Function   ' SourceNumber is not numeric.
    End If
    NumberDouble = Val(SourceNumber)
    If NumberDouble <> Int(NumberDouble) Then _
      Exit Function       ' SourceNumber is not an integer.
    NumberString = CStr(NumberDouble)
    NumberLength = Len(NumberString)

    CurrentStart = 1
    Do
        CurrentFound = InStr(CurrentStart, SourceString, NumberString)
        GoSub checkNumber
        If isFound Then
            GoSub countTheChars
            Exit Do
        End If
        CurrentStart = CurrentFound + 1
    Loop Until CurrentFound = 0

Exit Function

countTheChars:  ' Can be written better.
    If Not countRight Then
        For i = 1 To CurrentFound - 1
            If Mid(SourceString, i, 1) = CountChar Then
                countChars = countChars + 1
            End If
        Next i
    Else
        For i = CurrentFound + 1 To StringLength
            If Mid(SourceString, i, 1) = CountChar Then
                countChars = countChars + 1
            End If
        Next i
    End If

checkNumber:  ' Check for adjacent numbers.
   Select Case CurrentFound
       Case 0: Exit Function  ' NumberString (initially) not found.
       Case 1                 ' NumberString found at the beginning.
           isFound = Not _
             IsNumeric(Mid(SourceString, CurrentFound + NumberLength, 1))
       Case StringLength - NumberLength + 1   ' NumberString found at the end.
           isFound = Not _
             IsNumeric(Mid(SourceString, CurrentFound - 1, 1))
       Case Else               ' NumberString found in the middle.
           isFound = Not _
             IsNumeric(Mid(SourceString, CurrentFound + NumberLength, 1)) _
             And Not IsNumeric(Mid(SourceString, CurrentFound - 1, 1))
   End Select
Return

End Function
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.