カタカナ語抽出方法 (ベストアンサーに300 ~ 500 pt程度)

MS Word 2003に貼り付けられた文章からカタカナ語を抽出し、抽出したデータを別の新規文書に貼り付けたいと考えています。実現する方法(おそらくマクロ)を教えてください。

1. カタカナ語とは、連続するカタカナ文字で構成された文字列です。記号、改行、漢字、ひらがな、スペースは含みません。
2. 重複するデータは不要です。同じカタカナ語が複数ある場合、2 つ目以降をカットしたいです。
3. 抽出後のデータは改行、カンマ、タブなどで区切りたいと思います。

Win XP Home を使用しています。
質問等はコメント欄にどうぞ。
よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2009/04/29 22:35:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント420pt
Sub Macro1()
    Dim objExp As Object
    Dim objMatchs As Object
    Dim objMatch As Object
    Dim words As String
    Dim words_count As Long

    Set objExp = CreateObject("VBScript.RegExp")
    
    Selection.WholeStory: 'すべて選択
    With objExp
        .Global = True
        .Pattern = "[ア-ヵー]+": 'カタカナにマッチ
        .Ignorecase = False
        Set objMatchs = .Execute(Selection)
    End With
    
    For Each objMatch In objMatchs
        With objMatch
            If (InStr(words, .Value & vbCrLf)) = 0 Then words = words + .Value & vbCrLf
        End With
    Next objMatch

    Debug.Print words
End Sub
|<
※Word2000で確認してます。
※とりあえず改行コード(vbCrlf)で区切ってます。
  • id:Nigitama
    以下サンプルです。
    ーーーーーーーーーーーーーーーーーー
    「自分にも答えられる質問がないかな?」「質問したいからポイントを獲得しよう!」そんなあなたは、さっそく回答してみましょう。
    質問一覧ページでは質問が一覧で表示されています。質問のタイプや、カテゴリーごとに自分の興味がある質問を見つけてみましょう。また公開中アイコンをクリックすることで、現在公開中の質問だけに絞り込むことができます。
    自分が答えることができる質問には答えるアイコン表示されているので、アイコンをクリックすることで回答ページへ移動し、回答を投稿してください。
    回答を投稿する手順はとても簡単ですが、実際に回答を行う詳しい手順については以下のページでご紹介しています。
    ーーーーーーーーーーーーーーーーーー
    結果は次のようになります。
    ポイント
    ページ
    タイプ
    カテゴリー
    クリック
    アイコン
  • id:kn1967
    word2000でしか動作確認してないけど、投稿してもいい?
  • id:Nigitama
    kn1967さん
    おねがいしますっ!
  • id:Nigitama
    素早い回答ありがとうございます!
    ばっちり動作しましたっ!
  • id:kn1967
    ゴミとミスに気づきました。
    (1)Dim words_count As Long
    試行錯誤のゴミです。消してください。

    (2)If (InStr(words, .Value & vbCrLf)) = 0 Then words = words + .Value & vbCrLf

    クリックも リックも同じものと判断されてしまいますので
    forループの前に
      words = vbCrLf
    を付加して
      If (InStr(words, vbCrLf & .Value & vbCrLf)) = 0 Then words = words + .Value & vbCrLf
    に替えて下さい。

    (3)新規文書への保存
    Excelと違ってテンプレートの位置を示す必要があったと記憶しておりますため
    勝手ながら割愛いたしました。
    このあたりフォローいただけた方に、ポイント配分してくださいませ。
  • id:Nigitama
    ソースの修正ありがとうございます。
    出力はDebug.Printで十分です。


    正規表現のところですが、
    すべてを網羅するには[ァ-ヶー]という表現になりますか?
    上記のコードだと「ァ」を含むカタカナ語が分割されてしまいました。
    この手の書き方はよくわからいなんですが、[ァ-ヶー]が全部網羅っぽい気がしています。
  • id:kn1967
    全角だけであれば、おっしゃるとおりでいけるかと
      [ァ-ヶー]+
    半角も含むのであれば
      [ヲ-゚ァ-ヶー]+
    その他として黒丸 ・ などは必要であれば
      [ヲ-゚ァ-ヶー・・]+
    何度もスミマセン。

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

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

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

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