エクセル雑感
「VBAで導関数を求めよ」ツイッターのお題をやってみた

ExcelマクロVBAとエクセル関数についての私的雑感
最終更新日:2020-02-09

「VBAで導関数を求めよ」ツイッターのお題をやってみた


ツイッターで出題されたVBAの問題をやってみました。
ツイッターのエクセルおよびVBA関係の人達の間で問題を出し合うという事が行われています。
そんな中、現役高校生と思われる方からVBAの問題が出されました。


なんと、
お題:「y = 5x^3 + 2x^2 + 7x + 5」の導関数を求めろ!

これは・・・
そもそも導関数って何だ?
というところから始めないと・・・

頑張ってやってみたので、ここに記録として残しておきます。

お題に関するツイート

お待たせしました!今回は初出題ということで、まずは私が好きなテーマで!スキルアップできそうな問題は次から載せていきます!!

VBAで解決してくださいね。
お題:「y = 5x^3 + 2x^2 + 7x + 5」の導関数を求めろ!

文字列解析がメインです。皆さんはどう解きますか?



時間 ツイート本文
2020/2/9 18:30 ふっふっふ、じじいにだってできたぞ。
もうゴリゴリと力で押しきったのだ。
ところで、これで良いのだよね、ちょっと不安・・・
VBA マクロ 導関数 微分
2020/2/9 17:30 ・=から右側だけ解析する
・スペース区切りはあてにしない
・x^-3は-3x^-4で良い
こんな感じかな。
後は、*や/や()は出てこないのか、さすがに()でそれぞれにx^3とか入っていたら厳しいだろ。
もうそういうのは考えない事にしよう、そうしよう。
これでVBA書けるのかな・・・
2020/2/9 17:02 これでようやくVBAを書くことができるぞ。
いや待て、まだちゃんと定義できていないことが残っているようだ。
・x,yしかアルファベットは出てこないのか?
・半角スペースで区切られていない場合もありえるのか?
・マイナスべき乗は、x^-3は-3x^-4で良いのか?
2020/2/9 16:44 つまり、
y = 5x^3 + 2x^2 + 7x + 5
これを微分すると、
y = 15x^2 + 4x + 7
これで良いのかな。
あれ、もう一回微分しちゃダメですか?、もっと簡単になるけど、ダメなんだよね。
2020/2/9 16:35 へっへっへっ、ついにたどり着いたぞ、これだな。
youtube素晴らしいじゃあないですか。
https://t.co/QrZNeyQI5o
2020/2/9 16:29 「微分係数」理解したぞ、「x=aでの微分係数は、x=aにおける接線の傾きです。」なるほど、なるほど、そうですか。
あれ、導関数を求めるのに関係あるのか、関係ないのか、、、
2020/2/9 16:20 続きをやろうかと調べ始めたら、また新しい言葉が、
「微分係数」
えーと、なんですか、それは、、、
もはや、近づいているのか、遠ざかっているかもわからなくなってきた、、、
2020/2/8 22:47 さらに出てたぞ、
x^2 の微分は 2x
x^3 の微分は 3x2
x^4 の微分は 4x3
そうか、そうだったのか・・・
すみません、この辺で勘弁してください??
2020/2/8 22:43 ふっふっふっ、なんか出てたよ。
x^n の微分は二項定理
1/x の微分は分数式の計算
√x の微分は有理化
sin x の微分は三角関数の加法定理
e^x の微分はネイピア数の性質
つまり、今回は二項定理ですな。
2020/2/8 22:34 いや、知ってるよ、微分でしょ。
limだとかx→0だとかってやつでしょ。
知ってますよ、もう。
limってリミットって読むでしょ、私クラスになるとね、リーメスって読みますから。
2020/2/8 22:29 「導関数を求めよ」理解したぞ、つまりは「微分せよ」ということですな。
なんだー、最初からそういってくれればいいのに。
ところで、「微分」って何だ・・・
2020/2/8 21:07 そもそも「導関数」って何だ・・・

導関数を求めるVBA関数



Option Explicit

Sub test()
  Const q = "y = 5x^3 + 1.5x^2.5 + 7x+5"
  Debug.Print q
  
  Dim s As String: s = q
  If InStr(q, "=") > 0 Then s = Mid(q, InStr(q, "=") + 1)
  Debug.Print "y' = " & 導関数(s)
End Sub

Function 導関数(q As String) As String
  Dim s() As String
  s = Split(空白区切(q), " ")
  Dim s1
  Dim i As Long
  For i = LBound(s) To UBound(s)
    If Not (s(i) = "+" Or s(i) = "-") Then
      s(i) = 微分の法則(s(i))
    End If
  Next
  導関数 = Trim(Join(s))
  If Right(導関数, 1) = "+" Or Right(導関数, 1) = "-" Then
    導関数 = Left(導関数, Len(導関数) - 1)
  End If
  導関数 = Trim(導関数)
End Function

Function 空白区切(ByVal s As String) As String
  s = Replace(s, "X", "x")
  s = Replace(Replace(s, "+", " + "), "-", " - ")
  s = Replace(s, "^ - ", "^-") '後から追加
  Do
    s = Replace(s, " ", " ")
  Loop Until Len(s) = Len(Replace(s, " ", " "))
  空白区切 = s
End Function

Function 微分の法則(ByVal s As String) As String
  Dim ary
  If InStr(s, "x") = 0 Then
    微分の法則 = ""
    Exit Function
  End If
  If InStr(s, "^") = 0 Then
    微分の法則 = Replace(s, "x", "")
    Exit Function
  End If
  ary = Split(Replace(s, "x", ""), "^")
  微分の法則 = IIf(ary(0) = "", 1, ary(0)) * ary(1) & _
         "x" & _
         IIf(ary(1) = 2, "", "^" & ary(1) - 1)
End Function

実行結果は、

VBA マクロ 導関数 微分

さらに、出題者より返信で、
「微分の法則」って名前おもしろい笑
ちゃんと動作してますね!指数のとこ小数点でも上手く実行できるんでしょうか?出来たらさらに応用の幅広がりますね

いや、もう、関数名を何にして良いのか分からなくて・・・
「微分の法則」これなら意図は伝わるでしょって感じです。
という事で、少数もやってみました。

VBA マクロ 導関数 微分

とりあえず、ちゃんと動いていますね。
キーとなる文字はxと^だけなので、他ははそのまんま処理しているだけです。

マイナス指数の時を考慮していなかったので、'後から追加の1行を入れました。

VBA マクロ 導関数 微分

+ -4x^-3
これで良いのか悪いのか、良く分からないのでとりあえず良い事にしておきます。



同じテーマ「エクセル雑感」の記事

offset 検索ワードで非常に多いので「offsetまとめ」
Excelのリンクの管理について
プログラミングとは
「ネ申Excel」問題 への同意と反論
「Excel3ステップ理論」3階層システムの応用
「ポケモンを確実に見つける方法」をExcelで数学してみた
「VBAによる解析シリーズその2 カッコ」をやってみた
ツイッターで出されたVBAのお題をやってみた
エクセルで「もういくつ寝るとお正月」
エクセルで連立方程式を解く(MINVERSE,MMULT)
「VBAで導関数を求めよ」ツイッターのお題をやってみた


新着記事NEW ・・・新着記事一覧を見る

「VBAで導関数を求めよ」ツイッターのお題をやってみた|エクセル雑感(2月9日)
Property {Get|Let|Set} ステートメント|VBA入門(2月9日)
フィボナッチ数列(再帰呼び出し)|VBA技術解説(2月8日)
エクセルで連立方程式を解く(MINVERSE,MMULT)|エクセル雑感(2月7日)
スピルって速いの?スピルの速度について|VBA技術解説(2月4日)
スピルでVBAの何が変わったか|VBA技術解説(2月3日)
スピルについて|エクセル入門(2月3日)
エクセルで「もういくつ寝るとお正月」|エクセル雑感(1月29日)
VBAの少数以下の演算誤差について|VBA技術解説(1月29日)
VBAで写真の撮影日時や音楽動画の長さを取得する|VBA技術解説(1月23日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ