

No.7ベストアンサー
- 回答日時:
「漢数字 アラビア数字 変換」で検索したら引っ掛かりました。
漢数字→数字変換プロセッサ『なんば君』
http://www.vector.co.jp/soft/winnt/util/se338739 …
※デフォルトでは、漢数字が一桁の場合(第一章、第二条など)置換対象からはじく仕様のようです。
設定>変換する単位文字を追加 で「編章節款目」などと単位を指定すると正常に動作します。
民法を対象に動作確認しましたが、
挙動をざっと見ただけで逐一チェックはしてません、悪しからず。
No.9
- 回答日時:
No8です。
先ほどのものだと1文字空けて二つ数字が続いた場合(例:「百、十」)に不具合がありますので手順3を以下のように訂正します。3.
千([一二三四五六七八九十百][^百]) → 千0百\1
百([一二三四五六七八九十][^十]) → 百0十\1
また、1で指定する文字は文中に存在する文字でも問題ありませんでした。ただしその場合6を
〓〓$ → (何もなし)
とする必要があります。
No.8
- 回答日時:
正規表現の使えるテキストエディタで以下を順に置換してください。
なお自分はEmEditorで実験しました。
1.
$ → 〓〓
…(行末にダミー追加。後述)
2.
([^二三四五六七八九])十 → \1一十
([^二三四五六七八九])百 → \1一百
([^二三四五六七八九])千 → \1一千
…(単独の十・百・千を一十・一百・一千に)
3.
千(.[^百]) → 千0百\1
百(.[^十]) → 百0十\1
十([^一二三四五六七八九]) → 十0\1
…(空いた桁に0を入れる)
4.
千 → (何もなし)
百 → (何もなし)
十 → (何もなし)
…(不要になった十・百・千を消去)
5.
一 → 1
:
:
九 → 9
…(漢数字を算用数字に変換)
6.
〓〓 → (何もなし)
なお最初の「$ → 〓〓」の理由ですが、
手順3で求める数字の2文字先を見て判断しているので、行末に数字があると正しく判断されません。これを防ぐために行末にダミーを追加しています。
これはどんな文字列でもかまいませんが、後で消すことになるので文章中に現れない文字列にしてください。
No.6
- 回答日時:
どのアプリケーションを使われているか記載がないですが。
ワードや一太郎で何回か文字の置き換えをすれば出来るはずですよ。
1回目:千百十 → 111、に置き換え
2回目:千百 → 11、
3回目:千 → 1、
4回目:百十→ 11、
5回目:第百 → 第1、
6回目:百を削除、(二百~九百が二~九になる)
7回目:第十 → 第1、
8回目:十条 → 0条、(末尾20~90番のキリ番処置)
9回目:十を削除、(二十~九十が二~九になる)
最終回:残っている漢数字をアラビア数字に変換すればOK。
順番を間違わないで下さい。
ただし第百条・第千条のようにキリ番の場合は、第1条になってしまうので変換後の確認で修正して下さい。
回数が多いようですが、先頭文字が百や十の場合の対策なので仕方ない、それでも置き換えダイアログに入力するだけです。
今ある機能で工夫してはどうでしょう。
一見手間ですが、マクロとか関数を勉強してる間に終わっちゃいます。^^
No.5
- 回答日時:
こんにちは #1です。
>この関数式をどう生かせば、エクセルもしくは、ワードの中の漢数字を変換できるのでしょう?
本来は、ユーザー定義関数にして、それをサブルーチン関数にし、Wordの文章の中で、その文字を探して、変換するようにするか、元のソースの形態が分かりませんが、WordのDocument のText プロパティの中で、正規表現で探して、処理するのが良いのではないかと考えています。
このユーザー定義関数の最終的な目標は、IMEの再変換のようになればよいわけです。
ユーザー側は、組み込み自体は、コードを貼り付けて実行するだけの話ですが。
インターネット検索すれば、出てくるようですが、私の場合は、新たな開発には相応に時間もかかるし、どうもメジャーな話のようなので、このまま様子を見させていただくことにします。
No.4
- 回答日時:
訂正:
? CLong_KAN("二百")
200
が、正しい変換結果です。
? CLong_KAN("二百")
300
は、二重加算を確認した際の名残りでした。
No.3
- 回答日時:
以前、似たような質問があったときに興味があり、テキストとして保存
してあるWord用のマクロがあります。回答者が誰だか忘れてたことと、
質問ナンバーを控えていなかったので、過去ログで検索しても探すこと
が出来ませんでした(たぶんどこかにあるはず)。
以下のマクロは、その当時掲載されたままのものですので質問内容とは
少し違うものかもしれませんが参考になると思います。
'*************************ここから***************************
Sub ChgToArabic()
Dim i, LNGT, Kanji, N, LL, L, K, SARABIC
Const Kansuu = "一二三四五六七八九〇"
Const Suuji = "1234567890"
Selection.HomeKey Unit:=wdStory
Perform: Selection.Find.ClearFormatting
With Selection.Find
.Text = "第*条"
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
End With
If Selection.Find.Execute = False Then Exit Sub
LNGT = Selection.Characters.Count
Selection.Characters.Last.Select
Selection.MoveLeft Unit:=wdCharacter, Count:=LNGT - 1
Selection.MoveRight Unit:=wdCharacter, Count:=LNGT - 2, Extend:=wdExtend
Kanji = Selection.Characters.Parent
LL = Len(Kanji)
SARABIC = ""
L = 0
CHG: L = L + 1
N = Mid(Kanji, L, 1)
Select Case N
Case Is = "一", "二", "三", "四", "五", "六", "七", "八", "九", "〇"
K = Mid(Suuji, InStr(Kansuu, N), 1)
Case Is = "十", "百"
If L = 1 Then
K = "1"
SARABIC = SARABIC & K
GoTo EXT
End If
Select Case Mid(Kanji, L - 1, 1)
Case Is = "一", "二", "三", "四", "五", "六", "七", "八", "九"
GoTo EXT
Case Else
Select Case Mid(Kanji, L + 1, 1)
Case Is = "十", "百"
If N = "十" Then K = "1"
If N = "百" Then K = "1"
Case Is = "一", "二", "三", "四", "五", "六", "七", "八", "九"
If N = "十" Then K = "1"
If N = "百" Then K = "10"
Case Else
If N = "十" Then K = "10"
If N = "百" Then K = "100"
End Select
SARABIC = SARABIC & K
GoTo CHG
End Select
Case Else
K = N
End Select
SARABIC = SARABIC & K
If L < LL Then GoTo CHG
Selection = SARABIC
Selection.MoveRight Unit:=wdCharacter, Count:=1
GoTo Perform
Exit Sub
EXT: Select Case N
Case Is = "十"
Select Case Mid(Kanji, L + 1, 1)
Case Is = "一", "二", "三", "四", "五", "六", "七", "八", "九"
K = ""
Case Else
K = "0"
End Select
Case Is = "百"
Select Case Mid(Kanji, L + 1, 1)
Case Is = "十"
K = ""
Case Is = "一", "二", "三", "四", "五", "六", "七", "八", "九"
Select Case Mid(Kanji, L + 2, 1)
Case Is = "十"
K = ""
Case Else
K = "0"
End Select
Case Else
K = "00"
End Select
End Select
SARABIC = SARABIC & K
If L < LL Then GoTo CHG
Selection = SARABIC
End Sub
'*************************ここまで***************************
これは「第一条」などの条文の箇条部分を変換するものですので、質問
の内容からは少し違うものかもしれませし、「百九十九条」までを対象に
しているものなので少し手直しが必要でしょうが、参考になるのでは。
No.2
- 回答日時:
一介のデザイナでプログラマではありません。
が、以下のような関数を使って変換することが考えられます。
Public Function CLong_KAN(ByVal KanSuji As String) As Long
Dim I As Integer
Dim L As Integer
Dim C As String
Dim N As Integer
Dim M As Integer
Dim T As Integer
Dim V As Long
T = 1
L = Len(KanSuji)
For I = L To 1 Step -1
C = Mid$(KanSuji, I, 1)
N = InStr(1, "一二三四五六七八九", C, vbTextCompare)
M = InStr(1, "十百千", C, vbTextCompare)
V = V + T * N + IIf(M > 0, 10 ^ M, 0) - IIf(N > 0 And T > 1, T, 0)
T = 10 ^ M
Next I
CLong_KAN = V
End Function
下桁から順次に変換します。
一二三四五六七八九は、その位に応じて加算するために T*N を加算します。
十百千は、10^M で一旦加算しることにします。
ただ、これだけですと、二百は 100+200=300 と二重加算されます。
ですから、N>0 の場合は、一旦加算した 10^M(=T) を減算して調節します。
しかし、このアルゴリズムらしきものが正しいかどうかは、非常に怪しい。
なお、一応、15個の漢数字については正常に変換しているようです。
[イミディエイト]
? CLong_KAN("一")
1
? CLong_KAN("十")
10
? CLong_KAN("十一")
11
? CLong_KAN("百")
100
? CLong_KAN("百一")
101
? CLong_KAN("百十一")
111
? CLong_KAN("二百")
300
? CLong_KAN("二百十三")
213
? CLong_KAN("千")
1000
? CLong_KAN("千一")
1001
? CLong_KAN("千二百十三")
1213
? CLong_KAN("二千")
2000
? CLong_KAN("二千一")
2001
? CLong_KAN("二千二百十三")
2213
? CLong_KAN("二千十九")
2019
質問文を読んで興味半分で作ったに過ぎません。
あくまでも、未完の関数と思って参考になさって下さい。
この回答への補足
どうもありがとうございます。
ちなみにエクセル・ワードの初歩的なことしか知らないんですが、この関数式をどう生かせば、エクセルもしくは、ワードの中の漢数字を変換できるのでしょう?
No.1
- 回答日時:
こんばんは。
今、ここのカテゴリで自分の発言を確認しましたが、
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1832474
百二十五 →125 ではありませんでした。Word用のマクロとしてなら、作れそうな気がします。ただ、そういうソフトというよりも、Perl やAwkなどのスクリプトがありそうな気がします。内容的にはマクロもスクリプトもあまり変わりませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) ワードで,特定の文字だけ,字体を一括変換する方法は? 1 2023/04/26 10:11
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- その他(Microsoft Office) Microsoft IME 一発で変換できない言葉がある 3 2022/07/19 19:29
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- 日本語 なぜ「壊石料理」と記述するのでしょうか? 26 2023/06/17 13:01
- Chrome(クローム) chromebookで「十分(10分)」 4 2022/06/30 17:41
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) Excelについて 7 2023/03/12 17:01
- 政治 あれれ?自公政権は消費税法第1条第2項違反しているのでは? 2 消費税の収入については、地方交付税法 0 2022/06/10 20:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字コードの%E3%80%とは何です...
-
あるユニコード文字が、あるコ...
-
CString から LPCTSTRの型に変換
-
日本語ドメインを取得しようと...
-
Excel VBAでPDFファイルをMicro...
-
文字コード変換のproxyを作りた...
-
ACCESS2000→ACCESS97に変換した...
-
SJIS->UTF8->SJISコード変換に...
-
ローマ字からカナに変換する方...
-
エクセルでの漢字(全角ひらが...
-
改行を含んだ文字列を正規表現...
-
SQLのデータで半角カナを全角に...
-
JISとシフトJIS
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
IEからEdgeへの移行に伴うIMEの...
-
住宅にカナを入力する際に丁目...
-
VBA 文字に半角が含まれて...
-
カートの送料設定を2個まで1個...
-
以下のperlのプログラムについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでPDFファイルをMicro...
-
CString から LPCTSTRの型に変換
-
文字コードの%E3%80%とは何です...
-
CString型からdouble型への変換
-
SQLのデータで半角カナを全角に...
-
ローマ字からカナに変換する方...
-
Delphiの型変換
-
VBScript 全角英数記号→半角英...
-
SJIS->UTF8->SJISコード変換に...
-
テキストをhtml変換するには
-
漢数字の変換
-
Encode.pmで「髙」(ハシゴ高)...
-
VBScript文字列をSJISからUTF8...
-
vbwide(半角⇒全角変換)について
-
文字列を quoted-printable 文...
-
エクセルでの漢字(全角ひらが...
-
oracle10g eucのblobをsjisのch...
-
漢字からカタカナ変換マクロ
-
VB6にも「ToString」ってあり...
-
goo blogでyou tube を埋め込む...
おすすめ情報