【先着1,000名様!】1,000円分をプレゼント!

Excelについて教えてください

セルA1に3億1千3百万円
セルA2に2千37万円
セルA3に5,890,000円

のように連続で表記されている金額を

313,000,000円
20,370,000円
5,890,000円

のように変換する方法はありますか?

数字が多量にあるため悩んでおります、是非ともご教授願います。

A 回答 (4件)

NumberString 関数の逆関数ということですね。


ただし、3億1千3百万円とい表現はありませんでしたが。

昔、こういうVBAのユーザー定義関数を作ったことがありますが、改めて作り直してみました。NuberString の逆ができなければ意味がないような気もしますが、
壱弐参四伍六七八九,億阡百拾 の漢字を使う場合は、定数を入れ替えしなければなりませんので、現行の関数ではできません。NumberString の引数、1と2と、今回のような数字混じりに対応します。


'//標準モジュール(長期の場合は、値に変換して定数にすること)
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 = 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
    • good
    • 0
この回答へのお礼

チャレンジしてみます、ありがとうございました。

お礼日時:2018/02/17 22:28

補足


上から23行目付近に、一行加えると
  arg = Replace(arg, ",", "") 'カンマ区切りを取る 23line
  arg = Replace(arg, "円", "")

例えば、会社の表記で使われる
5,230千円 -> 5,230,000

のように変換可能になります。
    • good
    • 0

文字列を数値に直すことは、容易ではありません。



 ・諦める。
 ・一つずつ手直しする。
 ・誰かに任せる。
 ・マクロや関数を組んで修正する。

どれか好きなものを選んでください。

・・・
ということで、例えばA3セルには数値が入力されているのか、文字列が入力されているのかを確認しましょう。

どこか空いたセルに
 =CELL("type",A3)
と入力して、「v」が返ってきたら数値、「l」が返ってきたら文字列と判断できます。
「v」が返ってきたのであれば、セルの表示形式を設定するだけで簡単に変換できますが、文字列なら諦めることを勧めます。
元から作り直すことを強く勧めたいところですよ(´・ω・`)
    • good
    • 0

同じ列の数字が個々に違う書式の場合、例のようにAの列でしたら、一番上の枠のようになっている箇所のAをクリックすると列すべてが選択されるので、その状態で囲われた表示内で右クリックしてセルの書式設定で表示形式を変えれば、すべて同じ書式になります。

    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Q漢字混じりの数字表記を数字のみに直す方法

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万
など、幅広く対応できるものを探しています。

何卒宜しくお願い致します。

Aベストアンサー

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

長期で数字を置く場合は、値コピーで定数化してください。

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兆...続きを読む


人気Q&Aランキング