我在Excel单元格中有一个字符串。
每行代表一个句子。此字符串表示句子中单词的正面和负面分数。
句子可以是任何长度,例如
joy:pos = 0.37 neg = 0.0,老实说:pos = 0.4 neg = 0.0,pick:pos = 0.0 neg = 0.0
你好:pos = 0.0 neg = 0.0,ok:pos = 0.0 neg = 0.0
我想计算细胞中的阳性和阴性总数。
不使用Excel中的文本到列功能拆分字符串,我不知道用公式执行此操作的可能方法。
在这种情况下输出的一个例子是:
pos = 0.77 neg = 0.0
pos = 0.0 neg = 0.0
有什么想法吗?
答案 0 :(得分:2)
可能有更好的方法,但我相信这对你有用:
Function pos(rTest As Range) As String
Dim a() As String
Dim i As Integer
Dim iVal As Double
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
a = Split(rTest, ",")
Dim iStart As Integer
Dim iEnd As Integer
For i = LBound(a) To UBound(a)
iStart = wf.Find("=", a(i)) + 1
iEnd = InStr(wf.Find("=", a(i)) + 1, a(i), " ")
iVal = iVal + CDbl(Mid(a(i), iStart, iEnd - iStart))
Next
pos = "pos=" & CStr(iVal)
End Function
Function neg(rTest As Range) As String
Dim a() As String
Dim i As Integer
Dim iVal As Double
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
a = Split(rTest, ",")
Dim iStart As Integer
Dim iEnd As Integer
For i = LBound(a) To UBound(a)
iStart = InStrRev(a(i), "=") + 1
iEnd = Len(a(i)) + 1
iVal = iVal + CDbl(Mid(a(i), iStart, iEnd - iStart))
Next
neg = "neg=" & CStr(iVal)
End Function
我仍然认为自己是VBA的新手。我确定它可以优化或收紧一点。将这两个函数放在VBA模块中。然后将=pos
或=neg
相应地作为常规公式放入单元格中,并将范围放入。
答案 1 :(得分:1)
您可以使用RegExp进行快速解析,即
Sub Test()
Debug.Print StrOut("joy: pos=0.37 neg=0.0, honest: pos=0.4 neg=0.0, pick: pos=0.0 neg=0.0")
End Sub
功能
Function StrOut(strIn As String) As Variant
Dim objRegex As Object
Dim objRegexMC As Object
Dim objRegexM As Object
Dim arr(1) As Variant
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "(pos|neg)=([0-9]*\.[0-9]+|[0-9]+)"
.Global = True
If .Test(strIn) Then
Set objRegexMC = .Execute(strIn)
For Each objRegexM In objRegexMC
If objRegexM.submatches(0) = "pos" Then
arr(0) = arr(0) + CDbl(objRegexM.submatches(1))
Else
arr(1) = arr(1) + CDbl(objRegexM.submatches(1))
End If
Next
StrOut = arr(0) & " " & arr(1)
Else
StrOut = "no match"
End If
End With
End Function