プロが教える店舗&オフィスのセキュリティ対策術

EXCELで、漢字の後ろがカタカナになっているデータで
・北海道ホッカイドウ → 北海道
・東京トウキョウ → 東京
・京都キョウト → 京都
・鹿児島カゴシマ → 鹿児島
のように、漢字のみ抽出する式を教えてください。
VBAはわかりません。
EXCEL2016で、あいにくSEQUENCE関数は使えません。
どうぞ宜しくお願いいたします。

A 回答 (6件)

別案


 =LEFT(A1,MATCH(1,INDEX(LENB(MID(ASC(A1),COLUMN(1:1),1))*1,0),)-1)
たぶん、これでも抽出できると思う。
「EXCELで、漢字のみ抽出する式を教えて」の回答画像6
    • good
    • 0
この回答へのお礼

ズバリ、希望していたご回答です。
ありがとうございました。

お礼日時:2022/04/29 20:21

こんにちは



文字列を1文字ずつチェックするしかないのですけれど・・・
>漢字の後ろがカタカナになっているデータで
というのが、漢字・カタカナ以外はどうなっているのかよくわかりませんし、「漢字-カナ-漢字」等の場合はどうするのかも不明です。

ひとまずご参考までに、
『1文字目からチェックして、漢字以外が最初に出現するまでの文字列を抽出する』
という一例を以下に示しておきます。
あとは、実際になさりたいことに合わせて、調整してください。

A1セルに元の文字列があるとして、
=LEFT(A1,AGGREGATE(15,6,ROW(A$1:A$99)/(MID(A1,ROW(A$1:A$99),1)<"亜"),1)-1)
で、抽出可能と思います。

※ 可変にすると面倒なので、対応可能文字数は98文字以下までと決め打ちにしてあります。
※ ご提示の「・北海道ホッカイドウ」などが元のデータだとすると、1文字目の「・」が漢字ではないので、結果はその前の文字列を返すため、空白文字列となり何も表示されません。
もしも1文字目を除いてチェックしたいのであるなら、上式を2文字目からチェックするように修正して、1文字目のチェックは別途追加してください。
    • good
    • 2

誤記訂正




 これを
 括弧を外すと
  2b-a
 になります。


 これを
 括弧を外すと
  2y-x
 になります。
    • good
    • 0

>VBAはわかりません。


>EXCEL2016で、あいにくSEQUENCE関数は使えません。

ということですので、ASC関数を使ったやり方を説明してみます。

…気がつきましたか?
ASC関数は全角のカナを半角にする関数です。

元の文字列のバイト単位の文字数と、
カナを半角に置換した後の文字列のバイト単位の文字数を比較して
「カナ」の文字の長さを計算で求めれば、あとはLEFT関数で切り出せます。
A1セルに対称の文字が入力されているとしたら、
 ASC(A1)
これでカナを半角に置き換えることができます。

しかしこの時、濁点を含む文字は濁点が分離されて1文字分増えてしまいます。
そこで濁点を削除するためにSUBSTITUTE関数を使います。
 SUBSTITUTE(ASC(A1),CHAR(222),"")
これで半角の濁点を削除できます。
※ 半角の濁点の文字コードは222。

これらをLENB関数でバイト単位での文字数にする。

そしてここから数学的な計算になります。
 元の文字列のバイト単位での文字数を「x」、
 置換後の文字列から半角濁点を除いたバイト単位の文字数を「y」、
とした場合、
 x-y
で、半角に変換された文字数が得られます。
すると半角にならなかった文字のバイト数は
 y-(x-y)
で得られます。
これを
括弧を外すと
 2b-a
になります。

……はい。目的の文字数を得られました。
あとは、LEFT関数か、LEFTB関数でA1セルの値から文字を切り出せば良い。

・・・余談・・・

質問者さん的には
「御託なんて良いからテンプレートにできる数式をよこせ」
なんでしょうけど、
ここは自力で問題を解決できるようになるためのアドバイスをもらう場所であり、
作業の代行を依頼する場所ではありません。
ですので、ここでは敢えて答えである数式は書きません。
説明を読んで理解できれば、自分で数式を作れるようになります。
頑張ってみてください。
うまくいかないときは、その ”うまくいかない” 数式を書いて、あらためて質問すると良いでしょう。
    • good
    • 0

Excelに限らず「任意の文字列から感じ部分のみを自動的に抽出したい」のですよね?


それには基本的には文字列の先頭から1文字ずつ「この文字は漢字か」とチェックし、感じであれば抽出用に用意した場所へコピーする・・・といった処理を行う必要があります。

で、Excelの場合はそのような処理を行う関数式やマクロを作成することになります。
ですのでVBAはわかりません・・・とはなから突き放していては無理でしょう。その場合は手動操作で気長に処理するしかありません。

参考まで。
    • good
    • 0

以下のページを参考にして下さい。


 
https://extan.jp/?p=4437
    • good
    • 0
この回答へのお礼

ありがとうございます。
このページは見ましたが、SEQUENCE関数が使ってあってダメでした。

お礼日時:2022/04/27 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A