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

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

「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
これで良いのか悪いのか、良く分からないのでとりあえず良い事にしておきます。



同じテーマ「ツイッター出題回答 」の記事

「VBAによる解析シリーズその2 カッコ」をやってみた
ツイッターで出されたVBAのお題(悪魔のCSV)をやってみた
「VBAで導関数を求めよ」ツイッターのお題をやってみた
ツイッターのお題「君の名は?」
ツイッターのお題「CSV編集」
アルファベットの26進(ツイッターお題)
ナンバープレート数字遊び:ツイッターお題
サロゲートペアに対応した自作関数(Len,Left,Mid,Right)
迷路にネコが挑戦したら、どうなるかな…
迷路ネコが影分身の術を体得したら…


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

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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