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

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

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

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

Q&A

2回答

441閲覧

VBAでval関数を使いたいのですが直感と違う挙動をしています

koklopkiujio

総合スコア2

VBA

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

0グッド

1クリップ

投稿2022/05/23 12:13

編集2022/05/23 22:10

前提

val関数を使っていたところ直感と違う挙動をしていました。しらべても 、なんの仕様なのか出てこないのでわかる方がいたら教えてほしいです。
また、検索ワードの見つけ方などでこの手のトラブルのうまい原因の見つけ方があれば教えてほしいです

実現したいこと

val関数で数字を出したい。

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

直感的には val("5d10")は5になって欲しい。

50000000000 50000000000

該当のソースコード

vba

1debug.Print val("5d10") 2debug.Print val("5e10")

試したこと

VBA 基数、VBA val関数、などの検索ワードでググってみましたがうまい結果が得られませんでした。

結果を眺めると 5×10^10となっているのはわかるのですが内部でどう解釈されているのかがわかりません。わかる方がいたら教えてください

追記事項

使用しているのは エクセル 2019 64ビット版です。

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

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

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

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

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

maisumakun

2022/05/23 12:25

どのアプリのVBAですか?
koklopkiujio

2022/05/23 12:34

エクセル 2019 64ビット版です。
guest

回答2

0

50000000000
をセルに入れてセル幅を狭くすると
5E+10
と表示されます。
数値の指数表現です。
この中の+記号は省略可能です。
Eというのは指数という意味です。
浮動小数点数に「単精度浮動小数点数」と「倍精度浮動小数点数」があるのはご存じでしょうか?
この2つを区別したいときに倍精度の意味でEの代わりにDを使うことがあります。
要するにEでもDでも指数表現として認められているということです。
小文字も許容されていますのでeでもdでもいいという事になります。

投稿2022/05/23 13:12

iruyas

総合スコア1067

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

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

0

VBAでは dは指数表記を意味しているようです。
つまり、5d105 * 10 ^ 10という意味になります。

debug.Print val("5d-10") だと5 * 10 ^ -10という意味になり0.0000000005 となります。

他にeも指数表記を意味します。
ということで指数表記を無視するようにするには、d や e を別の文字に置換してからvalの引数にすればいいでしょう。

vba

1 Debug.Print Val(Replace(Replace("5d10", "d", "a"), "e", "a"))

投稿2022/05/23 13:22

hatena19

総合スコア33715

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問