[[20100605175219]] 『半角フリカナの抽出』(NISHIKI) ページの最後に飛ぶ

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

 

『半角フリカナの抽出』(NISHIKI)

 Sub hurikana()
  Range("B1") = Application.GetPhonetic(Range("A1"))
 End Sub
 上記コードでフリカナを抽出しますと全角になります。
 B列へ半角で抽出、あるいは変換したいのですがどのように記せばよろしいのかご教示ください。


  Sub hurikana()
  Range("B1").value = StrConv(Application.GetPhonetic(Range("A1").value), vbNarrow)
 End Sub
 (a) 

 ご教示ありがとうございます。

 ちょっと気になったので・・・・。半角変換は、StrConvでよいとして・・・。

 Range("B1") = Application.GetPhonetic(Range("A1").value)

 このGetPhoneticメソッドについてです。

 セルA1に設定されたフリガナを引用しているわけではないので本来の読みとは違う表示となる
 可能性がありますが、これはかまわないのですか?

 これが、セルA1の漢字が、別のアプリからコピーしてきた場合は、
 セルA1には、フリガナが設定されていないので逆に、読みが違う場合があってもフリガナを表示してくれるので便利なのですが・・・。

 セルA1に設定されているフリガナをB1に表示するなら、

 Sub test1()
    Range("B1").Value = StrConv(Application.Phonetic(Range("A1").Value), vbNarrow + vbKatakana)
 End Sub

 または、

 Sub test2()
    Range("a1").Phonetics.CharacterType = xlKatakanaHalf
    Range("b1").Formula = "=phonetic(a1)"
 End Sub

 こんな方法も考えられます。

 どっちのPhoneticが仕様に合っていますか? 検討してみてください。

 何も入力されいないシートをアクティブにした状態で、以下のsampを実行した結果も検討してみてください。

 Sub samp()
    Dim a1 As Range
    Dim b1 As Range
    Set a1 = Range("a1")
    Set b1 = Range("b1")
    a1.Value = "相田達郎"
    MsgBox "セルA1の「相田達郎」に対して、GetPhoneticメソッドを使うと・・・"
    b1.Value = StrConv(Application.GetPhonetic(Range("A1").Value), vbNarrow)
    MsgBox "セルB1に、フリガナが表示されます。確認してください"
    a1.ClearContents
    b1.ClearContents
    MsgBox "セルA1、B1をクリアしました。この状態で、セルA1内容に対してGetPhoneticメソッドを使うと・・・"
    b1.Value = StrConv(Application.GetPhonetic(Range("A1").Value), vbNarrow)
    MsgBox "あれっ ですよね?"
 End Sub

 ichinose@本日、忘れかけてたナンキン結びを練習、おかげで手が豆だらけ・・


 ichinoseさま、ありがとうございます。

 根本がコンポンと表示され、追加質問をしようと思っておりました。
 test1()は「型が一致しません」とエラーになります。
 test2()は半角カタカナで表示されました。

 Private Sub Worksheet_Change(ByVal Target As Range)
   Dim a As Range
   Dim b As Range
   Set a = Target.Offset(0, 0)
   Set b = Target.Offset(0, 1)
   If Target.Column <> 1 Then Exit Sub
     a.Phonetics.CharacterType = xlKatakanaHalf
     b.Formula = "=phonetic(a)"
  End Sub
 としてみましたが、#NAME!のエラーとなります。"=phonetic(a)"のa部分はどのようにすればよろしいのでしょうか。
 c=Target.row
 ="phonetic(indirect(address(c,1)))"
 などともしてみましたが、そもそもWorksheet関数ですので変数cが機能するはずがありませんよね。

 samp()もa1.Value= "根本" ととして検証させていただきましたが、1度目のMsgBoxにはネモト、2度目の MsgBoxにはコンポンと表示されました。
 VBAに対しては本来?のフリカナがつき、クリアした後にはふりがな情報なくてもふりがなをふってくれる機能が働くという
 ことでしょうか。。。

 ◆他のアプリからコピーすることはありません。
      陽が昇ってしまいました。。。(NISHIKI)


 あれっ、修正して投稿したつもりだったんのですが・・・。

 Sub test1()
    Range("B1").Value = StrConv(Application.Phonetic(Range("A1")), vbNarrow + vbKatakana)
 '                                          Range("A1").Value --- Range("A1")
 End Sub

 です。

 >Private Sub Worksheet_Change(ByVal Target As Range)
 >  Dim a As Range
 >  Dim b As Range
 >  Set a = Target.Offset(0, 0)
 >  Set b = Target.Offset(0, 1)
 >  If Target.Column <> 1 Then Exit Sub
 >    a.Phonetics.CharacterType = xlKatakanaHalf
      b.Formula = "=phonetic(" & a.Address & ")"
 >End Sub

 としてみてください。

 ichinose

 追伸

 >VBAに対しては本来?のフリカナがつき、クリアした後にはふりがな情報なくてもふりがなをふってくれる機能が働く

 Getphoneticメソッドは、辞書ファイルを検索しているのだと思います。同じ漢字でも読みはいくつかあるので
 それを検索して返す機能を持っています。使い方をうまくすれば、結構役に立つメソッドですよ!!

 Sub test()
    Dim kanji As String
    Dim hurigana As String
    Dim g0 As Long
    kanji = "根本"
    MsgBox kanji & "  という漢字のフリガナ候補を表示します"
    hurigana = Application.GetPhonetic(kanji)
    Do Until hurigana = ""
       MsgBox "フリガナ候補" & g0 + 1 & "  : " & hurigana
       g0 = g0 + 1
       hurigana = Application.GetPhonetic()
    Loop
 End Sub

 上記のtestを実行すれば、わかると思います。

 ふりがなに変換するテキストを指定します。この引数を省略すると、以前に指定された引数 Text でのふりがな候補の文字列を返します。候補の文字列がない場合は空の文字列を返します。

 以上、GetphoneticのHelpからの引用です。

 で、問題は、この引数を省略しなくても、

 Sub test2()
    Dim kanji As String
    Dim hurigana As String
    Dim kara As String
    Dim g0 As Long
    kara = ""
    kanji = "根本"
    MsgBox kanji & "  という漢字のフリガナ候補を表示します"
    hurigana = Application.GetPhonetic(kanji)
    Do Until hurigana = ""
       MsgBox "フリガナ候補" & g0 + 1 & "  : " & hurigana
       g0 = g0 + 1
       hurigana = Application.GetPhonetic(kara)
    Loop
 End Sub

 引数に 空の文字列を指定しても同じ結果が得られてしまうことでしょうね?
 (仕様には、そう書いてないから・・・)

 ichinose


 ichinoseさま、いろいろとありがとうございます。
 おかげさまで、ご教示いただいた二通りとも半角フリカナ抽出することができました。
 また、追伸でのアドバイスについても検証させていただきます。

 修正されたコードに気がつかず、大変失礼いたしました。
 お詫び申し上げます。(NISHIKI)

コメント返信:

[ 一覧(最新更新順) ]


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