見た目よりも複雑です。私が間違っていなければ、kx+mには最大7つの演算子と最小の1つの演算子を含めることができます。そして、そのようなシナリオでは、「K」と「M」の値を取得することは非常に複雑になります。– SiddharthRout33分前
duffymoの投稿での私のコメントに基づいて
このスナップショットは、「kx+m」が持つことができるさまざまな組み合わせを示しています
そして先に示唆したように、あなたが望むものを達成することは非常に複雑です。これが、現時点で「 K 」だけを抽出するための私の微妙な試みです。このコードは決して上品ではありません:(また、他のシナリオで失敗する可能性があるため、さまざまなシナリオでコードをテストしていません。ただし、この問題に取り組む方法については公正なアイデアが得られます。さらに調整する必要があります。あなたが望む正確な結果を得る。
CODE(私はこのコードで7つの可能な組み合わせをテストしています。これらの7つの組み合わせで機能しますが、他の組み合わせでは失敗する可能性があります)
Option Explicit
Sub Sample()
Dim StrCheck As String
Dim posStar As Long, posBrk As Long, pos As Long, i As Long
Dim strK As String, strM As String
Dim MyArray(6) As String
MyArray(0) = "-k*(-x)+(-m)*(-2)"
MyArray(1) = "-k*x+(-m)*(-2)"
MyArray(2) = "-k(x)+(-m)*(-2)"
MyArray(3) = "-k(x)+(-m)(-2)"
MyArray(4) = "-kx+m"
MyArray(5) = "kx+m"
MyArray(6) = "k(x)+m"
For i = 0 To 6
StrCheck = MyArray(i)
Select Case Left(Trim(StrCheck), 1)
Case "+", "-"
posBrk = InStr(2, StrCheck, "(")
posStar = InStr(2, StrCheck, "*")
If posBrk > posStar Then '<~~ "-k*(-x)+(-m)*(-2)"
pos = InStr(2, StrCheck, "*")
If pos <> 0 Then
strK = Mid(StrCheck, 1, pos - 1)
Else
strK = Mid(StrCheck, 1, posBrk - 1)
End If
ElseIf posBrk < posStar Then '<~~ "-k(-x)+(-m)*(-2)"
pos = InStr(2, StrCheck, "(")
strK = Mid(StrCheck, 1, pos - 1)
Else '<~~ "-kx+m"
'~~> In such a case I am assuming that you will never use
'~~> a >=2 letter variable
strK = Mid(StrCheck, 1, 2)
End If
Case Else
posBrk = InStr(1, StrCheck, "(")
posStar = InStr(1, StrCheck, "*")
If posBrk > posStar Then '<~~ "k*(-x)+(-m)*(-2)"
pos = InStr(1, StrCheck, "*")
If pos <> 0 Then
strK = Mid(StrCheck, 1, pos - 2)
Else
strK = Mid(StrCheck, 1, posBrk - 1)
End If
ElseIf posBrk < posStar Then '<~~ "k(-x)+(-m)*(-2)"
pos = InStr(1, StrCheck, "(")
strK = Mid(StrCheck, 1, pos - 2)
Else '<~~ "kx+m"
'~~> In such a case I am assuming that you will never use
'~~> a >=2 letter variable
strK = Mid(StrCheck, 1, 1)
End If
End Select
Debug.Print "Found " & strK & " in " & MyArray(i)
Next i
End Sub
スナップショット
それほど多くはありませんが、これがあなたを正しい道に導いてくれることを願っています...