No.3ベストアンサー
- 回答日時:
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
No.4
- 回答日時:
補足
上から23行目付近に、一行加えると
arg = Replace(arg, ",", "") 'カンマ区切りを取る 23line
arg = Replace(arg, "円", "")
例えば、会社の表記で使われる
5,230千円 -> 5,230,000
のように変換可能になります。
No.2
- 回答日時:
文字列を数値に直すことは、容易ではありません。
・諦める。
・一つずつ手直しする。
・誰かに任せる。
・マクロや関数を組んで修正する。
どれか好きなものを選んでください。
・・・
ということで、例えばA3セルには数値が入力されているのか、文字列が入力されているのかを確認しましょう。
どこか空いたセルに
=CELL("type",A3)
と入力して、「v」が返ってきたら数値、「l」が返ってきたら文字列と判断できます。
「v」が返ってきたのであれば、セルの表示形式を設定するだけで簡単に変換できますが、文字列なら諦めることを勧めます。
元から作り直すことを強く勧めたいところですよ(´・ω・`)
No.1
- 回答日時:
同じ列の数字が個々に違う書式の場合、例のようにAの列でしたら、一番上の枠のようになっている箇所のAをクリックすると列すべてが選択されるので、その状態で囲われた表示内で右クリックしてセルの書式設定で表示形式を変えれば、すべて同じ書式になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) VBAにてエクセルをpdf化する方法 1 2023/03/10 16:20
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Excel(エクセル) Excelで小数表記をそのまま角度表記にしたい 5 2022/04/04 12:34
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 17:07
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/10/25 17:10
- Excel(エクセル) 日本語向きの“ダブルクオーテーション”の入力 1 2022/10/16 11:33
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) エクセルの条件付き書式 3 2022/05/08 03:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excel 2019 のピボットテーブル...
-
Excelのセルを飛ばして入力する
-
【マクロ】エクセルにかいてあ...
-
Excelのオートフィル
-
Excel初心者です。 詳しい方、...
-
スプレッドシート クエリ関数 1...
-
MOS365 Excel Expert / Excel R...
-
西暦や和暦の表示をyyyymmdd表...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセルの数式で教えてください。
-
スプレッドシートの関数VLOOKUP...
-
エクセルでセルに「氏名を入力...
-
エクセルで指定した日付、店舗...
-
【Excel】セル内の時間帯が特定...
-
Excelのグラフ軸について
-
Excel 2019 は、SPILL機能があ...
-
関数を教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
漢字混じりの数字表記を数字の...
-
Excelについて教えてください ...
-
中間周波数の求め方について
-
お気に入りのアドレス一覧表の...
-
カラオケJOYSOUNDについて
-
グレースケール画像を量子化す...
-
F-1の海外サイトを教えて下さい!
-
フジテレビってなぜ不安を煽る...
-
フォーミュラカーのお尻のライ...
-
「5日に王子さんが来る」という...
-
パドックパスとピットウォーク...
-
アニメ「PEACEMAKER...
-
ライブのときによく使われてい...
-
日テレのDAISUKI!の歌のタイト...
-
MASTER KEATON の Railtown
-
夢で逢えたらのエンディング曲
-
教えて下さい!!!初めてF1観戦に...
-
CX系って何ですか?
-
藤子不二雄ワイドの終曲 DREAM...
-
宇宙刑事シャリバンについて
おすすめ情報