• ベストアンサー

ファイルメーカーで名前のよみからアルファベットをつくる方法について。

初めての試みで、小さな会社のデータベースを作ろうとしています。顧客の名前を入力した際、ふりがなを生成するようにしていますが、これをアルファベット表記に変換する、関数あるいは方法を知りたいのですが。目的は、そのアルファベットから取り出した文字をランダムに組み合わせて7桁のパスワードを作ることです。(5.5J使用)ご教授いただければ助かります。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nml
  • ベストアンサー率20% (4/20)
回答No.9

アルファベットへの変換ですが、 #1の方法とは別に、 フィールド「ひらがな」(グローバル・テキスト) (内容)あいうえおかきくけこ・・・(連続して) フィールド「alphabet」(グローバル・テキスト) (内容)a i u e o ka ki ku ke ko ...(スペースで区切って) として、 フィールド設定[ アルファベット, "" ] フィールド設定[ ワーク, TrimAll(ふりがな, 1, 0) ] フィールド設定[ 長さ, Length(ワーク) ] フィールド設定[ 文字位置, 1 ] Loop Exit Loop If [ Length(ワーク) < 文字位置] フィールド設定[ アルファベット, アルファベット& MiddleWords(alphabet, Position(ひらがな, Middle(ワーク, 文字位置, 1), 1, 1), 1) ] フィールド設定[ 文字位置, 文字位置+ 1 ] End Loop という手もあります。 ただし、拗音などがうまく変換できません。 でも、パスワード生成には厳密に変換できなくてもOKではないでしょうか。 いずれにしてもあまりご希望どおりにはいかないかもしれません。

その他の回答 (9)

  • nml
  • ベストアンサー率20% (4/20)
回答No.10

より詳しい方々に質問されるのであれば、「ファイルメーカーユーザのページ」のメーリングリストに参加されることをおすすめします。

参考URL:
http://www.ogawa.tokushima.tokushima.jp/~fmjuser/
allalone
質問者

お礼

手取り足取りありがとうございます。早速参加してみます。

  • nml
  • ベストアンサー率20% (4/20)
回答No.8

私の知る範囲では無理です。 修飾キー(shiftなど)は取れるようですが、ローマ字キーは取れないと思います。 もしかしたらプラグインや外部関数などがあるのかもしれません。 ファイルメーカーの長所は単純であることだと思っています。私も使い始めは「なんでこんなこともできないの?」と思うことがたびたびありました。でも、深みにはまりにくい(私はAccessで深みにはまってなかなか抜けられなくなりました。お恥ずかしい...。)のがよいところです。マニアックになりにくい分、いざというときに初心者にも引き継げますし。 俳句のように17文字の制約のなかで、四苦八苦するものと割り切って使用しています。

  • nml
  • ベストアンサー率20% (4/20)
回答No.7

#6の訂正です。間違いが多くてごめんなさい。 (いつも試行錯誤の毎日です。) フィールド設定[アルファベット,*1]  の部分は ↓ フィールド設定[パスワード,*1]    です。

allalone
質問者

お礼

たくさんのご解答をいただき、ありがとうございます。失礼を承知で再度お尋ねしたいのですが、ローマ字入力時のキーをそのまま値とできれば、さらによいかと思うのですが、実現はファイルメーカーだけでは不可能なのでしょうか?お手数ですが、よろしければご解答くださいませ。

  • nml
  • ベストアンサー率20% (4/20)
回答No.6

#5よりもっと単純に フィールド設定[アルファベット,*1] *1の内容 Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) & Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) & Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) & Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) & Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) & Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) & Middle(アルファベット,Int(Random * Length(アルファベット) + 1),1) でも可能です。

  • nml
  • ベストアンサー率20% (4/20)
回答No.5

#4の補足です。 7桁にする部分を見落としていました。 無理にすべての文字をランダムに並べかえなくても、単純にランダムに選択していけばよいだけかもしれません。 フィールド定義の「ワーク」は使用せず、「残りの長さ」を単に「長さ」として、 スクリプトは、 フィールド設定[「パスワード」,「""」] フィールド設定[「長さ」,「1」] Loop Exit Loop if[「長さ > 7」] フィールド設定[「文字位置」,「Int(Random * Length(アルファベット) + 1)」] フィールド設定[「パスワード」,「パスワード & Middle(アルファベット,文字位置,1)」] フィールド設定[「長さ」,「長さ + 1」] End Loop

  • nml
  • ベストアンサー率20% (4/20)
回答No.4

パスワードを作る部分については、 フィールド定義が以下の通りで、ふりがなからアルファベットに変換済みとすると、 「ふりがな」   (テキスト) 「アルファベット」(テキスト) 「パスワード」  (テキスト) 「ワーク」    (テキスト) 「残りの長さ」  (数字またはグローバル) 「文字位置」   (数字またはグローバル) スクリプトは、 フィールド設定[「パスワード」,「""」] フィールド設定[「ワーク」,「アルファベット」] フィールド設定[「残りの長さ」,「Length(ワーク)」] Loop Exit Loop if[「残りの長さ < 1」] フィールド設定[「文字位置」,「Int(Random * 残りの長さ + 1)」] フィールド設定[「パスワード」,「パスワード & Middle(ワーク,文字位置,1)」] フィールド設定[「ワーク」,「Left(ワーク, 文字位置 - 1) & Right(ワーク, 残りの長さ - 1)」] フィールド設定[「残りの長さ」,「Length(ワーク)」] End Loop というのではどうでしょうか? まず「アルファベット」を「ワーク」に移し、「ワーク」からランダム関数で1文字ずつ「アルファベット」に移していくという考えかたです。 空白とかは考慮していません。 TrimAll関数などで調整してください。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

ファイルメーカーのファイルをエクセルにインポートできるかどうかわかりませんが、出来るとして、 エクセルVBAでやって見ました。 (1)変換表の作成準備(Sheet1のA,B列) Sub test03() For i = 1 To 84 Cells(i, 1) = Chr(-32098 + i) Next i End Sub を実行するとSheet1のA列に全角ひらがな文字がセットできます。 B列に対応したローマ字を自分で入力します。例えば「か」の行にはkaと入れる。数分で入力できました。 (2)Sheet3のA列からひらがな名が入っているとして 下記を実行すると、B列に対応したローマ字が出ます。 Sub test04() Worksheets("sheet3").Activate d = Range("a1").CurrentRegion.Rows.Count For i = 1 To d s = "" c = Worksheets("sheet3").Cells(i, 1) ' MsgBox c For j = 1 To Len(c) m = Mid(c, j, 1) If m = " " Then s = s & " " Else r = Asc(m) + 32098 s = s & Worksheets("sheet1").Cells(r, 2) End If Next j Worksheets("sheet3").Cells(i, 2) = s Next i End Sub テストが充分でなく、特殊な場合にバグがあるかも知れませんが、出来そうだと言うことでご参考までに。 はっ音、拗音の字は、名前にあまり無いだろうと、考慮外です。締めきりを気にしつつ、取り急ぎ。

allalone
質問者

お礼

お持ち合わせの知識で善意あふれるご解答をいただき感謝いたします。VBAの経験もないのですが、後学のため大切にさせていただきます。

  • nml
  • ベストアンサー率20% (4/20)
回答No.2

#1の訂正です。 濁音、半濁音・・・の部分は無視してください。勘違いでした。

  • nml
  • ベストアンサー率20% (4/20)
回答No.1

確かアルファベットに変換する関数はなかったように記憶しております。 方法としては、 「ふりがな」フィールドから「アルファベット」フィールドにスクリプトで変換することが考えられます。 フィールド設定[「アルファベット」,「ふりがな」] フィールド設定[「アルファベット」,「Substitute(アルファベット,"あ","a")」] フィールド設定[「アルファベット」,「Substitute(アルファベット,"い","i")」] フィールド設定[「アルファベット」,「Substitute(アルファベット,"う","u")」] フィールド設定[「アルファベット」,「Substitute(アルファベット,"え","e")」] フィールド設定[「アルファベット」,「Substitute(アルファベット,"お","o")」] : フィールド設定[「アルファベット」,「Substitute(アルファベット,"ん","n")」] というのはどうでしょうか? この場合、濁音や半濁音を先に置換する必要があります。 ただし、あまりスマートな方法ではないのでお勧めはできません。

allalone
質問者

お礼

日本語のよみをローマ字に変換するような関数、ありそうでないのに納得がいかなかったのです。スマートかそうでないかは私にはわかりませんが、確実な方法です。キー入力のとおりを値にする関数(?)とかないものかと探していましたが、これで事足ります。既存の関数をなんとか応用したり組み合わせたりするのが、この種の作業の最も難しいところですね。本当にありがとうございました。・・・後は、指定の桁数内で文字をシャッフルしてパスワードにすることですが・・・。

関連するQ&A