過去ログ

                                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」となるようにしたいのですが・・・ご助言よろしくお願いします。

 ───────────────────────────────────────  ■題名 : Re:名前を数値化したい  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/6/30(月) 9:27  -------------------------------------------------------------------------
   坊や哲さん、こんにちは

>初めて質問させて頂きます。
>名前のフリガナを利用して
>例えばあ行なら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

 ───────────────────────────────────────  ■題名 : Re:名前を数値化したい  ■名前 : 坊や哲 <k-suga@rc4.so-net.ne.jp>  ■日付 : 03/6/30(月) 19:59  -------------------------------------------------------------------------
   ▼こうちゃん さん:
早速回答ありがとうございます!
ところで,私のような素人には,この関数を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

 ───────────────────────────────────────  ■題名 : モジュールに貼り付けます  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/6/30(月) 20:22  -------------------------------------------------------------------------
   坊や哲さん、こんにちは

ノガミの建こと、こうちゃんです^^;
#マンガだけのひとには分かりづらいか?^^;閑話休題

データベースウィンドウでモジュールを新規作成して、FunctionからEnd Functionをコピペしてください。
あとは普通の関数を呼び出すのと同様に使います。

Msgbox Kana2Num("ヤマダ タロウ")
これは呼び出しの例で書いてあります。

具体的にはどこで変換したいのでしょうか?
仕様をもう少し明確にしていただくと答えやすいのですが・・

#ワ行は仮に作ってありますので、コメントをはずして0を8に変えてください。
(ヤ行と同じですが、いいんですよね?)

      'ヲワン
      ElseIf OneStrAsc = 166 Or OneStrAsc = 220 Or OneStrAsc = 221 Then
        NumTemp = NumTemp & "8"

 ───────────────────────────────────────  ■題名 : Re:モジュールに貼り付けます  ■名前 : 坊や哲 <k-suga@rc4.so-net.ne.jp>  ■日付 : 03/6/30(月) 20:47  -------------------------------------------------------------------------
   ▼こうちゃん さん:
迅速な回答ありがとうございます。
具体的には,新たにフィールドを作り,
そこにフリガナを数値変換した結果をいれたいのです。
ちなみに数値のことを我々の業界では換数とよんでいます。

 ───────────────────────────────────────  ■題名 : 関数はクエリでも使えます  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/7/1(火) 8:29  -------------------------------------------------------------------------
   ▼坊や哲 さん:
>▼こうちゃん さん:
>迅速な回答ありがとうございます。
>具体的には,新たにフィールドを作り,
>そこにフリガナを数値変換した結果をいれたいのです。
>ちなみに数値のことを我々の業界では換数とよんでいます。

標準モジュールに関数を貼り付けておいて、クエリを作ります。

式を
式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

 ───────────────────────────────────────  ■題名 : Re:関数はクエリでも使えます  ■名前 : 坊や哲 <k-suga@rc4.so-net.ne.jp>  ■日付 : 03/7/1(火) 22:17  -------------------------------------------------------------------------
   こうちゃん様
ありがとうございます!!
これで換数変換できました。
ただ,あと一点問題があります。
それは,姓または名が5文字以上の人
たとえば「あやのこうじ そういちろう」
のような人の場合,
NumTemp = NumTemp & String(4 - Len(SplStr(i)), "0")
でエラーが出てしまいます。どうすればいいのでしょうか?

 ───────────────────────────────────────  ■題名 : Re:関数はクエリでも使えます  ■名前 : 坊や哲 <k-suga@rc4.so-net.ne.jp>  ■日付 : 03/7/1(火) 22:57  -------------------------------------------------------------------------
   ▼こうちゃん さん:
あと,なぜかや行が8ではなく0に変換されてしまいます。
この177から221の数字はなんですか?
教えて頂けたら調べて自分で設定したいんですが・・

 ───────────────────────────────────────  ■題名 : Re:関数はクエリでも使えます  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/7/2(水) 8:43  -------------------------------------------------------------------------
   坊や哲さん、こんにちは

>この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

 ───────────────────────────────────────  ■題名 : Re:関数はクエリでも使えます  ■名前 : 坊や哲 <k-suga@rc4.so-net.ne.jp>  ■日付 : 03/7/3(木) 6:42  -------------------------------------------------------------------------
   ▼こうちゃん さん:

いつも迅速な対応ありがとうございます!!
「ッ」や「ャ,ュ,ョ」などの変換ができませんでしたが
コードを教えて頂いたので,これくらいは自分でできました。

これで,完璧だと思います。すごいですね。
本当にありがとうございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 322