質問: exelで一番初めに出てきたひらがな単語抽出方法 exelで各行にあるひらがなと他の文字が混じったテキストの中から全行含めて一番初め、一番左側に出てきたひらがな単語だけ一括で抽出しあいている列に表示する方法を教えて下さい ひらがな単語はひらがなのあとにひらがな以外の文字が続くところより前の部分と判断したい
回答: (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) あくまでも,文字コードだけの扱いなので,単語かどうかは判定できません.