プロが教える店舗&オフィスのセキュリティ対策術

Vbaで電卓のテキストボックスにちゃんと上下に分かれた見た目の分数でかつその分数がちゃんと割り算として機能するようなものを入力したいのですがどうすれば良いですか?

質問者からの補足コメント

  • では、冪乗の指数を数字の右上に表示するのは出来ますか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/05/04 22:40
  • Excel vbaで分数の表示が難しいので有れば、ライブラリーを導入して機能を拡張するんでしょうか?それともpythonとか頑張ってみる感じですかね?

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/05/05 10:19
  • No.1の①だとTextboxには出来ないから、無理ですよね?②だと少し強引だと思います。Google電卓のx^yボタンの機能を実装したいです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/05/06 15:42
  • Google電卓でx^yを押すとちゃんとした冪乗の形が出てきますよね。ただ表示するだけではなく、ボタンに反応して表示するような事をしたいのですが、それでも同じ方法ですか?Webbrowserはあまり達成感が無いので無理ですね。

    No.5の回答に寄せられた補足コメントです。 補足日時:2022/05/09 20:38

A 回答 (7件)

こんばんは



表示に関しては普通のテキストボックスの単体機能だけでは難しいでしょう。

分数を表示する方法として考えられるのは、
①「数式エディタ」で表示する方法
(「挿入」-「記号と特殊文字」から入力できる数学数式の機能)
テキストボックスではありませんが、表示はかなり綺麗にできます。
ただし、その実態はShapeオブジェクトです。
さらに、これは特殊なオブジェクトですので、扱うのはそれなりに面倒になるものと思います。
単独の分数だけではなく、通常の数式等も全て同じ方式で表示しようとするのなら、書式等もかなり調べなければならないでしょう。

②テキストボックスを2つ利用する方法
分子の表示と分母の表示を別のボックスに分け、間に罫線等を入れて表示する。


どちらの場合も、分子、分母それぞれの編集操作は可能と思いますが、Formのテキストボックスの場合は文字位置調整(中央ぞろえなど)がきかないようですので、位置ぞろえに苦労しそうです。
シートオブジェクトの(通常の)図形オブジェクトで代用する方が簡単なのではないかと思いますが、その代わりと言ってはなんですが、UserFormのようなUIの機能は用意されてはいませんので、かなりの部分を自作することが必要になるものと想像します。

>分数がちゃんと割り算として機能するようなもの~
計算処理は、VBAで行うのですよね?
であれば、分子、分母をそれぞれ認識できていさえすれば、それに応じた計算を行うだけのことではないでしょうか?
表示にこれだけ凝るのですから、計算が多少面倒になるのはやむを得ないことと思いますが・・
(表示処理の方が余程面倒だと思いますけれど・・)
この回答への補足あり
    • good
    • 0

No1です。



>では、冪乗の指数を数字の右上に表示するのは出来ますか?
エクセルがあるのなら、ご自分で試してみようとも思わないのでしょうか?

その発想から察するところ、残念ながら、この書式をVBAから使いこなそうというのには無理がありそうな気がします。
「Vba 電卓のテキストボックスに上下に分」の回答画像2
この回答への補足あり
    • good
    • 2

No2です



>Excel vbaで分数の表示が難しいので有れば
No1に、すぐに思いつくような方法を回答したつもりですけれど??

>ライブラリーを導入して機能を拡張するんでしょうか?
数式エディタ自体がライブラリのようなものです。
LaTex形式も解釈してくれるみたいなので(完全互換ではありません)、それを利用すれば扱いそのものはかなり簡単になることでしょう。
https://qiita.com/HMMNRST/items/492d76dd4ba0ef52 …
とはいっても、このくらいのことにすら手を動かすことをなさらない質問者様にとっては、難しいであろうという意味です。

>それともpythonとか頑張ってみる感じですかね?
pythonがお得意なのなら、そちらでどうぞ。
この回答への補足あり
    • good
    • 2

No3です。



>No.1の①だとTextboxには出来ないから、無理ですよね?
No1に基本的な内容は回答したつもりです。
テキストボックスには書けません。
ただし、表示だけの問題なので、そのつもりになれば利用することは可能です。
Formも利用できませんので、UIを自分で作成する必要があります。

>②だと少し強引だと思います。
背景色、ボーダーを地の色と同じにしておけば、個々のボックスは見た目にわからなくなるので、自由に配置できます。
後は、それぞれのボックスに分解した文字を、適当なサイズで記入すれば良いだけでしょう。
分数の表示程度ならまだ簡単ですが、複雑な式にも対応するなら、こちらの方が上記よりもさらに面倒ではないかと想像します。


とは言え、他の方法がお好みなのなら、それに関しては質問者様の好き好きなので、お好みでどうぞ。
「Vba 電卓のテキストボックスに上下に分」の回答画像4
    • good
    • 2

こんにちは。



表示する場所が、Userform上のTextboxコントロールなのか、ワークシート上のテキストボックス(シェープ)なのかで話が変わります。

後者なら良いアイディアが既に回答されています。

前者ならTextboxコントロールに拘らず、例えばImageコントロールの外観をTextbox風に変更すれば、表示だけなら可能かと。

考え方としては、

1. UserformにTextbox1, Image1を配置
2. 数式の入力はTextbox1に
3. 何らかのイベントをトリガーにして、既にご紹介のあった方法で2の内容を数式変換したシェープをワークシート上に作成
4. 3をコピー
5. クリップボードから拡張メタファイルの画像をとりだして、Image1コントロールのPictureプロパティにセット

かな。

難易度は高めなので、VBAに慣れている方でないと厳しいです。

需要があればソース書いてみます。

ただ、分数は難しいかもですよねー。
コンピュータで計算すると、

1/3+1/3+1/3=1

にならないし。0.999999…

以外と電卓は奥が深いテーマです。

余談

手っ取り早くWebbrowserコントロールでGoogle計算機を表示しちゃうのは?
計算結果はgetElementBy~辺りで取得できるんじゃないかと、思ったり。
この回答への補足あり
    • good
    • 0

2    5(6+7)


1+───+──── ←罫線素片
   3+4    8⁹
のように3行で表記し3つのテキストボックに一行ずつ表示し背景色を透明にし行間を詰めればそれらしく見えるのでは。電卓だし、分母や分子の中にさらに除算がある場合は/表記でもいいんじゃないでしょうか。



また、Wordをお使いの場合やブラウザと連携するのであればMathMLが使えるでしょう。MathMLなら大抵の式に対応可能。WebBrowserコントロールをIE互換で使う場合もMathJaxのようなライブラリの助けがあればいけそうだと思います。

ちょこっと MathJax: 初期設定 | text.Baldanders.info
https://text.baldanders.info/remark/2017/09/gett …
    • good
    • 0

excellの標準コントロールでは分数やべき乗を表現できるモノがないんですよ。



したがって、その書式化には下記URLの様な工夫が必要。

https://support.microsoft.com/ja-jp/office/テキストまたは数値を上付きまたは下付き文字として書式設定する-3649411b-adf4-483e-b0e8-7b844605da74

それをUserformに表示したいならImageコントロールで画像として表示すればよいし、または WebbrowserコントロールなどでCSSで表現するか。

>ボタンに反応して表示するような事をしたい

それは貴方がその様にプログラムを書けば上記の方法で可能。ボタンを押したら表示の更新処理を入れれば良いだけです。

あなたが他言語に精通してActiveXコントロールを自作できるだけの技量があるなら無いものは作れば良いでしょう。

ご質問分を拝見するにビギナーさんとお見受けしましたので、皆さん実現可能そうな現実的な工夫を回答されてます。

その意図を汲まずにダメ出しばかりでは回答のしようも無いです。
    • good
    • 0

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