コードの下の方にあるIF文を使って、Replaceを使って置換しているのですが、置換した後にその置換した内容を保持したまま次の置換ができる方法はないでしょうか?
演算子を置換することにより、電卓のような何でも計算ができるプログラムにしたいと考えています。
足りない部分があったら、修正依頼お願いします。
B = Inputbox("式を入力してください。"&vbCr&_
vbCr&_
"※『=』は必要ありません。"&vbCr&_
"掛け算は『*』、割り算は『/』を使用してください。","数式の入力")
'Bに入力情報を入れ、For文とMidで一文字ずつ配列に入れる。
Y = Len(B)
i = 0
For i = 0 To Y - 1
A(i) = Mid(B,i+1,1)
'iが演算子の時に、-1することにより0~i-1の部分までを変数に入れる。
If InStr(A(i),"+") Or InStr(A(i),"-") Or InStr(A(i),"*") Or InStr(A(i),"/") Then
For j = 0 To i - 1
x = CStr(x) + CStr(A(j))
Next
Exit For
End If
Next
'iが演算子時に、+1することにより0~i+1を変数に入れる
If InStr(A(i),"+") Or InStr(A(i),"-") Or InStr(A(i),"*") Or InStr(A(i),"/") Then
For j2 = 0 To i + 1
x2 = CStr(x2) + CStr(A(j2))
Next
End If
’入力情報から出した変数で手に入れた部分を空白にし、空白を削除。
UKE = Replace(B,x2,"")
OK = Trim(UKE)
MsgBox "x="&x
MsgBox "x2="&x2
MsgBox "UKE="&UKE
MsgBox "OK="&OK
Y2 = Len(OK)
i2 = 0
For i2 = 0 To Y2 - 1
A2(i2) = Mid(OK,i2+1,1)
If InStr(A2(i2),"+") Or InStr(A2(i2),"-") Or InStr(A2(i2),"*") Or InStr(A2(i2),"/") Then
For j3 = 0 To i2 - 1
x3 = CStr(x3) + CStr(A2(j3))
Next
Exit For
End If
Next
'★まで繰り返し。
For i3 = 0 To Y2 - 1
A3(i3) = Mid(OK,i3+1,1)
If InStr(A3(i3),"+") Or InStr(A3(i3),"-") Or InStr(A3(i3),"*") Or InStr(A3(i3),"/") Then
For j4 = 0 To i3 + 1
x4 = CStr(x4) + CStr(A3(j4))
Next
Exit For
End If
Next
UKE2 = Replace(OK,x4,"")
OK2 = Trim(UKE2)
'MsgBox "x3="&x3
'MsgBox "x4="&x4
'MsgBox "UKE2="&UKE2
'MsgBox "OK2="&OK2
Y3 = Len(OK2)
i4 = 0
For i4 = 0 To Y3 - 1
A4(i4) = Mid(OK2,i4+1,1)
If InStr(A4(i4),"+") Or InStr(A4(i4),"-") Or InStr(A4(i4),"*") Or InStr(A4(i4),"/") Then
For j5 = 0 To i4 - 1
x5 = CStr(x5) + CStr(A4(j5))
Next
Exit For
End If
Next
For i5 = 0 To Y3 - 1
A5(i5) = Mid(OK2,i5+1,1)
If InStr(A5(i5),"+") Or InStr(A5(i5),"-") Or InStr(A5(i5),"*") Or InStr(A5(i5),"/") Then
For j6 = 0 To i5 + 1
x6 = CStr(x6) + CStr(A5(j6))
Next
Exit For
End If
Next
UKE3 = Replace(OK2,x6,"")
OK3 = Trim(UKE3)
'MsgBox "x5="&x5
'MsgBox "x6="&x6
'MsgBox "UKE3="&UKE3
'MsgBox "OK3="&OK3
Y4 =Len(OK3)
i6 = 0
For i6 = 0 To Y4 - 1
A6(i6) = Mid(OK3,i6+1,1)
If InStr(A6(i6),"+") Or InStr(A6(i6),"-") Or InStr(A6(i6),"*") Or InStr(A6(i6),"/") Then
For j7 = 0 To i6 - 1
x7 = CStr(x7) + CStr(A6(j7))
Next
Exit For
End If
Next
For i7 = 0 To Y4 - 1
A7(i7) = Mid(OK3,i7+1,1)
If InStr(A7(i7),"+") Or InStr(A7(i7),"-") Or InStr(A7(i7),"*") Or InStr(A7(i7),"/") Then
For j8 = 0 To i7 + 1
x8 = CStr(x8) + CStr(A7(j8))
Next
Exit For
End If
Next
UKE4 = Replace(OK3,x8,"")
OK4 = Trim(UKE4)
'MsgBox "x7="&x7
'MsgBox "x8="&x8
'MsgBox "UKE4="&UKE4
'MsgBox "OK4="&OK4
'★これで、数値だけの変数と数値と演算子が入った変数ができる。
'A8 = CDbl(x)+CDbl(x3)+CDbl(x5)+CDbl(x7)+CDbl(OK4)
'Y5 = Len(CDbl(x)+CDbl(x3)+CDbl(x5)+CDbl(x7)+CDbl(OK4))
'ここから主題。
'例えばA="+"、B=1,C=1として、
'D=BACでD=2にはならない。
'なので、Replaceで一つ一つ置換していこうと思う。
'しかし、置換した内容は保存されず、元に戻ってしまう。
'尚、Eval関数は使用不可とする。
If InStr(x2,"+") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","#","+")
If InStr(x2,"-") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","#","-")
If InStr(x2,"*") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","#","*")
If InStr(x2,"/") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","#","/")
End If
End If
End If
End If
If InStr(x4,"+") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","$","+")
If InStr(x4,"-") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","$","-")
If InStr(x4,"*") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","$","*")
If InStr(x4,"/") Then
A8 = Replace("CDbl(x)#CDbl(x3)$CDbl(x5)&CDbl(x7)%CDbl(OK4)","$","/")
End If
End If
End If
End If
'MsgBox "Y5="&Y5
MsgBox "A8="&A8

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。