• ベストアンサー

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

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

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

  • ベストアンサー
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.12

PicChar関数の以下の部分を修正します。 If Not (isJisKanji(str) Or isHiragana(str, "、。、。")) Then 漢字だけの場合 If Not isJisKanji(str) Then ひらがなだけの場合 If Not isHiragana(str, "、。、。") Then それぞれ別の関数としてください。 たとえば PicJisKanji とPicHiragana の2つの関数にします。

nakanakaokwave
質問者

補足

御回答ありがとうございます PicHraganaの式のほうが一番最初のひらがな漢字単語だけを抜き出せました PicHraganaの式の結果#VALUE!とエラーのの所だけにA列の値をそのまま移せたら良いと思います PicChar()の式は一番最初のひらがな漢字単語だけでなく行のすべてのひらがな漢字を抜き出します 上の式で漢字とひらがなを分けて抜き出せましたので日本のJISコード漢字に問題は有りません

その他の回答 (12)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.13

PicChar関数で特定の漢字でエラーが出るのは、どのような漢字でしょうか。 isJisKanji関数は文字通りJIS規格で定められた日本の漢字にしか対応していません。 中国、台湾、ベトナムなどの漢字を使っている場合は、UniCode用の関数と、UniCodeのどこからどこまでを漢字として扱うかの定義が必要になります。 元々の質問が、ひらがなと漢字だったので日本の文字と考えていましたが、質問文や補足文の雰囲気から、そうではなさそうですね。 UniCodeの場合も考えてみます。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.11

方法を2つ紹介します. 方法1 No.9の補足で 「空白が一文字もない値の場合エラーになりますが空白が一文字もない多くの値の前に空白を一文字入れる式はありますか」 ということなので,エラーが起きたときの対処法として IFERROR関数を使う方法です. =IFERROR(B1," " + B1) 方法2 半角スペースの数が 0かどうかを IF関数で判定する方法です. =If(LEN(B1) - LEN(SUBSTITUTE(B1, " ", ""))=0," " + B1,B1) 方法1は,エラーでなければ B1を返し,エラーなら B1の頭に半角スペースを付加しています. 方法2は,LEN(B1) - LEN(SUBSTITUTE(B1, " ", ""))の式で半角スペースの数を返しています. その結果を IF関数で,半角スペースがなければ(個数 0)半角スペースを頭に付加し,半角スペースがあれば B1を返しています.

nakanakaokwave
質問者

補足

御回答ありがとうございます 上の2の式とPicChar()の式は行のすべてのひらがな漢字を抜き出します PicHraganaの式のほうが一番最初のひらがな漢字単語だけを抜き出せましたがひらがなだけの単語、漢字だけの単語、特定の漢字のときにに#VALUE!とエラーになります #VALUE!にならないようにできない場合 #VALUE!の所だけにA列の値をそのまま移せたら良いと思います

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.10

ちょっと意味がわかりませんが、こういう事ですか? B1セルの文字列の前に半角スペースを付ける。 =" " + B1 B1セルの文字列の後ろに半角スペースを付ける。 =B1 + " "

nakanakaokwave
質問者

補足

 ありがとうございます 空白が一文字もない値の前に空白を入れる式 空白が一文字以上あれば値の前に空白を入れたくないので空白が0文字の値だけを選びその前に半角スペースを入れたいです =" " + B1ではセルの値の含む空白の文字数に関係なくすべての値の前に空白が付きます

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.9

ワークシート関数の FINDを使えば可能です。 下記ページが参考になります。 https://www.relief.jp/docs/excel-function-before-after-texts-2nd-space.html

nakanakaokwave
質問者

補足

御回答ありがとうございます 空白が一文字以上ある値はうまく一番最初の単語がぬきだせました 空白が一文字もない値の場合エラーになりますが空白が一文字もない多くの値の前に空白を一文字入れる式はありますか

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.8

No.7です. やはり isJisKanji関数の Likeの使い方に問題がありました. 以下のコードで大丈夫だと思います. ワークシート関数は PicChar()としています. "、。、。" の前 2つは半角,後ろ 2つは全角です. ' --- ここから ----- Public Function PicChar(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 ' ひらがな,句読点とJIS漢字以外を半角スペースに置換 For i = 1 To Len(src) str = Mid(src, i, 1) If Not (isJisKanji(str) Or isHiragana(str, "、。、。")) Then Mid(src, i, 1) = " " End If Next ' 不要なスペースを削除 src = WorksheetFunction.Trim(src) ' 半角スペースをデリミタに置換 src = WorksheetFunction.Substitute(src, " ", Delimiter) ' 結果を関数に返す PicChar = src End Function Private Function isAlph(ByVal strChar As String, Optional ByVal strAdd As String) As Boolean strChar = StrConv(strChar, vbNarrow) isAlph = strChar Like "[a-zA-Z]" Or InStr(strAdd, strChar) > 0 End Function Private Function isKatakana(ByVal strChar As String, Optional ByVal strAdd As String) As Boolean ' ヽヾ の 2文字はカタカナとする strAdd = "ヽヾ" & strAdd strChar = StrConv(strChar, vbNarrow) isKatakana = strChar Like "[ヲ-゜]" Or InStr(strAdd, strChar) > 0 End Function Private Function isHiragana(ByVal strChar As String, Optional ByVal strAdd As String) As Boolean Dim lngCode As Long lngCode = Asc(strChar) ' ゝゞ の 2文字はひらがなとする strAdd = "ゝゞ" & strAdd isHiragana = lngCode >= Asc("ぁ") And lngCode <= Asc("ん") Or InStr(strAdd, strChar) > 0 End Function Private Function isJisKanji(ByVal strChar As String, Optional ByVal strAdd As String) As Boolean Dim lngCode As Long lngCode = Asc(strChar) ' 〃仝々〆〇ヵヶ の 7文字は漢字とする strAdd = "〃仝々〆〇ヵヶ" & strAdd isJisKanji = (lngCode >= Asc("亜") And lngCode <= Asc("熙")) Or (lngCode >= Asc("纊") And lngCode <= Asc("黑")) Or InStr(strAdd, strChar) > 0 End Function ' --- ここまで -----

nakanakaokwave
質問者

補足

御回答ありがとうございます ひらがな漢字は句点、スペースで別れています ある句点、スペースを指定しそれより前のひらがな漢字だけを抜き出すことはできますか?

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.7

No.6です. VBAの Likeの使用方法に問題があったようです. 改めてコードをアップするまでお待ちください. 個人的には非常に勉強になりました.

nakanakaokwave
質問者

補足

御回答ありがとうございます 3行に1回ぐらいうまく抜き出せずエラーになります もともとひらがなだけの行もエラーになります 一部の漢字も抜き出せずエラーになります

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.6

Then が抜けてました。 If Not (isJisKanji(str) Or isHiragana(str,"、。、。")) Then "、。、。" 前の2文字は半角、後ろの2文字は全角ですので気を付けて下さい。

nakanakaokwave
質問者

補足

御回答ありがとうございます カタカナの後に一、予、燃などの漢字が続いたとき一番最初の漢字が消えます 燃えるはえるとなります 予想は想になります

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.5

括弧の有無は関係ありません。 何も指定しなければ、括弧も半角スペースに置き換わります。 括弧をひらがな扱いしたければ、isHiragana関数のオプションで設定してください。

nakanakaokwave
質問者

補足

御回答ありがとうございます exel2013で  If Not (isJisKanji(str) Or isHiragana(str,"、。、。")) のところが構文コンパイルエラーとでて処理できません

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2です。 抽出するケースを、文章で明確に説明できないなら、する気がないなら、エクセルのシートのその列の文字列の該当部分(抽出したい文字部分)に、フォントの文字色を手作業(人間の判断で)で付けて、下記VBAのような簡単なVBAで、別列に抜き出すことを勧める。 ー もし、他人にやらせる場合、その要領をその他人に、説明するだろう。その場合は、それを文章にしたものや、図示や例示などが、説明に必要だろうし、作るだろう。 それをしない、できないのなら、質問者自身が、手作業でマークして、その部分を抜き出すのも、1つの手だと思う。 ーー 色々勉強する時間を取るよりも、その手作業は、500行分として(1列として)を10分もあれば終わるだろう。 VBAのコード例 A列にデータがあり、同行B列に抜き出す例です。 Sub test02() lr = Range("A100000").End(xlUp).Row ’A列のデータがある例 For i = 1 To lr s = "" For j = 1 To Len(Cells(i, "A")) ’A列のデータがある例 If Cells(i, "A").Characters(Start:=j, Length:=1).Font.ColorIndex = 43 Then s = s & Mid(Cells(i, "A"), j, 1) End If Next j Cells(i, "A").Offset(0, 1) = s ’隣列=B列にぬき出す例 Next i End Sub -- ColorIndex = 43の43の部分はグリーンの色のことで、文字に色を付けた場合です(セルではない)。 他の色を使った場合は、 https://www.sejuku.net/blog/32288 の 「ColorIndexプロパティとは」 に どの色はどのコードに当たるか、載っています。 変えることは簡単です。

nakanakaokwave
質問者

補足

ご回答ありがとうございます(),【】などのカッコ内のひらがな、漢字も抜き出せますか?

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.3

[No.2]へのコメント、 隅から隅迄、ズ・ズ・ズイーッと同感!(パチパチ…)

関連するQ&A