遊:ひらがなを数字にする

47進いろは記数法というのがありますが
いまさら「いろはにほへと」って、、

一応簡単に「47進いろは記数法」を紹介

 ABCDE
1
2数値ひらがなカタカナ
31
42
53
64
75
86
97
108
119
1210
1311
1412
1513
1614
1715
1816
1917
2018
2119
2220
2321
2422
2523
2624
2725
2826
2927
3028
3129
3230
3331
3432
3533
3634
3735
3836
3937
4038
4139
4240
4341
4442
4543
4644
4745
4846
490
50

N進法の考え方では
2進数、8進数、16進数、60進数、すべて0から始まります
「47進いろは記数法」は47進数ではなく記数法になります

いろは48文字ですが
数えるときに0.1,2,3とは数えません
1から始めて1,2,3と数えます
1文字目、2文字目、3文字目と数えるからです
だが0が無いのはおかしいので最後の文字を0にしています

小数点「.」は「。」になります
「ん」はいろはにありませんから「す」と同じ「0」になります
濁音(がぎぐ)半濁音(ぱぴぷ)拗音(きゃきゅきょ)促音(っ)は
濁点などが付いていない元の文字と同じものとして扱われます。


本題に戻ります

50音を表にして行と列で表す方法

旧 五十音図
 ABCDEFGHIJKLM
1
2
3
4
5
6

「や行」と「わ行」に今はあまり使われない文字が含まれ
「ん」が別の列になります
これでは使えないので新しい五十音図を使います

 ABCDEFGHIJKLM
1
2 12345678910
31
42
53
64
75
8

「お」縦「5」横「1」なので「51」
「は」縦「1」横「6」なので「16」
「よ」縦「5」横「8」なので「58」
「う」縦「3」横「1」なので「31」

「おはよう」⇒「51165831」

これをエクセルで取得します
参照関数のVLOOKUP関数かHLOOKUP関数ですが
先に縦で次に横なので
VLOOKUP関数を使います
・関数 VLOOKUP
・書式 =VLOOKUP(検索値,範囲,列番号,検索の型)
・内容 指定された範囲の左端の列で特定の値を検索し、範囲内の対応するセルの値を返します。
「お」縦「5」横「1」の「51」の場合
縦「5」→ 検索値
横「1」→ 列番号+1
=VLOOKUP(5,B2:L7,2,0) 結果:お

数値の取得方法はMID関数を使います
・関数 MID
・書式 =MID(文字列,開始位置,文字数)
・内容 文字列の任意の位置から指定された文字数の文字を返します。半角と全角の区別しません。
1文字目)=MID(51165831,1,1) 結果:5
2文字目)=MID(51165831,2,1) 結果:1
3文字目)=MID(51165831,3,1) 結果:1
4文字目)=MID(51165831,4,1) 結果:6

このMID()で取得したのはは文字列なので
VALUE()で数値化して「VALUE(MID(51165831,1,1))」とします
VLOOKUP()の検索値に当てはめます

1文字目)
=VLOOKUP(VALUE(MID(51165831,1,1)),B2:L7,VALUE(MID(51165831,2,1))+1,0)
 結果:お
2文字目)
=VLOOKUP(VALUE(MID(51165831,3,1)),B2:L7,VALUE(MID(51165831,4,1))+1,0)
 結果:は
3文字目)
=VLOOKUP(VALUE(MID(51165831,5,1)),B2:L7,VALUE(MID(51165831,6,1))+1,0)
 結果:よ
4文字目)
=VLOOKUP(VALUE(MID(51165831,7,1)),B2:L7,VALUE(MID(51165831,8,1))+1,0)
 結果:う

 ABCDEFGHIJKLM
1
2 12345678910
31
42
53
64
75
8
9 数値をひらがなに ひらがなを数値にする
10 数値 51165831 ひらがな おやすみ
11 ひらがな おはよう 数値 51183327
12

セルD11)セルD10の数値をひらがなに変換

236文字です

セルJ11)セルJ10のひらがなを数値に変換

1472文字です

ひらがなを数値にするには
表から抽出するとなると参照や検索関数の
VLOOKUPやHLOOKUP、SEARCH、INDEX、MATCHなどが考えられますが
VLOOKUPやMATCHは1列しか検索対象になりません
46文字ですから
あ=11
い=21
う=31
と1つづ定義した方が早いかもしれないが
エクセルっぽく関数を使ってみる

まず文字の取得はMID関数で
=MID("おやすみ",1,1) 結果:お
=MID("おやすみ",2,1) 結果:や
=MID("おやすみ",3,1) 結果:す
=MID("おやすみ",4,1) 結果:み
のように取得します

文字の検索は
VLOOKUPは左側取得できません
HLOOKUPは上を取得できません
なのでMATCH関数を使います

1行目から検索)=MATCH("や",C3:L3,0) 結果:8
2行目から検索)=MATCH("み",C4:L4,0) 結果:7
3行目から検索)=MATCH("ふ",C5:L5,0) 結果:6
4行目から検索)=MATCH("ね",C6:L6,0) 結果:5
5行目から検索)=MATCH("と",C7:L7,0) 結果:4

IFERRORを使ってエラー非表示でつなげれば1桁は取得できますが
何行目で取得したかは分かりませんので
IF関数とISERROR関数を使います
・関数IF
・書式=IF(論理式,真の場合,偽の場合)
・内容IF 関数を使用して値または数式が条件を満たしているかどうかをテストできます。
=IF(ISERROR(MATCH("や",C3:L3,0)),"","1"&MATCH("や",C3:L3,0))
これでひらがなが1行目に見つからない場合偽の場合に進みます

=IF(ISERROR(MATCH("み",C4:L4,0)),"","2"&MATCH("み",C4:L4,0))
=IF(ISERROR(MATCH("ふ",C5:L5,0)),"","3"&MATCH("ふ",C5:L5,0))
=IF(ISERROR(MATCH("ね",C6:L6,0)),"","4"&MATCH("ね",C6:L6,0))
=IF(ISERROR(MATCH("と",C7:L7,0)),"","5"&MATCH("と",C7:L7,0))

ひらがなの部分に1文字目の式を入れます
=IF(ISERROR(MATCH(MID(J10,1,1),C3:L3,0)),"","1"&MATCH(MID(J10,1,1),C3:L3,0))
=IF(ISERROR(MATCH(MID(J10,1,1),C4:L4,0)),"","2"&MATCH(MID(J10,1,1),C4:L4,0))
=IF(ISERROR(MATCH(MID(J10,1,1),C5:L5,0)),"","3"&MATCH(MID(J10,1,1),C5:L5,0))
=IF(ISERROR(MATCH(MID(J10,1,1),C6:L6,0)),"","4"&MATCH(MID(J10,1,1),C6:L6,0))
=IF(ISERROR(MATCH(MID(J10,1,1),C7:L7,0)),"","5"&MATCH(MID(J10,1,1),C7:L7,0))

上の5つの式を下から偽の場合に入れます


残念ながらこれで1文字分です
この中の文字取得分部MID(J10,1,1)10か所を
次の文字MID(J10,2,1)に書き換えます
MID(J10,3,1)、MID(J10,4,1)と続けます


1472文字です

やはり46文字くらいなら
あ=11
い=21
う=31
と1つづ定義した方が早かったかもしれない

以上 ひらがなを数字にするでした


おまけ

ひらがなを数値に変換
ひらがな:

数値をひらがなに変換
数値:

※変換できない数値は「**」アスタリスクになります
※変換できないひらがなは「〇」丸になります


TOPエクセルでポーカーを作ってみる
(C) 2001-2018 Digital World