Page 322 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼名前を数値化したい 坊や哲 03/6/29(日) 17:20 ┗Re:名前を数値化したい こうちゃん 03/6/30(月) 9:27 ┗Re:名前を数値化したい 坊や哲 03/6/30(月) 19:59 ┗モジュールに貼り付けます こうちゃん 03/6/30(月) 20:22 ┗Re:モジュールに貼り付けます 坊や哲 03/6/30(月) 20:47 ┗関数はクエリでも使えます こうちゃん 03/7/1(火) 8:29 ┣Re:関数はクエリでも使えます 坊や哲 03/7/1(火) 22:17 ┗Re:関数はクエリでも使えます 坊や哲 03/7/1(火) 22:57 ┗Re:関数はクエリでも使えます こうちゃん 03/7/2(水) 8:43 ┗Re:関数はクエリでも使えます 坊や哲 03/7/3(木) 6:42 ─────────────────────────────────────── ■題名 : 名前を数値化したい ■名前 : 坊や哲 <k-suga@rc4.so-net.ne.jp> ■日付 : 03/6/29(日) 17:20 -------------------------------------------------------------------------
初めて質問させて頂きます。 名前のフリガナを利用して 例えばあ行なら1,か行なら2,さ行なら3・・ら行なら9という風に数値に変換するにはどうすればいいのでしょうか。その場合姓と名はスペースで区別し,それぞれ前から4文字目まで返還することとします。そして,変換対称がない場合は0とします。 例えば「ヤマダ タロウ」の場合,「8740 4910」となるようにしたいのですが・・・ご助言よろしくお願いします。 |
坊や哲さん、こんにちは >初めて質問させて頂きます。 >名前のフリガナを利用して >例えばあ行なら1,か行なら2,さ行なら3・・ら行なら9という風に数値に変換するにはどうすればいいのでしょうか。その場合姓と名はスペースで区別し,それぞれ前から4文字目まで返還することとします。そして,変換対称がない場合は0とします。 >例えば「ヤマダ タロウ」の場合,「8740 4910」となるようにしたいのですが・・・ご助言よろしくお願いします。 ベタですが、関数作ってみました。お試しください。(ひらがなでもいけると思います) ところで、ワ行はどうします?仕様では「ら行なら9」までしか決まってないようなのでとりあえず「0」としています。 Msgbox Kana2Num("ヤマダ タロウ") Function Kana2Num(strName As String) Dim StrTemp As String Dim NumTemp As String Dim SplStr As Variant Dim OneStrAsc As Integer Dim i As Integer Dim j As Integer 'データチェック(スペースの区切りがなければ戻る) SplStr = Split(strName, " ") If Not IsArray(SplStr) Then Kana2Num = strName Exit Function End If '半角カタカナに変換して濁音、半濁音を除く StrTemp = Replace(Replace(StrConv(StrConv(strName, vbKatakana), vbNarrow), "゙", ""), "゚", "") SplStr = Split(StrTemp, " ") For i = 0 To 1 For j = 1 To Len(SplStr(i)) OneStrAsc = Asc(Mid(SplStr(i), j, 1)) 'ア行〜マ行 If OneStrAsc >= 177 And OneStrAsc <= 211 Then NumTemp = NumTemp & CStr((OneStrAsc - 177) \ 5 + 1) 'ヤ行 ElseIf OneStrAsc >= 212 And OneStrAsc <= 214 Then NumTemp = NumTemp & "8" 'ラ行 ElseIf OneStrAsc >= 215 And OneStrAsc <= 219 Then NumTemp = NumTemp & "9" 'ヲワン ' ElseIf OneStrAsc = 166 Or OneStrAsc = 220 Or OneStrAsc = 221 Then ' NumTemp = NumTemp & "0" Else NumTemp = NumTemp & "0" End If Next NumTemp = NumTemp & String(4 - Len(SplStr(i)), "0") If i = 0 Then NumTemp = NumTemp & " " Next Kana2Num = NumTemp End Function |
▼こうちゃん さん: 早速回答ありがとうございます! ところで,私のような素人には,この関数をAccessの中でどのように 使えば活用できるかがわかりません。ご助言下さい。 あと,わ行は8に変換します。 >ベタですが、関数作ってみました。お試しください。(ひらがなでもいけると思います) >ところで、ワ行はどうします?仕様では「ら行なら9」までしか決まってないようなのでとりあえず「0」としています。 > >Msgbox Kana2Num("ヤマダ タロウ") > >Function Kana2Num(strName As String) > > Dim StrTemp As String > Dim NumTemp As String > Dim SplStr As Variant > Dim OneStrAsc As Integer > Dim i As Integer > Dim j As Integer > > 'データチェック(スペースの区切りがなければ戻る) > SplStr = Split(strName, " ") > If Not IsArray(SplStr) Then > Kana2Num = strName > Exit Function > End If > > '半角カタカナに変換して濁音、半濁音を除く > StrTemp = Replace(Replace(StrConv(StrConv(strName, vbKatakana), vbNarrow), "゙", ""), "゚", "") > SplStr = Split(StrTemp, " ") > For i = 0 To 1 > For j = 1 To Len(SplStr(i)) > OneStrAsc = Asc(Mid(SplStr(i), j, 1)) > 'ア行〜マ行 > If OneStrAsc >= 177 And OneStrAsc <= 211 Then > NumTemp = NumTemp & CStr((OneStrAsc - 177) \ 5 + 1) > 'ヤ行 > ElseIf OneStrAsc >= 212 And OneStrAsc <= 214 Then > NumTemp = NumTemp & "8" > 'ラ行 > ElseIf OneStrAsc >= 215 And OneStrAsc <= 219 Then > NumTemp = NumTemp & "9" > 'ヲワン >' ElseIf OneStrAsc = 166 Or OneStrAsc = 220 Or OneStrAsc = 221 Then >' NumTemp = NumTemp & "0" > Else > NumTemp = NumTemp & "0" > End If > Next > NumTemp = NumTemp & String(4 - Len(SplStr(i)), "0") > If i = 0 Then NumTemp = NumTemp & " " > Next > Kana2Num = NumTemp >End Function |
坊や哲さん、こんにちは ノガミの建こと、こうちゃんです^^; #マンガだけのひとには分かりづらいか?^^;閑話休題 データベースウィンドウでモジュールを新規作成して、FunctionからEnd Functionをコピペしてください。 あとは普通の関数を呼び出すのと同様に使います。 Msgbox Kana2Num("ヤマダ タロウ") これは呼び出しの例で書いてあります。 具体的にはどこで変換したいのでしょうか? 仕様をもう少し明確にしていただくと答えやすいのですが・・ #ワ行は仮に作ってありますので、コメントをはずして0を8に変えてください。 (ヤ行と同じですが、いいんですよね?) 'ヲワン ElseIf OneStrAsc = 166 Or OneStrAsc = 220 Or OneStrAsc = 221 Then NumTemp = NumTemp & "8" |
▼こうちゃん さん: 迅速な回答ありがとうございます。 具体的には,新たにフィールドを作り, そこにフリガナを数値変換した結果をいれたいのです。 ちなみに数値のことを我々の業界では換数とよんでいます。 |
▼坊や哲 さん: >▼こうちゃん さん: >迅速な回答ありがとうございます。 >具体的には,新たにフィールドを作り, >そこにフリガナを数値変換した結果をいれたいのです。 >ちなみに数値のことを我々の業界では換数とよんでいます。 標準モジュールに関数を貼り付けておいて、クエリを作ります。 式を 式1: Kana2Num([f2]) のように指定します。[f2]は変換したいフリガナのフィールドを指定してください。 なお、前の関数では、区切りスペースが全角の場合変換できませんので、関数の冒頭部分を以下と差し替えてください。 '半角カタカナに変換して濁音、半濁音を除く StrTemp = Replace(Replace(StrConv(StrConv(strName, vbKatakana), vbNarrow), "゙", ""), "゚", "") SplStr = Split(StrTemp, " ") 'データチェック(スペースの区切りがなければ戻る) If Not IsArray(SplStr) Or UBound(SplStr) < 1 Then Kana2Num = strName Exit Function End If |
こうちゃん様 ありがとうございます!! これで換数変換できました。 ただ,あと一点問題があります。 それは,姓または名が5文字以上の人 たとえば「あやのこうじ そういちろう」 のような人の場合, NumTemp = NumTemp & String(4 - Len(SplStr(i)), "0") でエラーが出てしまいます。どうすればいいのでしょうか? |
▼こうちゃん さん: あと,なぜかや行が8ではなく0に変換されてしまいます。 この177から221の数字はなんですか? 教えて頂けたら調べて自分で設定したいんですが・・ |
坊や哲さん、こんにちは >この177から221の数字はなんですか? >教えて頂けたら調べて自分で設定したいんですが・・ アスキーコードです。 文字(記号)にはコードが振られています。半角文字ではアスキーコードと呼ばれるコードが標準的に使われます。 今回の関数では文字をアスキーコードで振り分けて数値化しています。 HELPで「ASCII文字セット(128-255)」を検索してみてください。 >あと,なぜかや行が8ではなく0に変換されてしまいます。 こちらは原因不明です。当方の試験では8に変換されています。 4文字以上の処理が間違っておりました。 関数を少々補正しましたので、こちらでお試しください。 (ワ行の処理も加えてあります) Function Kana2Num(strName As String) Dim StrTemp As String Dim NumTemp As String Dim SplStr As Variant Dim OneStrAsc As Integer Dim i As Integer Dim j As Integer Dim LoopCount As Integer 'データチェック(スペースの区切りがなければ戻る) SplStr = Split(strName, " ") If Not IsArray(SplStr) Then Kana2Num = strName Exit Function End If '半角カタカナに変換して濁音、半濁音を除く StrTemp = Replace(Replace(StrConv(StrConv(strName, vbKatakana), vbNarrow), "゙", ""), "゚", "") SplStr = Split(StrTemp, " ") For i = 0 To 1 If Len(SplStr(i)) > 4 Then LoopCount = 4 Else LoopCount = Len(SplStr(i)) End If For j = 1 To LoopCount OneStrAsc = Asc(Mid(SplStr(i), j, 1)) 'ア行〜マ行 If OneStrAsc >= 177 And OneStrAsc <= 211 Then NumTemp = NumTemp & CStr((OneStrAsc - 177) \ 5 + 1) 'ヤ行 ElseIf OneStrAsc >= 212 And OneStrAsc <= 214 Then NumTemp = NumTemp & "8" 'ラ行 ElseIf OneStrAsc >= 215 And OneStrAsc <= 219 Then NumTemp = NumTemp & "9" 'ヲワン ElseIf OneStrAsc = 166 Or OneStrAsc = 220 Or OneStrAsc = 221 Then NumTemp = NumTemp & "8" Else NumTemp = NumTemp & "0" End If Next If Len(NumTemp) < 4 Then NumTemp = NumTemp & String(4 - Len(SplStr(i)), "0") End If If i = 0 Then NumTemp = NumTemp & " " Next If Len(NumTemp) < 9 Then NumTemp = NumTemp & String(9 - Len(NumTemp), "0") End If Kana2Num = NumTemp End Function |
▼こうちゃん さん: いつも迅速な対応ありがとうございます!! 「ッ」や「ャ,ュ,ョ」などの変換ができませんでしたが コードを教えて頂いたので,これくらいは自分でできました。 これで,完璧だと思います。すごいですね。 本当にありがとうございました。 |