符号付きの係数の出力(散布図近似式)

このQ&Aのポイント
  • 質問者は、散布図近似式の5次の式の係数をセルに出力するマクロの作成方法を知りたいとしています。
  • 現在のコードでは、係数の数字のみが出力され、符号は出力されません。
  • 質問者は、符号付きの係数を出力する方法についてアドバイスを求めています。
回答を見る
  • ベストアンサー

符号付きの係数の出力(散布図近似式)

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

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.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

catshoes01
質問者

お礼

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

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>Abs関数の追加の意味は何でしょうか? If Val(strv(i)) > 0 Then Val(strv(i))がマイナス値の場合、0より大きくないので飛ばされてしまいます。 Abs関数で絶対数値を取り出しています。 >出力数値ににもともと負記号(-)がつかないので直したいのですが。 >冗長なコードを組めば可能ですが、簡潔なコード化は無理でしょうか。 意味が分かりません、今回の質問とどう関係しているのでしょうか?

catshoes01
質問者

補足

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

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

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

catshoes01
質問者

補足

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

関連するQ&A

  • REALbasicについて質問です。

    今日プログラミングをはじめた超初心者です。 全然わからないので教えていただきたいのですが Sub Action () dim x as string dim y as integer x = editField1.text y = val(x) if y = 0 then msgbox "ゼロだよん。" else msgbox "ゼロじゃないよん。" end if End Sub というプログラムを実行してみたのですがeditField1のところがおかしいらしく動いてくれません。どのようにしたらよろしいでしょうか?

  • 2010 excel マクロ 記号の変化

    エラー発生で強制終了になってしまいます。2007年のexcelで作成したものですが、2010だと強制終了になってしまいます。 内容は□をダブルクリックすると■になるように作っています。 記述は2003年からのマクロ記述なので、変化が必要なのでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'セルをダブルクリックすると、・→○→△→×→・と変更する。 Dim S1 As String Dim S2 As String Dim S01 As String Dim S02 As String Dim S03 As String Dim S04 As String S1 = "□" S2 = "■" S01 = "・" S02 = "○" S03 = "△" S04 = "×" On Error GoTo ERR_12 sCheckXY S1, S2 sCheckX1234 S01, S02, S03, S04 sChangeXY S1, S2 Exit Sub ERR_12: End End Sub Sub sChangeXY(X As String, Y As String) '選択セルに□があれば■に変える Dim Str0 As String 'str1の左端 Dim Str1 As String 'strの右側更新 Dim Str2 As String 'strの左側更新 Dim Str20 As String 'strの左側一部保存 Dim L As Long Dim M As Long Dim N As Long Str1 = ActiveCell.Text L = Len(Str1) Debug.Print L If L = 0 Then End End If For N = 1 To L Debug.Print Str2 Str0 = Left(Str1, 1) If Str0 = X Or N = L Then If Str20 <> "" Then If N = L Then Str20 = Str20 + Str0 End If If MsgBox(Str20 & "  はチェックしますか?", vbYesNo, "選択肢") = vbYes Then Str2 = Str2 + Replace(Str20, X, Y) Str20 = Str0 Else Str2 = Str2 + Replace(Str20, Y, X) Str20 = Str0 End If Else Str20 = Str0 End If Else Str20 = Str20 + Str0 End If Str1 = Right(Str1, L - N) Next N ActiveCell.Value = Str2 End Sub Sub sCheckXY(X As String, Y As String) '選択セルがXならY,YならXにチェックをかえる If ActiveCell.Text = X Then ActiveCell.Value = Y End ElseIf ActiveCell.Text = Y Then ActiveCell.Value = X End End If End Sub Sub sCheckX1234(X1 As String, X2 As String, X3 As String, X4 As String) '選択セルがXならY,YならXにチェックをかえる If ActiveCell.Text = X1 Then ActiveCell.Value = X2 End ElseIf ActiveCell.Text = X2 Then ActiveCell.Value = X3 End ElseIf ActiveCell.Text = X3 Then ActiveCell.Value = X4 End ElseIf ActiveCell.Text = X4 Then ActiveCell.Value = X1 End End If End Sub

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • 「1から5の間なら」とするには?

    「1から5の間なら」とするには? エクセルvbaです。 Sub test1() Dim i As Integer i = 1 If i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Then MsgBox "1-5までのどれかです" End If End Sub は、最大でも5なので手入力でできますが、 これが1から100までならor演算子で繋ぐのは大変なので Sub test2() Dim i As Integer i = 1 If i = [1-5] Then MsgBox "1-5までのどれかです" End If End Sub みたいなことをやりたいのですが、うまくいきません。 デバッグしてもエラーにもなりません。 自分でコードを書いといて聞くのもおかしいですがtest2の意味と、表題の方法を教えてください。 よろしくお願いします。

  • iと言う変数の値が1から10の間にないならば

    「iと言う変数の値が1から10の間にないならば」、としたいのですが どのようなコードを書けばいいのでしょうか? Sub test1() Dim i As Integer i = 11 If 1 < i < 10 Then MsgBox i & "は1から10の間にはありません" End If End Sub だと、メッセージが表示されてしまいます。

  • 奇数・偶数の判断 VBA

    Sub Macro1() Dim i As Long i = 1 For i = 1 To 10 If i = ? Then '偶数ならと言うコード MsgBox "偶数です" Else MsgBox "奇数です" End If Next End Sub ここまでは自分で作れたのですが、iが奇数か偶数かを判断するコードがわかりません。 ご教授よろしくお願いします。

  • [と”の意味を教えてください。

    http://okwave.jp/qa/q5945112.html を参考に、 Sub test1() Dim i As Integer i = 2 If i Like "[1-3]" Then MsgBox i & "です" End If End Sub Sub test2() Dim i As Integer i = 2 If i Like "[1-5]" Then MsgBox i & "です" End If End Sub Sub test3() Dim i As Integer i = 2 If i Like "[1-10]" Then MsgBox i & "です" End If End Sub を作ったのですが、 test3はうまく行きません。 意味としては、 iが "[1-10]"の中の数字の間のどれかであれば、 MsgBox i & "です" を表示させたいです。 でも上記のマクロを実行させた結果、 "[1-10]"の中で計算が行われてるのではないかと思います。 だから、test3は、1-10=-9 という事になり、msgboxが反応しないのではないかと思っています。 でもそうすると、test2だって "[1-5]"は、-4になって、i=2とは違う値なのに なぜMsgBoxが反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。

  • マクロでグラフの範囲を変えるとエラーが出ます

    およそ12000~15000ほどある2列のデータを散布図で描画し、y値の大きい物だけデータラベルを表示させるマクロを作りました。 最初は全データを表示するようにしていて、その時は上手く動いていたのですが一部のみを表示するように書き直したところ、HasDataLabelの所で「1004:パラメータが無効です」のエラーが出るようになりました。 色々値を変えて調べてみたところRangeで指定する範囲の値によってエラーが出たりでなかったりしていました。およそ3800行辺りを指定するとエラーになるようです。 どう対処すれば良いかまるで分からないので対処法について至急ご教示願います。 以下ソースです。よろしくお願いします。 Option Explicit Sub makechart() '変数定義 Dim cmax As Long, i As Long, st As Long, en As Long, cst As Long, cen As Long Dim x As Double, y As Double Dim ws1 As Worksheet Dim alldata As Range, spectrum As Range Dim ChartObj As Object Set ws1 = Worksheets("022") cmax = ws1.Range("A1048576").End(xlUp).Row '範囲指定 st = 450 en = 500 'セルの初期位置 i = 8 x = Val(Cells(i, 1).Value) Do While x < st And i <= cmax i = i + 1 If (i > cmax) Then MsgBox ("下限値オーバー") End End If x = Val(Cells(i, 1).Value) Loop cst = i Do While x < en And i <= cmax i = i + 1 If (i > cmax) Then MsgBox ("上限値オーバー") End End If x = Val(Cells(i, 1).Value) Loop cen = i Set alldata = Range("A8:B" & cmax) Set spectrum = Range("A" & cst & ":B" & cen) ←この値によってエラーが出たり出なかったりする With ActiveSheet.Shapes.AddChart.Chart '散布図追加 .ChartType = xlXYScatter .SetSourceData spectrum For i = cst To cmax x = Val(Cells(i, 1).Value) y = Val(Cells(i, 2).Value) If (y > 1000000) Then .SeriesCollection(1).Points(i).HasDataLabel = True ←ここでエラー .SeriesCollection(1).Points(i).DataLabel.Text = Str(x) .SeriesCollection(1).Points(i).DataLabel.Position = xlLabelPositionAbove End If Next i End With End Sub

  • msgboxの表示

    A列の値とC列の値をMsgboxに表示するにはどうしたらいいのでしょうか?C列で一番高い商品とその品名A列を表示させたいのですが・・ Sub hinmei() Dim i As Long For i = 2 To Range("C65535").End(xlUp).Row Dim x As Long Dim a As Long x = Cells(i + 1, 5) If Cells(i, 5).Value < x Then a = x End If Next MsgBox a End Sub

  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

専門家に質問してみよう