[[20040303163133]] 『フリガナ情報も一緒に』(ノン) >>BOT

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

 

『フリガナ情報も一緒に』(ノン)

初めて投稿します。
早速ですが、VBAで Na = Cells(Rowsh, 1) のようにセルの情報(文字列)を変数に格納して次に他のセルに入れた場合、フリガナ情報がなくなってしまいます。
何か良い方法はないでしょうか。

もう1つ、他の住所録などのアプリケーションからCSVでもってきた場合にもフリガナ情報がなくなり、その場合 .SetPhonetic などで強引にフリガナをつけることも出来ますが、同じ「上村」でも「ウエムラ」と読む人もいれば「カミムラ」と読む人もいるように思うように行きません。
それを最初に Phonetic などでフリガナを取り出し別の変数に格納しておき、セルに代入後その別の変数から元の文字にフリガナをつける方法が知りたいのです。

以上よろしくお願いします。


[[20040225000631]]『フリガナ編集について』(すみ)

 上記スレッドで回答したときに調べたのですが、
GetPhonetic メソッドでいったん元の語句からふりがなを抽出して変数に格納、
Phonetics コレクションのAdd メソッド で貼り付けた語句へふりがなを設定、
という手順になるのではないかと思います。
コードを書いて検証している時間がないので、ヘルプの
「Add メソッド (Phonetics コレクション) の使用例」を一度参照してみてく
ださい。ただ、ヘルプを読む限りでは語句ごとにふりがなを割り当てる必要があ
るようですが、単語がどこで区切られているかの判断が自動では大変難しいと思
われます。
語句の文字数全部を指定して設定する形だとIME再変換機能は当てに出来なくな
る可能性は大。
(KAMIYA)


(KAMIYA)さん早速の回答ありがとうございます。
まだ、Phonetics コレクションのAdd メソッドは勉強不足で試していませんが、ご指摘の

 Sub ふりがな編集()
Application.ScreenUpdating = False
For i = 1 To 200
Range("B" & i).Value = Application.GetPhonetic(Range("A" & i))
Next i
Application.ScreenUpdating = True
End Sub

を試しました。
通常IMEの候補から選んだフリガナは正常に抽出できるのですが、人名では「港」を(ハジメ)と読んだり、「慶満」を(ノブミツ)と読みます。この場合最初にフリガナ編集で書き換えた物がVBAを実行すると「港」は(コウ)、「慶満」は(ケイマン)となってしまいます。
これの解決策はあるのでしょうか。
よろしくお願いします。 (ノン)


 GetPhoneticは文字列からIMEの変換候補を引用するもののようです。
失礼いたしました。ろくに検証も出来ない状況なので、
勘違いをしていたようです。セルに入力されたふりがな情報は
Phoneticsコレクションから直接取得するようです。

 以下、ヘルプより
===============
Phonetics プロパティの使用例

次の使用例は、アクティブ セルのすべての Phonetic オブジェクトを表示します。

 Set objPhon = ActiveCell.Phonetics
With objPhon
    For Each objPhonItem in objPhon
        MsgBox "ふりがな : " & .Text
    Next
End With
===============
(KAMIYA)


お忙しい中、ご回答ありがとうございます。
先ほどのaddメソッドをヘルプを見ながら次のように試したところ成功しました。

Sub ふりがな付与テスト()

 Dim Na, Fu As String

 For i = 4 To 14
    Na = Cells(i, 1)
    Fu = Cells(i, 2)
    Cells(i, 4) = Na
    Cells(i, 4).Phonetics.Add Start:=1, Length:=3, Text:=Fu
 Next

End Sub

ありがとうございました。
ただ、勉強不足で回答いただいた例が良くわからないのです。
For to 〜 はわかりますが For Each objPhonItem in objPhon の意味が良くわかりません。お暇が出来てからで結構ですので使用例を記述していただけると助かります。
私もヘルプを参照しながらいろいろ試して見ますのでよろしくお願いします。


 先のヘルプのサンプルはWith End With が変ですね。
エラーになりますね。今見てみると明らかに間違いですね。

 For Each [ a ] in [ x ] 〜 Next構文は
「集合 x の中の構成要素[ a1 a2 a3 ....]のそれえぞれに対してFor〜Next間の
処理を行え」という命令文です。
集合を特定できてもその構成要素の数が不定のときなどは便利です。

 A1へ「千川勉」を「せんかわ」「つとむ」と区切って入力したとします。
A1のフリガナは「千川」「勉」という二組のアイテムとして記録されます。
このA1に対して下記のコードを実行します。

 Sub TEST_20040303a()
 Dim objPhon As Object
 Dim objPhonItem As Object
 Dim i As Integer

 Set objPhon = ActiveSheet.Range("A1").Phonetics
 i = 2
     For Each objPhonItem In objPhon
     ActiveSheet.Range("A" & i).Value = objPhonItem.Text
     i = i + 1
     Next

 End Sub

 結果は下記のようになります。
    A
 1 千川勉
 2 センカワ
 3 ツトム

 A1全部のフリガナを表すPhoneticsコレクションの中から
その構成要素である「センカワ」「ツトム」という二つの
Phoneticオブジェクトを抜き出すことが出来ました。

 しかし、そんなに厳密に取得するのではなくて、
「センカワツトム」というフリガナさえわかればいいんだよ、
という場合にはずっとすっきりした書き方で下記の様に出来ます。

  Sub TEST_20040303b()
 Dim objPhon As Object

 Set objPhon = ActiveSheet.Range("A1").Phonetic
 ActiveSheet.Range("A2").Value = objPhon.Text

 End Sub

    A
 1 千川勉
 2 センカワツトム

 これを踏まえて、A1の入力内容とフリガナをB1セルへ反映させるには
下記のようなコードでよいのではないかと思います。

  Sub TEST_20040303c()
 Range("B1").Value = Range("A1").Value
 Range("B1").Phonetic.Text = Range("A1").Phonetic.Text
 End Sub

 また語句の区切りや文節まで再現する場合は
下記のようになります。

 Sub TEST_20040303d()
 Dim objPhon As Object
 Dim objPhonItem As Object

 Set objPhon = Range("A1").Phonetics
 Range("B1").Value = Range("A1").Value
     For Each objPhonItem In objPhon
     Range("B1").Phonetics.Add _
                Start:=objPhonItem.Start, _
                Length:=objPhonItem.Length, _
                Text:=objPhonItem.Text
     Next objPhonItem
 End Sub

(KAMIYA) 


コメントが遅くなりすみません。
(KAMIYA)さんさすがですね。ヘルプの使用例を試してもエラーばかりで困っていたところ、詳細に解説頂いてありがとうございました。
私なりに完璧じゃないけれどほぼ理解できました。
フリガナ情報をString形式でなくObject形式でセットし、コピー先のセルに完璧にセットする方法を私のVBAに応用し完成しました。
大変勉強になり、ありがとうございました。 (ノン)


 お役に立てて何よりです。
こちらもフリガナ設定に関することをまとめて
調べられたので勉強になりました。
(KAMIYA)

コメント返信:

[ 一覧(最新更新順) ]


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