
ご回答者様
いつもお世話になっております。
表題の件、VBA Val 関数 文字列形式の数値についての質問です。
下記ソースを作成しております。
Sub val2()
Dim i As Integer
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(i, 2).Value = Val(Cells(i, 1))
Next i
End Sub
B列にVal関数で文字列系形式の数値を表示させています。
2点、質問が御座います。
1点目
No40
500円
1000*2
とA列に記載しておりますが500円しか反応しません。
(検索結果が0になってしまいます。500円は思惑通り500と表示されます。)
こちらにつきましては何故でしょうか。
2点目
Val関数を用いて足し算が可能か
例えば500円+500円=1,000円のように計算が可能かどう
Sub val3()
Dim i As Integer
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(i, 2).Value = Val(Cells(i, 1)+Val(Cells(i, 3))
Next i
End Sub
上記ソースですとコンパイルエラーと表示されてしまいます。
お忙しい所、大変お手数をお掛け致しますが宜しくお願い致します。
No.7ベストアンサー
- 回答日時:
余計なことをいうようですが、こういうものは、質問の内容のバリェーションの解決方法を教わるよりも、Val()の使い方そのものを覚えたほうが良いと思うのです。
ここの掲示板には、VBAのベテランもいらっしゃるようなので、ご存知の方もいるはずなのですが。> Cells(i, 2).Value = Val(Cells(i, 1))
> Cells(i, 2).Value = Val(Cells(i, 1)+Val(Cells(i, 3))
> Val関数を用いて足し算が可能か
> 例えば500円+500円=1,000円のように計算が可能かどう
VBAで、Val には、こういう使い方というのはほぼありえないです。
500円+500円というような文字列は、"円"など、単位は書式で表し、数値のみにする、というのはEXCELの基礎知識です。それを、Val関数で可能かどうか、というのは、方向性が違っています。
VBAを利用する上で疑問を生じた場合でも、それを実務に持ち込むことは避けることと、そういう疑問は、あくまでも自分の中で結論(可能か不可能か)を出したほうが良いと思うのです。回答者の中には、自分の技を見せたいという人もあるにはちがいないのですが、Val関数のような基本的な範疇で、他人に聞いても、また同じ疑問が湧いてきてしまいます。また、実務に持ち込むと、いつまでも完成できません。
ちなみに、私のVBAの経験では、Val関数を使う場合は
16進で書いてあるものを、あえて10進に直す場合と、UserForm のテキストボックスの文字を数字に直す時などに利用します。それ以上に、それほど使わないのです。VB5 の時代は、Val()関数は、Val関数にバグがあったので、仲間内では、使うなと言われてきたのですが、その後、VB6以降はバグは直りましたが、かといって、Val関数の有用性が上がったわけではないのです。
No.6
- 回答日時:
ユーザー定義関数「StrToDig」を作成してみました。
Function StrToDig(対象 As String)
Dim 位置 As Long
Dim 途中 As Boolean
Dim 点有 As Boolean
Dim 文字 As String
Dim 結果 As String
If 対象 <> "" Then
For 位置 = 1 To Len(対象)
文字 = Mid$(対象, 位置, 1)
Select Case 文字
Case "0" To "9"
If 位置 = 1 Then
結果 = 文字
途中 = True
Else
If 途中 Then
結果 = 結果 & 文字
Else
If Mid$(対象, 位置 - 1, 1) = "-" Then
結果 = "-" & 文字
途中 = True
Else
結果 = 文字
途中 = True
End If
End If
End If
Case "."
If 位置 = 1 Then
結果 = "0."
途中 = True
点有 = True
Else
If 点有 Then Exit For
If 途中 Then
結果 = 結果 & "."
点有 = True
End If
End If
Case Else
If 途中 Then Exit For
End Select
Next
End If
If 結果 = "" Then
StrToDig = ""
Else
StrToDig = CDbl(結果)
End If
End Function
※ 以下のような結果が返ります
No400 ⇒ 400
500円 ⇒ 500
1000*2 ⇒ 1000
No.40 ⇒ 40
0.40 ⇒ 0.4
No.4.1 ⇒ 4.1
0.4.2 ⇒ 0.4
.42 ⇒ 0.42
No.50-60 ⇒ 50
abc-60+50 ⇒ -60
2019/12/22 ⇒ 2019
・「.」は最初に有る時と数字の間に有る1個目だけが「.」と判断されます。
No.5
- 回答日時:
①について
Val 関数は、数値の一部として認識できない最初の文字で、文字列の読み取りを中止します。
1000*2が0と言う結果はおかしいと思われます。もしかすると"1000*2"などになっていませんか?
②について
可能です。
ただし、算術式が成り立たない場合などを想定しエラー処理をする必要があります。
コンパイルエラーは、実行時エラー出ないので 文法などをデバッグして正しく直してください。
直し方が分からず質問をする場合は、エラーになった部分を示しましょう。
(これについては、以前のスレッドで理解されているかと思います)
以前のスレッドで理解されたと思いますが、シートオブジェクトなど明示的にコードに入れましょう。
質問が謎解きゲームにならないように、情報を省略するのはやめましょう。
開示できない場合は、省略でなく代替えコードを示してください。

No.4
- 回答日時:
>No40
>500円
>1000*2
>とA列に記載しておりますが500円しか反応しません。
>(検索結果が0になってしまいます。500円は思惑通り500と表示されます。)
この個所の画像を提示してください。
そして、B列にあなたが望む結果を打ち込んで、その画像も含めて、提示してください。
No.3
- 回答日時:
今夏は該当しませんが、
「No.40」は何と認識させたいのですか?
① 40
② 0.40
③ その他(具体的に説明して下さい)
「0.40」は何と認識させたいのですか?
④ 0
⑤ 0.40
⑥ その他(具体的に説明して下さい)
「No.4.1」は何と認識させたいのですか?
⑦ 4
⑧ 0.4
⑨ 4.1
⑩ その他(具体的に説明して下さい)

No.2
- 回答日時:
>Cells(i, 2).Value = Val(Cells(i, 1)+Val(Cells(i, 3))
↓カッコが足りない。
Cells(i, 2).Value = Val(Cells(i, 1))+Val(Cells(i, 3))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
word の文字入力 文字が青色に...
-
至急お願いします!! Wordで、...
-
DXFをAutoCADで開くと文字位置...
-
“髙”という字の出し方教えてく...
-
漢字を出したい!
-
スマートフォンのジョルテのタ...
-
Word IMEパッドから漢...
-
TeraPadで見えない文字...
-
一太郎の外字を別パソコンに移...
-
A4サイズの紙いっぱいに1文...
-
OCRとスキャナ
-
イラストレーターで文字が半角...
-
アイビスペイントというアプリ...
-
Thunderbirdの添付ファイル名に...
-
CASE MARKの表記方法について
-
エクセルの「IF」の結果の文...
-
文字がにじむ
-
Shift_JISで表示できて、UTF-8...
-
Word文書に、チェックマーク(...
-
PDF elementで白文字?というか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
word の文字入力 文字が青色に...
-
AUTO-CADで文字の太さを太くす...
-
漢字を出したい!
-
至急お願いします!! Wordで、...
-
DXFをAutoCADで開くと文字位置...
-
“髙”という字の出し方教えてく...
-
Word で項目番号 ○の21 から...
-
Thunderbirdの添付ファイル名に...
-
Shift_JISで表示できて、UTF-8...
-
PDFまたはTIFFファイルに文字を...
-
PDF elementで白文字?というか...
-
エクセルの「IF」の結果の文...
-
ノーツ送信する際の多言語mine...
-
CASE MARKの表記方法について
-
「~が言うには」の違う言い方
-
AutoCAD 複数の文字を1つの文字...
-
『unicode形式の文字を含んでい...
-
アルファベットの「o」にスラ...
-
teraterm の文字色の変更について
-
Word文書に、チェックマーク(...
おすすめ情報