質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

2763閲覧

ExcelあるいはWordの数式エディタであらわせる数式を、VBAを用いて編集したい

Nissy019

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

1クリップ

投稿2020/07/06 07:36

編集2020/07/06 08:27

https://teratail.com/questions/input

ExcelあるいはWordの数式エディタを用いた数式VBAを用いて編集したい

中学校レベルの「計算問題」(以下数学式)を作成するツールを作成したいと思っています。
しかし、数学式を編集する有効な手段が見つけられませんでした。

そこで、数学式を編集する手段として一番可能性があると考えたのが「OfficeのExcel・Wordに搭載されている数式エディタをマクロで操作する」という方法で、Excel上で数式エディタの編集アクションを「マクロの記録」で取得したのですが、正確に記録ができません。
また、そのマクロを実行しても再現しません。

ExcelあるいはWordの数式エディタをVBAを用いて編集する方法をご教授いただけますでしょうか。
また、もしExcel・Word以外で、かつweb上のツールを利用せずに数学式を出力する方法がありましたら、ご教授ください。
よろしくお願いします。

バージョン

office365

発生している問題・エラーメッセージ

【Excel」
数式エディタで分数やルートを表す編集アクションを記録すると、記録されたマクロのコードに"?1?2?"が入力される
例 :数式エディタで分数「1/2」を入力した動作を記録したところ、下記のように自動記録された。

  ActiveSheet.Shapes.AddLabel(msoTextOrientationHorizontal, 663, 251.25, 72, 72). Select Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "?1?2?" Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 5).ParagraphFormat.irstLineIndent = 0 With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 1).Font .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.ObjectThemeColor = msoThemeColorText1 .Fill.ForeColor.TintAndShade = 0 .Fill.ForeColor.Brightness = 0 .Fill.Transparency = 0 .Fill.Solid .Size = 11 .Italic = msoTrue .Name = "Cambria Math" End With

補足:上記のロジックを実行すると、オブジェクト内にテキストとして"?1?2?"が出力される。

【word】
数式を入力しても、数式エディタ上を参照しない
例:数式エディタ上で、ax+y=0を入力

Selection.TypeText Text:="$ax+y=0$"

補足:上記を実行すると、本文に"$ax+y=0$"が出力される。
WordについてはLaTeXの構文を利用した。

その他調査した内容

このソースコードの中で、オブジェクト内の文字について書かれているのは下記のみである、という認識です。

Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "?1?2?"

また、最低限度出力したい数学記号は、2次方程式の解の公式です。
ご助力の程、どうぞよろしくお願いいたします。
.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

回答出ていますが参考まで。(Word-VBA)

VBA

1Sub Test_Sample_Miniature() 2 3 Dim InitRange As Word.Range 4 Dim objRange As Word.Range 5 Dim objOMFun As Word.OMathFunction 6 Dim objSEL As Word.Selection 7 8 '末尾へ数式オブジェクトを設定 9 ActiveDocument.Bookmarks("\EndOfDoc").Select 10 Selection.TypeParagraph 11 Set InitRange = Selection.Range 12 InitRange.Text = " " 13 Set objRange = Selection.OMaths.Add(InitRange) 14 15 '∑式を追加 16 Set objOMFun = objRange.OMaths(1).Functions.Add(objRange, wdOMathFunctionNary) 17 Set objSEL = Selection '文字位置取得 18 19 objOMFun.Nary.Char = 8721 20 objOMFun.Nary.HideSub = True 21 objOMFun.Nary.HideSup = True 22 23 '1文字右へ移動して数式セット 24 objSEL.MoveRight Unit:=wdCharacter, Count:=1 25 Selection.TypeText Text:="a/b" 26 Set objSEL = Selection '文字位置取得 27 28 '1文字右へ移動して数式セット 29 objSEL.MoveRight Unit:=wdCharacter, Count:=1 30 Selection.TypeText Text:="=x" 31 Set objSEL = Selection '文字位置取得 32 33 '数式の画面編集 34 objRange.OMaths(1).BuildUp 35 36 '√式を追加 37 Set objOMFun = Selection.OMaths(1).Functions.Add(Selection.Range, wdOMathFunctionRad) 38 objOMFun.Rad.HideDeg = True 39 Set objSEL = Selection '文字位置取得 40 41 '1文字左へ移動してルート内へ数式セット 42 objSEL.MoveLeft Unit:=wdCharacter, Count:=1 43 objSEL.TypeText Text:="x+1" 44 Set objSEL = Selection '文字位置取得 45 46 '1文字左へ移動して分母数式セット 47 objSEL.MoveRight Unit:=wdCharacter, Count:=1 48 objSEL.TypeText Text:="/(a+b)" 49 50 '数式の画面編集 51 objRange.OMaths(1).BuildUp 52 53 '移動100文字で欄外へぬける。 54 On Error Resume Next 55 Selection.MoveRight Unit:=wdCharacter, Count:=100 56 57End Sub

投稿2020/07/07 03:47

編集2020/07/08 02:09
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Powerpoint VBA 数式を書く ⑤ 参照設定不要版 - Powerpoint VBAを使おう!

上記記事によると、ExcelよりはWordで行うのが良さそうです(Excel/PowerPointの図形では直接編集が難しいため)。

以下は、記事の内容を参考にして、最前面のWord文書のテキストを「$ax+y=0$」という数式で上書きするものになります(WordのVBAで実行してください)。

vba

1Private Sub teratail275491() 2'https://teratail.com/questions/275491 3'参考サイト:Powerpoint VBA 数式を書く ⑤ 参照設定不要版(Powerpoint VBAを使おう!) http://chemiphys.hateblo.jp/entry/2017/02/19/114203 4 5 Dim doc As Word.Document 6 Set doc = ActiveDocument 7 8 '数式を入力するテキスト範囲(文書全体) 9 Dim tmpRng As Word.Range 10 Set tmpRng = doc.Content 11 12 'LaTex 形式で入力。 13 tmpRng.Text = "$ax+b=0$" 14 15 '数式化。 16 Dim om As Word.OMath 17 Set om = tmpRng.OMaths.Add(tmpRng).OMaths.Item(1) 18 om.BuildUp 19 20 Stop 21End Sub

投稿2020/07/06 10:49

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nissy019

2020/07/07 01:22

実行しましたところ、数式を表示することに成功しました。 例のロジックがわかりやすく、問題の本質部分まで理解を近づけることができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問