質問: valエクセル 「1000万円」の1000(数字)部分だけ取り出したい3。 たびたび、同じ内容での質問ですみません。 ちょっと前に、 エクセルで、a列に 1000万円 10円 100百万円 とあり、a列の数字部分をb列に取り出したいです。 1000 10 100 という感じにできないでしょうか? という質問に対して、 val(cells(1,1)) という回答をいただきました。 確認もしてみて、ちゃんと数字部分だけとりだせたのですが、 桁区切りのカンマがあると、それ以降は数字を拾ってくれないということに気づきました。 1,200円→1となります。 この場合、まずカンマをとってからval関数をつかうのでしょうか? 桁が多くなると面倒くさい気もしますが。。。 すみませんが、よろしくお願いします。 私の確認不足でした。
回答: こんばんは。 前回の#2 のwendy02です。 >確認もしてみて、ちゃんと数字部分だけとりだせたのですが、 >桁区切りのカンマがあると、それ以降は数字を拾ってくれないということに気づきました。 私は、それを想定して書いたのですが、私のコードは試さなかったのですね。 >これは、 > 1,000万円 >でも、1000を導きだします val関数を使うなら、 sub test1() dim c as variant dim buf as string for each c in range("a1", range("a65536").end(xlup)) buf = replace(c.value, ",", "") c.offset(, 1).value = val(buf) next c end sub でよいのですが、val関数は、プロの世界では、使ってはいけないと言われることもあります。(たぶん、vb4 の世界の話で、今は関係ありませんが) 少し、研究してみてください。以下、二つは、cdble を使っています。 数字と認識されるまで、ループを繰り返す方法 '------------------------------------------- sub test2() dim c as range dim buf as string dim i as long for each c in range("a1", range("a65536").end(xlup)) buf = c.value for i = 1 to len(buf) if isnumeric(mid(buf, 1, i)) = false then buf = mid(buf, 1, i - 1) exit for end if next i if isnumeric(buf) then c.offset(, 1).value = cdbl(buf) else c.offset(, 1).value = c.value end if next c end sub 十~万までと、円が入った場合に、それらをすべて抜く方法 '---------------------------------------- sub test3() dim buf as variant dim c as variant dim v as variant for each c in range("a1", range("a65536").end(xlup)) if vartype(c.value) = vbstring and c.value like "#*" then buf = c.value for each v in array("円", "十", "百", "千", "万") buf = replace(buf, v, "") next v buf = cdbl(buf) else buf = c.value end if c.offset(, 1).value = buf next c end sub