アプリ版:「スタンプのみでお礼する」機能のリリースについて

QNo.4257168 にて質問したものです。

図の中で表現されている5次の式の係数(6個あります)を
セルの中に書き出すマクロに関して

下記のコードを教えて頂いたのですが、係数は数字のみ出力され、-の符号は出力されません。どのようにしたら符号付きの係数の出力が可能になるでしょうか。(大変簡潔なコードで感心しています)

Sub test()
  Dim str As String
  Dim strv As Variant
  Dim i As Integer

  str = "y = 0.0452x5 - 8.6275x4 + 658.58x3 - 25133x2 + 4795.20x - 4E+0.6"
  strv = Split(str, " ")
  For i = 0 To UBound(strv)
    If strv(i) Like "*E+*" Then
      MsgBox strv(i)
    Else
      If Val(strv(i)) > 0 Then
        MsgBox Val(strv(i))
      End If
    End If
  Next i

A 回答 (3件)

下記のようなことでしょうか。


詳しくは検討していません検討の余地があると思います。

Sub test2()
  Dim str As String
  Dim strv As Variant
  Dim i As Integer

  str = "y = 0.0452x5 - 8.6275x4 + 658.58x3 - 25133x2 + 4795.20x - 4E+0.6"
  strv = Split(str, " ")
  For i = 0 To UBound(strv)
    If strv(i) Like "*E+*" Then
      If strv(i - 1) = "-" Then
        MsgBox strv(i - 1) & strv(i)
      Else
        MsgBox strv(i)
      End If
    Else
      If Val(strv(i)) > 0 Then
        If strv(i - 1) = "-" Then
          MsgBox strv(i - 1) & Val(strv(i))
        Else
          MsgBox Val(strv(i))
        End If
      End If
    End If
  Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
間違いなくOKでした。
kTrendCoe関数は使いたくなかったので助かりました。

お礼日時:2008/08/30 18:30

>Abs関数の追加の意味は何でしょうか?


If Val(strv(i)) > 0 Then
Val(strv(i))がマイナス値の場合、0より大きくないので飛ばされてしまいます。
Abs関数で絶対数値を取り出しています。

>出力数値ににもともと負記号(-)がつかないので直したいのですが。
>冗長なコードを組めば可能ですが、簡潔なコード化は無理でしょうか。
意味が分かりません、今回の質問とどう関係しているのでしょうか?

この回答への補足

Val(strv(i))がマイナス値の場合
出力値 にマイナス(-)符号をつけたいのです。
近似式は係数の両端に””があるために負数も絶対値が戻ってしまいます。
y = 0.0735x5 -14.126x4 +1085.7x3 -41721x2 + 801538x -6E+06ならOKですが

下記が散布図に記されている式です。
y = 0.0452x5 - 8.6275x4 + 658.58x3 - 25133x2 + 4795.20x - 4E+0.6

補足日時:2008/08/30 17:38
    • good
    • 0

If文にAbs関数を追加してみます。



Sub test2()
  Dim str As String
  Dim strv As Variant
  Dim i As Integer

  str = "y = -0.0452x5 - -8.6275x4 + 658.58x3 - 25133x2 + 4795.20x - 4E+0.6"
  strv = Split(str, " ")
  For i = 0 To UBound(strv)
    If strv(i) Like "*E+*" Then
      MsgBox strv(i)
    Else
      If Abs(Val(strv(i))) > 0 Then
        MsgBox Val(strv(i))
      End If
    End If
  Next i
End Sub

この回答への補足

ご返信ありがとうございました。Abs関数の追加の意味は何でしょうか?
出力数値ににもともと負記号(-)がつかないので直したいのですが。冗長なコードを組めば可能ですが、簡潔なコード化は無理でしょうか。

補足日時:2008/08/30 16:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!