SetPhonetic
と言うメソッドがヒットして、For〜NextとかLoopを使えば全レコードに自動でフリガナ設定出来ることはわかります。
でもそこから一歩進んで、タイトルのようなフリガナ設定されてないセルにだけフリガナを設定したいときにどうすればいいのか、と言うことについて書いてある記事というのは見当たりませんでした。
…まあ、Phoneticプロパティを参照して仕様を確認したらあとは自分で考えろや(仕様を確認しに来るくらいだからそのくらいのアタマはあんだろがよ?)と言うことなのかもしれませんが。一応記載しておくと、以下の構文で取得できます。
=(イコール)の左が取得、右が設定です。
これで自由自在に設定出るだろう、と思うところなんですけど、ここに落とし穴がありまして、「フリガナが設定されていないセル」のPhonetic.Textを取得したときの結果は「""」(長さ0の文字列)ではないのです。なんとこれがOfficeのサイトにも載っていないと言う。
Range. Phonetic. Text = “文字列”
=(イコール)の左が取得、右が設定です。
これで自由自在に設定出るだろう、と思うところなんですけど、ここに落とし穴がありまして、「フリガナが設定されていないセル」のPhonetic.Textを取得したときの結果は「""」(長さ0の文字列)ではないのです。なんとこれがOfficeのサイトにも載っていないと言う。
実際自分でも仕様を確認して試してみて分かったんですが、上記処理の結果は「セルの値」を返します。つまり
この画像の状態の場合返ってくる値は「"不可説不可説転"」であるという訳。マジか。
さて、これを踏まえた上で、セルにフリガナが設定されているか判定するには
さて、これを踏まえた上で、セルにフリガナが設定されているか判定するには
If Cells(行, 列).Phonetic.Text = Cells(行, 列) Then
と言う構文にしないといけないということです。
以下、「3列目にあるレコードの内、フリガナの設定されていないセルにだけ設定する/レコードのある分だけ繰り返す」処理のサンプルコードです。
以下、「3列目にあるレコードの内、フリガナの設定されていないセルにだけ設定する/レコードのある分だけ繰り返す」処理のサンプルコードです。
Sub phoneticX()
Dim i As long, x As Long
Dim phone As String, WSphone As String
x = Cells(65536, 1). End(xlUp). Row
For i = 2 to x
phone = Application. GetPhonetic(Cells(i, 3))
WSphone = Cells(i, 3). Phonetic. Text
If WSphone = Cells(i, 3). Text Then Cells (i, 3). SetPhonetic
Next i
End Sub
構造としてはIf節で➀フリガナ設定されているか判定、➁設定されている場合はスルー〜If節脱出、➂設定されていない場合はSetPhoneticする、これだけですね。
因みに、セルに入力された文字列の特定の部分のフリガナだけ取得/編集したいとお嘆きのあなたに朗報!その場合は
Range. Characters(開始位置, 設定する文字数). PhoneticCharacters = “文字列”
の構文で可能です。ミソは設定する文字数が、セルに入力されている文字数であることでしょうか。よく考えれば当たり前の話ですが、フリガナを扱っているのでフリガナの文字数だと勘違いしてしまいがちなので注意しましょう。あとはLenとかMidとか何ならStrConvとか駆使すればどうとでもなると思います。
0 件のコメント:
コメントを投稿