[[20071226121110]] 『1セルにある漢字と仮名の分別方法』(乃愛) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『1セルにある漢字と仮名の分別方法』(乃愛)

[[20071220171527]]

 先日、上記の場所にて教えていただきました関係で追加質問させてください。

             A                B         C

 1 『高田_純二_タカダ_ジュンジ』   高田_純二  タカダ_ジュンジ

 とA1に氏名(漢字)、氏名(カナ)があり、共に氏名の間にスペースがある場合に、
 B1とC1に氏名(漢字)、氏名(カナ)に分けて、表示させることはできるの
 でしょうか。

 以前は、氏名の間にスペースがないものとして、色々勉強させていただきましたが、
 解決できるようでしたら、よろしくお願いしますm(_ _)m


 前スレでB1に漢字の名前のみを抽出させることは出来たとして
SUBSTITUTE(文字列,検索文字列,置換文字列,置換対象)関数で置き換えるとかでは?


 先日の関数ですと、

 B1に “高田_純二_タカダ” まで抽出してしまうのです。

 なので “_タカダ” の部分も抽出しないようにしたかったのです。

 SUBSTITUTE関数も使ったことがなく、よくわかりませんでしたが、
 この関数でも私のやりたいことができるのでしょうか。
 色々と教えていただければ助かります。
 よろしくお願いしますm(_ _)m

 (乃愛)

 =Substitute(A1,"_"," ",2)
 かな?
 別々のセルね...

 B1 = Left(A1,Find("^^",Substitute(A1,"_","^^",2))-1)
 C1 = Substitute(A1,B1&"_","")
 (seiya)

 前回は「高田純二_タカダジュンジ」なのに今回は「高田_純二_タカダ_ジュンジ」ですか、どちらなのかな?
SUBSTITUTE関数、FIND関数、LEFT関数
を組み合わせれば出来ると思いますが・・・。

 こんな方法もあります。
 とにかく2つ目のスペースで区切って二つに分ける方法です。

 B1=LEFT(A1,SMALL(IF(MID(A1,ROW(A1:A30),1)=" ",ROW(A1:A30),""),2)-1)
 C1=MID(A1,SMALL(IF(MID(A1,ROW(A1:A30),1)=" ",ROW(A1:A30),""),2)+1,30)

 どちらも配列数式ですから、CtrlとShiftキーを押しながらEnterで確定してください。
 元のデータが30文字以内で、区切りのスペースは全角のスペースを想定した数式です。
 (sato)

 漢字+カタカナというケースで、試作しました。
 配列数式ですので、大変、処理が重いです。                   (6UP) 

 B1に
 =IF(JIS(A1)=ASC(A1),""&A1,
 LEFT(A1,MATCH(1,
 (JIS(MID(A1,{2,3,4,5,6,7,8,9,10,11},1))<>ASC(MID(A1,{2,3,4,5,6,7,8,9,10,11},1)))
 *(JIS(MID(A1,{3,4,5,6,7,8,9,10,11,12},1))<>ASC(MID(A1,{3,4,5,6,7,8,9,10,11,12},1))),)))

 C1に
 =TRIM(SUBSTITUTE(A1,B1,,1))

   A               B        C
 1 美空ひばりミソラヒバリ    美空ひばり   ミソラヒバリ
 2 都はるみ ミヤコハルミ    都はるみ    ミヤコハルミ
 3 周 R美 チュウ ヒョンミ  周 R美    チュウ ヒョンミ 

 うーーん、
 すごい!
 (seiya)

 seiyaさん
 satoさん
 6UPさん

 色々とありがとうございますm(_ _)m

 satoさんの数式ですが、配列数式という言葉を初めて聞きまして、
 調べて試してみたのですがうまくいかず・・・
 どうやってもB1には“高田_純二_タカダ”と表示されてしまい、
 断念してしまいました。。せっかく教えてくださったのにすみません。

 6upさんの数式ですが、当方のデータも1,000人程度でしたので、
 重いといっても十分動いてくれましたので、安心しました。
 あと、satoさんと同じように配列数式とのことですが、
 Enterのみで表示されました。なぜなのでしょうか・・・?
 おかげさまで、やりたかったことができたことに感謝してます!

 みなさんありがとうございました。

 (乃愛)

 >Enterのみで表示されました。なぜなのでしょうか・・・?
 {配列}と配列定数を使用したらからです。
 下のようにしますと、Ctrl+Shift+Enterが必要です。        (6UP)

 =IF(JIS(A1)=ASC(A1),""&A1,
 LEFT(A1,MATCH(1,(JIS(MID(A1,ROW($2:$11),1))<>ASC(MID(A1,ROW($2:$11),1)))
 *(JIS(MID(A1,ROW($3:$12),1))<>ASC(MID(A1,ROW($3:$12),1))),)))

 ◆こんな方法もありますよ
	A	              B	      C
1	美空ひばりミソラヒバリ	     美空ひばり	 ミソラヒバリ
2	都はるみ ミヤコハルミ	     都はるみ	     ミヤコハルミ
3	周 R美 チュウ ヒョンミ	     周 R美	     チュウ ヒョンミ
4	高田純二 タカダジュンジ	     高田純二	     タカダジュンジ
5	高田 純二 タカダ ジュンジ	高田 純二	 タカダ ジュンジ

 B1=TRIM(LEFT(A1,MATCH(1,INDEX((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>9506)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<9588),),0)-1))

 C1=TRIM(SUBSTITUTE(A1,B1,))
 (Maron)

 Maronさんへ。
 ご自分の掲載したものは、確認してください。
 こちらも再度、ご覧ください。↓             (6UP)
[[20071226003353]]

 >=COUNTIF(A2:C2,">*")
 ◆のことでしょうか?
 ★ご指摘の通り、100%正確とは言い切れない式です。
 ★しかし、簡便であり日常的にあまり支障がないのでMaron自身使用しています
 ★今後本回答をする際は、正しくない答えがあることを添えたいと思います

 >ご自分の掲載したものは、確認してください
 ◆なお、今回の回答についてことであれば具体的にお教えください
 (Maron)


 >◆なお、今回の回答についてことであれば具体的にお教えください

 まだ、確認されていないのですね。
 あなたの提示された下の数式は、セルに入力できないようです。なにか関数を追加されていませんか?
B1=TRIM(LEFT(A1,MATCH(1,INDEX((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>9506)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<9588),),0)-1))

 >>=COUNTIF(A2:C2,">*")
 >◆のことでしょうか?

 そうです。質問された方の中には、*をワイルドカードと勘違いされる方も多いと思います。
 事例を提示させていただきましたが、(で始まる文字列などは、選択の対象外です。
 大変、紛らわしく、質問者が、知らずに使用した場合に予期しない結果が生じるおそれがあります。 (6UP)

 =TRIM(LEFT(A1,MATCH(1,INDEX((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>9506)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<9588),),0)-1))
 ★Excel2007で確認しましたが、セルに入力でき前回答のように名前が表示されましたが?

 ★Excel2003で確認してみますと、確かにセルに入力できません
 ★( が7つを超えているからでしょう
 ★Ver.を明示するか、汎用Ver.での回答にすべきだったと反省しています
 ◆ご指摘ありがとうございました
 (Maron)

 INDIRECT("1:"&LEN(A1))   ←この部分が循環参照と判定されてるようですね。
(純丸)(o^-')b

 ◆純丸さん、ありがとうございます
 (Maron)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.