[[20041216130407]] 『phoneticで、カナが出ない場合があります』(うす) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『phoneticで、カナが出ない場合があります』(うす)

[phoneticは、たまに他のシ-ト等から貼付けをするとかなが出ない場合がありますが、これはもうどうしようもないのでしょうか>]


 掲示板などから貼り付けた場合には、文字がフリガナを持ってない場合がありますので、
 標準関数では出ない場合があります。
 ユーザ定義関数であればこんなことで可能になります。

 '=============ここから=============
 Option Explicit
 Function MYFURI(ByVal Target As Range) As String
    MYFURI = StrConv(Application.GetPhonetic(Target.Value), 8)
 End Function
 '=============ここまで=============

 'vbWide*      4*   文字列内の半角文字 (1 バイト) を全角文字 (2 バイト) に変換します。
 'vbNarrow*    8*   文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。
 'vbKatakana** 16** 文字列内のひらがなをカタカナに変換します。
 'vbHiragana** 32   文字列内のカタカナをひらがなに変換します。

 使い方は普通の関数同様に、 =MYFURI(A1) などと入力。(A1のフリガナ取得)

 コード中の8を4に代えると全角カタカナになります。

 (川野鮎太郎)

 >コード中の8を4に代えると全角カタカナになります。
できれば数値を直接記載するよりは、
vbWideやvbNarrowといった定数をそのまま書いた方が良いです。
結果は一緒なんだけどね。
利点は
・意味が分かりやすい
・定数値の意味が変わった場合に修正が不要(ただ、過去例は無いと思うが)
 
定数使用を推奨する一番分かりやすい例が、vbNewLineですか。
WinならCrLfの意味になり、MacだとCrの意味になる。はず。
#他レスでのフォローありがとうでした
(ご近所PG)


 そこなんですよね〜。
 アップするときどっちにしようか迷ったんですよ。
 別スレでご近所さんがvbNarrowってされてましたよね。
 ここでもそっちにしようかと迷ったので、一応対応表を載せておきました。
 >WinならCrLfの意味になり、MacだとCrの意味になる。はず。
 なるほど、OSによってというか、エクセルのバージョンによっても変わる事があるんですね。
 だから改行コードも& vbCrLf & って感じだったんですね。
 いつも丁寧な説明ありがとうございます。m(._.)m ペコッ

 ふと思ったことを追加
 上記のことからすると、InputBoxやMsgBoxなども同様にvbYesNo等の定数を使ったほうが良いってことですね。
 (川野鮎太郎)

 ただよくよく考えてみると、
Excelはいまだに2000どころか97などの古いバージョンも現役だったりするので、
一概に「全て定数にせよ」とは言い切れない部分もあるのかも。
基本的にバージョンアップする際には問題ないけど、
新しいバージョンにしか定義されていない定数とかあったら
バージョンダウンする際にエラーになるだろうし…
具体的な例は示せませんが。
追記:それによってバージョンダウンにおける問題箇所を事前に把握できるというのもまた利点かも…どっちやねん(笑)
 
vbNewLineはWinとMac両方で使う可能性があるExcelVBAだからこそ生まれた定数だったりするんでしょうね。
 
以上雑文でした。
 
そして衝突。
 >上記のことからすると、InputBoxやMsgBoxなども同様にvbYesNo等の定数を使ったほうが良いってことですね。
以下の書き方でどっちが分かりやすいか。
自明。
定数を推奨する理由の最たるものです。
Sub test1()
    If MsgBox("yes or no?", vbYesNo + vbQuestion) = vbYes Then
        MsgBox "yes"
    Else
        MsgBox "no"
    End If
End Sub
Sub test2()
    If MsgBox("yes or no?", 4 + 32) = 6 Then
        MsgBox "yes"
    Else
        MsgBox "no"
    End If
End Sub
(ご近所PG)


 ふむふむ、_〆\(..;) メモメモ
 な〜るほど、ザわーるど。(古
 判りやすい例題をありがとうございます。^^
 (川野鮎太郎)

遅れて申し訳ございませんが、ご丁寧にありがとうございます。
かなり複雑なので、かなりしんどいです。
勉強します。
ちなみにwin97を使用しております。
今回質問したのは、accessからexcelに会社名を貼りつけて五十音順にしたかったので、質問しました。
ご近所さんのvbaを貼りつけてみます。


 !?工エエェ(゚〇゚ ;)ェエエ工!? ご近所さんのは、フリガナ取得用じゃないですよ_/ ̄|○ il||li
 これで試してください。m(._.)m ペコッ

 Option Explicit
 Function MYFURI(ByVal Target As Range) As String
    MYFURI = StrConv(Application.GetPhonetic(Target.Value), vbNarrow)
 End Function

 マクロのコードは↑だけです。

 ワークシートで =MYFURI(A1) などと入力。(A1のフリガナ取得)

 (川野鮎太郎)

ありがとうございます。
マクロに貼り付けると、マクロ名を入れないといけないみたいなので下記のようになってしまいます。

 Sub A()    ←消してください。
Option Explicit
 Function MYFURI(ByVal Target As Range) As String
    MYFURI = StrConv(Application.GetPhonetic(Target.Value), vbNarrow)
 End Function
End Sub     ←消してください。

(うす)


 上のように^^
 (川野鮎太郎)

お早いご回答ありがとうござ一ます
昨日回答頂いて、昨日中にやってみましたが、削除するとプロシ-ジャ名が無効となります。
マクロのやり方に問題があるのでしょうか?


 (*'ω'*)......ん?どこに貼り付けましたか?
 挿入−標準モジュールに入れてみてください。
 もしかして、97には対応してないのかな・・・。_/ ̄|○ il||li

 Option Explicit Function MYFURI(ByVal Target As Range) As String
 ↑こんな感じでつながってたらダメですから、
 Option Explicit
 Function MYFURI(ByVal Target As Range) As String
 2行にしないとダメですけど。

 または、Option Explicit ←も消したらどうなりますかね。
 (川野鮎太郎)

なんどもすいません。
標準モジュ-ルに貼りつけた後に、実行すると必ずマクロ名を指定されます。
マクロの実行のやり方は、実行かよこ▼であると思いますが・・・


 今回のはユーザー定義関数ですので、マクロの実行は必要ありませんよ。
 上記のコードを標準モジュールに貼り付けてた、ワークシートで普通の関数のように使ってください。
 その際のかんすうめいが MYFURI なのです。
 ですから A1セルのフリガナを取得する場合に =MYFURI(A1) です。
 (川野鮎太郎)

ありがとうございます。
家のPCで試してみます。
会社のは古いもので。
MYFURIが使用できない気がします


 多分大丈夫だと思いますけどね(^_^A;
 (川野鮎太郎)

 もう既にご理解いただいたかと思いますが
 >>ご近所さんのvbaを貼りつけてみます。
 >ご近所さんのは、フリガナ取得用じゃないですよ
と、川野鮎太郎さんも上記のように書いている通り、
私の提示しているコードはご質問内容に対する回答ではなく、
単なるマクロに関する雑文ですので…私が書いたVBA等の部分は無視してください。
失礼しました。
(ご近所PG)要らん事書くのが好きなのょ…


 ( ̄0 ̄;アッ そう言えば・・・・・、
 GetPhonetic関数はExcel2000からの機能だったような気がするな_/ ̄|○ il||li
 (川野鮎太郎)

 ↑そのとおりです。(みやほりん)


 やはりそうでしたか。_/ ̄|○ il||li
 確認ありがとうございます。m(._.)m ペコッ
 (川野鮎太郎)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.