• ベストアンサー
  • 困ってます

exelで一番初めに出てきたひらがな単語抽出方法

exelで各行にあるひらがなと他の文字が混じったテキストの中から全行含めて一番初め、一番左側に出てきたひらがな単語だけ一括で抽出しあいている列に表示する方法を教えて下さい ひらがな単語はひらがなのあとにひらがな以外の文字が続くところより前の部分と判断したい

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数115
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.6

No.5の補足です. isKatakana プロシージャの "[ヲ-゜]" は,半角です. OKウエイブの仕様で全角に変換されるようなので,注意して下さい.

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • exelで各行最初のひらがなと漢字抽出

    exelで各行にあるひらがなと漢字と他の文字が混じったテキストの中から全行含めて一番初め、一番左側に出てきたひらがな、漢字単語だけ一括で抽出しあいている列に表示する方法を教えて下さい ひらがな、漢字単語はひらがな、漢字のあとにひらがな、漢字以外の文字が続くところより前の部分と判断したい 最大100文字 ひらがな、漢字が続く中のの句読点もすべて抜き出したい exelで各行にあるひらがなと漢字と他の文字が混じったテキストの中から全行含めて一番初め、一番左側に出てきたひらがな、漢字単語だけ一括で抽出しあいている列に表示する方法を教えて下さい

  • exel行の中で一番初めに出てきたカタカナ単語抽出

    exelで各行にあるカタカナと他の文字が混じったテキストの中から一番初めに出てきたカタカナ単語だけ一括複数で抽出したいのですが下の式を使うとカタカナ以外も抽出してしまいます マクロを含め各行にあるカタカナと他の文字が混じったテキストの中から一番初めに出てきたカタカナ単語だけを一括複数で抽出できる式を教えて下さい =MID(A1,MATCH(1,(CODE(MID(A1,COLUMN($A$1:INDEX($1:$1,LEN(A1))),1))>=9505)* (CODE(MID(A1,COLUMN($A$1:INDEX($1:$1,LEN(A1))),1))<=9590),0),SUM((CODE(MID(A1,COLUMN($A$1:INDEX($1:$1,LEN(A1))),1))>=9505)*(CODE(MID(A1,COLUMN($A$1:INDEX($1:$1,LEN(A1))),1))<=9590)))

  • exelの列でひらがな、漢字、カタカナをすべて選択

    exelの列でひらがな、漢字、カタカナの単語をすべて選択する方法を教えて下さい  半角、全角が混じったテキストです

その他の回答 (5)

  • 回答No.5

(1) 以下のマクロコードを標準モジュールに貼り付けてください. (2) A1セルに文字列が入力されているとして,B1セルに以下のように数式を入力します. =LEFT(PicHiragana(A1),FIND(" ",PicHiragana(A1))-1) ' --- ここからマクロ Public Function PicHiragana(ByVal Target As Range, Optional ByVal Delimiter As String = " ") As String Dim src As String Dim i As Long Dim str As String src = Target.Value ' ひらがな以外を半角スペースに置換 For i = 1 To Len(src) str = Mid(src, i, 1) If Not isHiragana(str) Then Mid(src, i, 1) = " " End If Next ' 不要なスペースを削除 src = WorksheetFunction.Trim(src) ' 半角スペースをデリミタに置換 src = WorksheetFunction.Substitute(src, " ", Delimiter) ' 結果を関数に返す PicHiragana = src End Function Private Function isJisKanji(ByVal str As String, Optional ByVal addChar As String) As Boolean ' 〃仝々〆〇ヵヶ の 7文字は漢字とする addChar = "〃仝々〆〇ヵヶ" & addChar isJisKanji = str Like "[亜-熙纊-黑]" Or InStr(addChar, str) > 0 End Function Private Function isKatakana(ByVal str As String, Optional ByVal addChar As String) As Boolean ' ヽヾ の 2文字はカタカナとする addChar = "ヽヾ" & addChar str = StrConv(str, vbNarrow) isKatakana = str Like "[ヲ-゜]" Or InStr(addChar, str) > 0 End Function Private Function isHiragana(ByVal str As String, Optional ByVal addChar As String) As Boolean ' ゝゞ の 2文字はひらがなとする addChar = "ゝゞ" & addChar isHiragana = str Like "[ぁ-ん]" Or InStr(addChar, str) > 0 End Function ' --- ここまでマクロ ひらがな,カタカナ,JIS漢字を判定する Private Function を使用することで,「ひらがなだけ」「カタカナだけ」「JIS漢字だけ」をピックアップすることができます. また,If Not isHiragana(str) Then の部分を工夫すれば「日本語だけ」や「日本語以外」「ひらがな または カタカナだけ」といった組合せが可能です. PicHiragana関数自体は以下の例のように,ひらがな以外の部分を半角スペース(または,指定した区切り文字)に置き換える関数です. 例)新しい朝が来た~あ → しい が た あ なので,最初の半角スペースから前の部分を取り出せば,最初のひらがなになります(それが以下の数式). =LEFT(PicHiragana(A1),FIND(" ",PicHiragana(A1))-1) あくまでも,文字コードだけの扱いなので,単語かどうかは判定できません.

共感・感謝の気持ちを伝えよう!

  • 回答No.4
  • msMike
  • ベストアンサー率20% (324/1577)

マクロ音痴な私は關數のみで何とか出來ないか試行錯誤して居る最中ですが(*^_^*)、「各行にあるひらがなと他の文字が混じったテキスト」の文字數は最大何文字でせうか? 或ひは5行分位のサンプルテキストを御提示下さい。 ひらがな以外の他の文字も氣に成るので必要最小限が望ましいかと。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • imogasi
  • ベストアンサー率27% (4626/16543)

私も熟達者ではないので、本当に高い立場から言えば、方法があるかもしれないが、小生の範囲で見聞きするのでは、「よく無理なことを言いよる」、という感想です。 ーーー まず、エクセル関数ではむつかしいと思う。 出来ても下記VBAの結果どまりでしょう。 ーー そこでとりあえず、VBAでやってみた。標準モジュールに Sub test01() lr = Range("A100000").End(xlUp).Row For i = 1 To lr x = Cells(i, "A") MsgBox x hiraganamode = "n" s = "" For j = 1 To Len(x) w = Mid(x, j, 1) If w Like "[あ-ん,ー]" Then hiraganamode = "y" s = s & w Else If hiraganamode = "y" Then GoTo p1 End If Next j p1: Cells(i, "B") = s Next i End Sub ーーー 例データ(下記最左ブロック文字列)はA列に入れて 、結果は真ん中のカタマリB列です。 A列     B列 C列=ケースのコメント(小生の手書き) 123ボタン花壇   「ひらがな」なしの例 abc1赤入ぼたん畑  ぼたん 半角、漢字と混合 さんふらわあー号  さんふらわあー 漢字と混合 昼のひまわりのはな  のひまわりのはな 漢字と混合 ひれくれ与左衛門  ひれくれ 漢字と混合 キクチしろう  しろう カタカナと混合 赤いはなびらの花  いはなびらの 漢字と混合 赤いはなびらの花のつゆ  いはなびらの ひらがな2か所 ーーー 問題点 「赤いはなびらの花」の「い」 「赤いはなびらの花のつゆ」の「い」と「の」が、混じってしまう。 これらを除くには、単語切り出しとともに、意味的な、品詞などを 検出する仕組みが必要と思う。 VBAでは考え方(ロジック)的に難しいと思う。別の辞書のような、データベースが必要。 === もし「ひらがな単語」が、名詞的なもので、かつ数百(千?)個程度で、網羅(入力)可能なら、またある程度固定的なら、そういう一覧テーブルをシートに持ち、考えているセルのその語句を、繰り返してテーブルの語句がに含まれるかどうか聞いて、判断すればより完全になろう。 1セル2か所に出現するか、テーブル語句の部分が1セルに出現するかなど気を付けないとならないと思うが、プログラムで何とかなるだろう。 「ひらがな単語」と言っているが、漢字語句+ひらがなやひらがな+漢字語句や、その他数字とのくみあわせもありとなると、複雑になる。

共感・感謝の気持ちを伝えよう!

  • 回答No.2

ユーザー定義関数です。 使い方、A1にテキストが入っているとして、 =FirstHirakana(A1) です。 Option Explicit ' Function FirstHirakana(Expression As String) As String   Dim RegExp As Object '   Set RegExp = CreateObject("VBScript.RegExp")   RegExp.Pattern = "[ぁ-ん,ー]+"   Set RegExp = RegExp.Execute(Expression) '   If RegExp.Count > 0 Then     FirstHirakana = RegExp(0)   End If End Function

共感・感謝の気持ちを伝えよう!

  • 回答No.1

https://okwave.jp/qa/q9826537.html#answers でポストしたものをひらがな用に直してみました。 コード中の   Exit For  '単語1つだけピックアップの場合 の行を抜けば、全数カンマ区切りでピックアップします。 都合、使い方は https://okwave.jp/qa/q9826537.html#answers と同じです。 Function PicHiraTango(tgText As String) As String  Dim ColCnt As Long  Dim MySw As Boolean  Dim wkText As String  Dim HitFlg As Boolean  PicHiraTango = ""  wkText = ""  MySw = False  HitFlg = False  For ColCnt = 1 To Len(tgText)   If MySw = False Then    If isHira(Mid(tgText, ColCnt, 1)) = True Then     MySw = True     If HitFlg = True Then      Exit For  '単語1つだけピックアップの場合      wkText = wkText & "," & Mid(tgText, ColCnt, 1)     Else      wkText = wkText & Mid(tgText, ColCnt, 1)     End If     HitFlg = True    Else     MySw = False    End If   Else    If isHira(Mid(tgText, ColCnt, 1)) = True Then     wkText = wkText & Mid(tgText, ColCnt, 1)     MySw = True    Else     MySw = False    End If   End If  Next ColCnt  PicHiraTango = wkText End Function Function isHira(Moji As String) As Boolean  If _    ((AscW(Moji) >= &H3041) And (AscW(Moji) <= &H3093)) Then   isHira = True  Else   isHira = False  End If End Function

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • exelでアルファベットの単語を抽出

    exelで多数のアルファベットの単語を他のセルに抽出する方法を教えて下さい マクロでも式でもよいです

  • exelで行の最初にあるカタカナ単語だけを抜き出す

    exelで行の最初にあるカタカナ単語だけを抜き出す方法を教えて下さい カタカナの単語と他の文字の単語の境目で分け、 2回めにカタカナが出てきた場合は抜き出さないようにしたいです

  • EXELで条件抽出をしたい…

    教えて下さい。EXELで作った下のような表(データ)がありその条件に合う人を抽出したいんですが…       A   B   C   D 1 Aさん 1234  2345  3456  4567 2 Bさん 6788  1234  5556  7778 3 Cさん 7788  7778  5443  7789 A~Dのセルにランダムに並んだ数字を入力している(ここでは、番号(1234)と入力している)人を関数を使い一発表示したいんですが。  A列だけに1234という数字を入力している人を抽出し、条件にあえば「○」という表示をできるようにはIF関数を使いできましたが、 AさんのA列、B列、C列全てを検索範囲に入れた、(たとえば「1234」と入力しているなら「○」等で表示(抽出)したいんですが…それができる関数を教えて下さい。列ごとしかできないのか…??? 分かりにくいですか? (^_^; 宜敷お願いします。

  • Excelアルファベット文字列だけ一括抽出マクロ

    いつもお世話になっております。 Excel2013の A列に、ひらがなカタカナ漢字、英数字、*"「などの記号(半角全角)などが入っている文字列があります。 そこからアルファベットの文字列だけ(数字は不要)を抽出して、結果をBCD・・・列に表示させたいのです(A1からの抽出結果はB1,C1…に表示、A2からの抽出結果はB2, C2…に表示)。 添付の画像ではA2までしか載せていませんが、 実際にはA列には1000くらいエントリーがあり、 それを一括でアルファベットの文字列を抽出したいのです。 ご存じの方、ご教示いただければ幸いですm(_ _)m

  • EXELで「:」を区切り文字として読み込みたい

    EXEL2003です。 下記のようなメモがテキストファイルであります。 「:」を区切り文字としてEXELに取り込み、左側をA列に、右側をB列に入れたいのですが、 どうすればよいでしょうか。 名火消:寛永20年(1642) 定火消:明暦の大火  町火消:享保3年(1718)  石見銀山:大森銀山とも  よろしくお願いします。

  • Windows版Perlでの行の抽出の問題

    Windowsのバッチファイルで、Perlを使って特定の文字列を含む行を抽出する処理を行っているのですが、うまくいかないケースがあります。 例えば、以下の線内のようなテキストがあって、 ---------------------- 〔a 〔A ゜a ゜A ---------------------- 大文字/小文字を問わず、「〔a」を含む行を抽出し、 以下の線内のような結果を得たいとします。 ---------------------- 〔a 〔A ---------------------- 検索対象ファイルの文字コードが「Shift-JIS」で、 「print if ( /〔a/i );」という構文で行を抽出すると、 以下の結果になってしまいます。 ---------------------- 〔a 〔A ゜a ゜A ---------------------- 「print if ( /〔a/ );」なら以下の結果になってしまいます。 ---------------------- 〔a ---------------------- 検索対象ファイルの文字コードを「UTF-8」にし、 「print if ( /〔a/ );」という構文で、 「〔a」を含む行を抽出しようとすると、何も行が抽出されません。 他のコマンドでの大文字/小文字問わない「〔a」を含む行の抽出は、 findstrでは得たい結果が得られ、 grep、AWKでは、Perl同様、「゜a」を含む行が抽出されてしまいます。 しかし、私が行いたい処理は、数百~数千程度の単語が書かれた単語のリストがあり、そのリストをスクリプト形式に置換して行を検索するので、スクリプトファイルに対応していないfindstrコマンドでは不便なのです。 上記の問題の原因が分かる方がおられましたら、お教え頂けないでしょうか。

    • ベストアンサー
    • Perl
  • テキストから文字列の抽出法

    テキストから文字列を抽出して、比較したいのですが、良いアプリケーションをご存じないでしょうか? 具体的には2つの異なるフォーマットのファイルがあり、それぞれに(同一の文字列かどうか)比較したい文字列は1行ずつソートされた形で含まれています。しかしその同じ行に時刻などの付加情報が含まれているため、行単位で比較することができないのです(行単位で比較できるアプリは知っています)。 文字列とはファイル名ですので、*.* の形で指定して、抽出できればと思うのですが... もしご存知の方がいらっしゃいましたら、教えてください。

  • Excelで文章から特定の単語を抜き出したい

    Exel2007で、文章中から特定の単語を抜き出したいと考えています。 1)単語は複数あり、今後増える可能性や変更されることがあります。 2)文章は複数あり、今後増える可能性や変更されることがあります。 3)単語は文章中に複数ある場合や、全くない場合など様々です。 4)単語が見つかった場合、それを文章の横などに表示したいです。 こういった場合、どういった方法があるでしょうか? A列     B列            C列 単語    文章            抽出した単語 ●●    ▲▲は□□です。    ▲▲ ■■    ○○は■■です。    ■■ ▲▲    ●●は□□です。    ●●  ・     ▲▲は■■です。    ▲▲ ■■  ・     ○○は□□です。      ・     ▲▲は▲▲です。    ▲▲ よろしくお願いいたします。

  • 文字数の多い単語だけ抽出(多言語テキスト)

    英・仏・独語の多数のテキストファイルから12文字以上の単語だけ抽出したいのですが効率のよい方法はないでしょうか。 英語だけならテキストエディタの正規表現を使ったgrepで \w{12,} で12文字以上の単語を含む行を検索したうえで、\w{1,11} を空白と置換して削除してしまえばいいのですが(一緒に表示させるフルパスは別途消す必要がありますが)、仏・独語となるとイロイロ問題が出てきます。 例えば、仏語では a'bc'def のようなパターンの単語があります。これを単に検索するだけなら \w'\w+'*\w* で検索できますが、12文字以上と指定する方法がわかりません(アポストロフィがひとつだけなら \w'\w{10,} で12文字以上ということになるのですが…)。 そこで質問なのですが: 1. 上記の仏語のようにアポストロフィを2つ含む12文字以上の単語を抽出するにはどうしたらいいでしょうか。 2. そもそも12文字以上の単語を含む行をgrepしたうえで、11文字以下の単語を消去したりせずに、最初から12文字以上の単語だけを抽出する方法はないのでしょうか。 できれば、フリーウェなどを導入せずにテキストエディタやOffice系アプリなどだけで対処したいと思います。VBSでもOKですが、その場合は、初歩的なことしかわかりませんので、アドヴァイスというより丸投げしてしまうことになります。 どうかよろしくご助言をお願いします

  • エクセルマクロ重複した列を削除した結果を抽出したい

    お世話になります。 各行で、重複したセルを除いた文字列を結合してA列へ表示させたいのですが、全然わからず困っています。宜しくお願い致します。 【抽出前】 セルB2:あいうえお セルC2:かきくけこ セルD2:さしすせそ セルE2:あいうえお セルB3:たちつてと セルC3:らりるれろ セルD3:たちつてと         ・         ・         ・ 【抽出後】 ※重複した部分を除いた抽出結果を、A列に表示させたい セルA2:あいうえおかきくけこさしすせそ セルA3:たちつてとらりるれろ         ・         ・         ・ 【補足】 ※列数は決まっていません。値が入っているところ迄、となります。例では最長E列迄になっておりますが、もっと長い場合もあれば、B列だけの場合もあります。 ※行数は、数100行あります。こちらも値が入っているところ迄、抽出結果をA列のA2から順番に表示させたいです。