EXCELのクエリを使って、漢字のよみを取り出したいのですが、

例えば、EXCELのセルに「石器」があり
http://dictionary.goo.ne.jp/srch/all/石器/m0u/
このURLに飛ばすと、そこに石器のふりがな(せっき)があり、
その(せっき)のふりがなの部分だけを取り出すことはできますか?
EXCELのセルには、任意に複数の日本語が書いてあり、クエリで一括で日本語の
よみがなを取り出したいです。是非いい方法あれば教えてください。

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2015/10/13 12:51:52

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

PHONETIC 関数を使うのがお手軽だと思います。
f:id:a-kuma3:20151006150349p:image

# クエリじゃないですけれど。




追記です。
VBA を使ったサンプルを作ってみました。
「漢字の読みを調べる」関数が、goo辞書のページの最初の「読み」を返します。

Function 漢字の読みを調べる(元ネタ)

    Set xhr = CreateObject("MSXML2.ServerXMLHTTP")
    Set doc = CreateObject("htmlfile")

    URL = "http://dictionary.goo.ne.jp/srch/all/" & 元ネタ & "/m0u/"

    xhr.Open "GET", URL, False
    xhr.send ""
    If xhr.StatusText = "OK" Then
    
        doc.write xhr.responseText
        Set nodeList = doc.getElementsByTagName("DT")
        読み = "×"
        For i = 0 To nodeList.Length - 1
            If nodeList(i).className = "title search-ttl-a" Then
                s = nodeList(i).innerHTML
                iPos = InStr(s, "【")
                If iPos <> 0 Then
                    読み = Left(s, iPos - 1)
                End If
                Exit For
            End If
        Next
        漢字の読みを調べる = 読み

    Else
        漢字の読みを調べる = "×"
    End If

    Set doc = Nothing
    Set xhr = Nothing

End Function

'
'   ここから後は、テスト用
'
Sub テストサブ(kanji)
    yomi = 漢字の読みを調べる(kanji)
    Debug.Print yomi
End Sub

Sub テスト()
    Call テストサブ("石器")
    Call テストサブ("磨製石器")
    Call テストサブ("那智黒")
    Call テストサブ("那智赤")
End Sub



追記です。
ループの件数が間違ってたのと、goo辞書で読みが見つからなかったときの処理がきちんとしてなかったので、先の追記のソースを修正しました。

他14件のコメントを見る
id:a-kuma3

間を取るとアクセスできるようになるので、セルの関数として使うのではなく、マクロでループさせて使う感じでしょうか。
読みが取得できているのは飛ばすようにして、無駄なアクセスをしないようにして。

# 突き詰めすぎると goo に怒られそうだ :-)

2015/10/07 20:43:44
id:kajironpu

マクロを使う方法ですね、挑戦してみます。ありがとうございます!

2015/10/07 21:33:46

その他の回答1件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

PHONETIC 関数を使うのがお手軽だと思います。
f:id:a-kuma3:20151006150349p:image

# クエリじゃないですけれど。




追記です。
VBA を使ったサンプルを作ってみました。
「漢字の読みを調べる」関数が、goo辞書のページの最初の「読み」を返します。

Function 漢字の読みを調べる(元ネタ)

    Set xhr = CreateObject("MSXML2.ServerXMLHTTP")
    Set doc = CreateObject("htmlfile")

    URL = "http://dictionary.goo.ne.jp/srch/all/" & 元ネタ & "/m0u/"

    xhr.Open "GET", URL, False
    xhr.send ""
    If xhr.StatusText = "OK" Then
    
        doc.write xhr.responseText
        Set nodeList = doc.getElementsByTagName("DT")
        読み = "×"
        For i = 0 To nodeList.Length - 1
            If nodeList(i).className = "title search-ttl-a" Then
                s = nodeList(i).innerHTML
                iPos = InStr(s, "【")
                If iPos <> 0 Then
                    読み = Left(s, iPos - 1)
                End If
                Exit For
            End If
        Next
        漢字の読みを調べる = 読み

    Else
        漢字の読みを調べる = "×"
    End If

    Set doc = Nothing
    Set xhr = Nothing

End Function

'
'   ここから後は、テスト用
'
Sub テストサブ(kanji)
    yomi = 漢字の読みを調べる(kanji)
    Debug.Print yomi
End Sub

Sub テスト()
    Call テストサブ("石器")
    Call テストサブ("磨製石器")
    Call テストサブ("那智黒")
    Call テストサブ("那智赤")
End Sub



追記です。
ループの件数が間違ってたのと、goo辞書で読みが見つからなかったときの処理がきちんとしてなかったので、先の追記のソースを修正しました。

他14件のコメントを見る
id:a-kuma3

間を取るとアクセスできるようになるので、セルの関数として使うのではなく、マクロでループさせて使う感じでしょうか。
読みが取得できているのは飛ばすようにして、無駄なアクセスをしないようにして。

# 突き詰めすぎると goo に怒られそうだ :-)

2015/10/07 20:43:44
id:kajironpu

マクロを使う方法ですね、挑戦してみます。ありがとうございます!

2015/10/07 21:33:46
id:Lhankor_Mhy No.2

回答回数814ベストアンサー獲得回数232

 クエリじゃないですが、↓この機能で

「WEBSERVICE」「ENCODEURL」「FILTERXML」の3つの関数が追加され、これらの関数を使うと、Webサービス、つまり公開されているWeb APIをVBAでコードを書くことなく利用できるようになります。

Excel 2013で追加された「WEBSERVICE」関数を使って、マクロを使わずWeb APIを利用する。 | 初心者備忘録

 ↓このAPIを叩いたら

漢字かな交じり文に、ひらがなとローマ字のふりがな(ルビ)を付けます。

テキスト解析:ルビ振り - Yahoo!デベロッパーネットワーク

 それっぽいことができそうな気がします。
 
 もし任意のWebページを使いたいなら、kimonoにチャレンジしてみてはいかがでしょう。

kimonoはウェブページをスクレイピングしてAPI化してくれるサービスです。しかもめっちゃ簡単に。

api - kimonoでお手軽スクレイピング - Qiita

 
 
 
 でも、どれも私は使ったことないんですけどね←

id:kajironpu

ありがとうございます とても興味のある内容です。
これからじっくり読んで挑戦してみたいと思います。
これは、いろいろなことに使えそうです!

2015/10/07 13:19:22

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません