質問: 漢字混じりの数字表記を数字のみに直す方法 excelで漢字混じりの数字表記を数字のみに直す方法が知りたいです。 1400万→14000000のような形で 50百万円や 24億5,639万5,000、800億96百万 4.4億、18億34万7,400 2兆2,562億7,500万、12億5,500万 22億3,766万、181億3,000万 など、幅広く対応できるものを探しています。 何卒宜しくお願い致します。
回答: http://oshiete.goo.ne.jp/qa/10287532.html で作ったものを修正しました。カンマが入るとエラーになるからです。 string2number関数というユーザー定義関数です。 これは、擬似的なnumberstring関数の逆関数です。 numberstring(セル,1) に対応もします。 結果は以下のようになります。それ以外の方法は知りません。 1400万 14,000,000 50百万円 50,000,000 24億5,639万5,000 2,456,395,000 800億96百万 80,096,000,000 4.4億 440,000,000 18億34万7,400 1,800,347,400 2兆2,562億7,500万 2,256,275,000,000 12億5,500万 1,255,000,000 22億3,766万 2,237,660,000 181億3,000万 18,130,000,000 string2number関数 ↑書式は、[#,##0] '//標準モジュールに登録してください。 public function string2number(byval arg as variant) const keta1 as string = "十,百,千" const keta2 as string = "万,億,兆" const wasu as string = "〇,一,二,三,四,五,六,七,八,九" dim nk1: nk1 = array(10, 10 ^ 2, 10 ^ 3) dim nk2: nk2 = array(10 ^ 4, 10 ^ 8, 10 ^ 12) dim k1: k1 = split(keta1, ",") dim k2: k2 = split(keta2, ",") dim i as long, j as long, fg as long, n dim buf, buf1, buf2, buf3, f dim stotal as variant dim regex as object dim ms, m dim dbltotal as double dim bufar() if arg = "" then string2number = 0: exit function for each n in split(wasu, ",") arg = replace(arg, n, fg) fg = fg + 1 next arg = replace(arg, "円", "") arg = replace(arg, ",", "", , , vbtextcompare) '前回よりの補足 arg = replace(arg, space(1), "", , , vbtextcompare '"" arg = strconv(arg, vbnarrow) if isnumeric(arg) then string2number = cdbl(arg): exit function set regex = createobject("vbscript.regexp") with regex .global = true .pattern = "([^" & keta2 & "]+)([" & keta2 & "]*) '([^" & keta2 & "]*)([" & keta2 & "]*)" set ms = .execute(arg) for each m in ms buf1 = m.submatches(0) if m.submatches.count = 2 then buf2 = m.submatches(1) end if for i = 0 to 2 buf1 = replace(buf1, k1(i), "*" & nk1(i) & "+", , 1) if m.submatches.count > 1 then buf2 = replace(buf2, k2(i), nk2(i), , 1) end if next redim preserve bufar(j) if right(buf1, 1) = "+" then buf1 = buf1 & "0" if left(buf1, 1) = "*" then buf1 = "1" & buf1 if right(buf2, 1) = "+" then buf2 = buf2 & "0" if left(buf2, 1) = "*" then buf2 = "1" & buf1 if trim(buf2) <> "" then buf = evaluate(buf1) * evaluate(buf2) else buf = evaluate(buf1) end if stotal = buf bufar(j) = stotal j = j + 1 stotal = "" buf1 = "" buf2 = "" buf = "" next end with for each f in bufar() dbltotal = dbltotal + f next string2number = dbltotal end function 長期で数字を置く場合は、値コピーで定数化してください。