[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字の選択』(カナ)
毎日 こちらで勉強させてもらっています、関数とマクロの初心者です。
いろいろ調べて 下の関数を考えましたが、 他に もっといい方法がないものかなー と質問しました。
A列に、全角カタカナ・半角カタカナ・漢字の名前のデータがあります。(5,000行くらい)
※エクセルの学校・初めての方へ(詳細版)のほうに、 『習慣として半角カタカナを使わない』と書いてありましたので、 実際のデータが半角の所は、丸括弧の中に書きました。
A B C
1 名前 全角カナのみ 全角・半角カナ
2 ノムラ ○ ○ 3 ドウバヤシ ○ ○ 4 大野 5 イケガヤ(実際は半角) ○ 6 丸 7 ヤマモト(実際は半角) ○ 8 津田 9 キシモト ○ ○
B列・・・・・A列が全角カタカナのものだけに ”○” C列・・・・・A列が全角カタカナと半角カタカナのもの両方に ”○”
この2列を求める式を、現在、
B2に、=IF(A2="","",IF(AND(CODE(LEFT(A2,1))<=9586,CODE(LEFT(A2,1))>=9506),"○",""))
C2に、=IF(A2="","",IF(AND(CODE(LEFT(A2,1))<=221,CODE(LEFT(A2,1))>=116),"○",IF(AND(CODE(LEFT(A2,1))<=9586,CODE(LEFT(A2,1))>=9505),"○","")))
という関数を入れてA列の最終行までコピーしておりますが、 他に、もっといい方法があれば・・・・と思い、質問しました。
[エクセルのバージョン] Excel2007 [OSのバージョン] WindowsXP です。
どうぞ よろしくお願いします!
B2セル =REPT("○",(A2<>"")*(A2=PHONETIC(A2))) C2セル =REPT("○",(A2<>"")*(ASC(A2)=ASC(PHONETIC(A2)))) とか? (Jera)
B2 =IF(AND(C2="○",A2=JIS(A2)),"○","") C2 =IF(JIS(A2)=ASC(A2),"","○") とかでも?
(HANA)
なーるほど…^0^;やっぱ酔っ払っても頭固いなぁ… (Jera)
全角文字が好きなので ASC関数よりも JIS関数の方が好きです。 ↓その割には半角ですが。。。 (HANA)
そういえば、フリガナ情報が無い場合 PHONETIC関数は漢字をそのまま返すので 要注意ですね。。。
(HANA)
Jeraさん、HANAさん、速攻で教えていただいて、ありがとうございます。
お〜ぉ 目からウロコが出ました。 今、目がウロコです!
漢字は、ASCにならないということを頭において、 JIS関数とASC関数を、そのように便利に使うだなんて、考えもしませんでした。
≪ フリガナ情報が無い場合 PHONETIC関数は漢字をそのまま返す ≫
ぅぉお〜〜ぉ・・・・・大変 勉強になりました。
ありがとうございました!
(カナ)
おっと、すみません・・・・上の質問の応用で、追加質問をしても いいでしょうか?
A列の名前に、半角英字( 例えば、soyogi や、IWAMOTO )があった場合、
D列に 半角英字だけを”〇”とする式は・・・・
質問を投稿したところに書きました、CODE関数で求めることになるのでしょうか? それとも他にまた、奥深い ウロコの関数が・・・・?
しつこい質問者ですが・・・・宜しくお願いします!
(カナ)
CODE関数を使うのと大差ないですが AND("a"<=LEFT(A1,1),LEFT(A1,1)<="z") AND("a"<=A1,A1<=REPT("z",LEN(A1))) こんな判定くらいしか思いつかないです。
注:半角かどうかの判定は、別途必要です。
面白くないですね。。。
(HANA)
>フリガナ情報が無い場合 >PHONETIC関数は漢字をそのまま返すので >要注意ですね。。。
そうなんですよ、カナさん。ええ、ええ。 (万全を期するから一番遠いJera)
あ、先ほどの数式 間違ってましたので こそっと修正。。。
(HANA)
>D列に 半角英字だけを”〇”とする式は・・・・ =IF(AND(LEN(A2)=LENB(A2),NOT(EXACT(UPPER(A2),LOWER(A2)))),"○","") (Maron)
HANAさん、Jeraさん、夜も深いときに考えていただいて ありがとうございます。
Jeraさん、ほろ酔い状態から お目覚めになりましたでしょうか ^^ REPT関数を 初めて目にしました。調べてみたら、指定された値の分だけ繰り返し、グラフなどにも使えたりする関数なのですね〜 教えて下さって、ありがとうございます。 HANAさんの LEFT関数が使われた式ですが、恥ずかしながら、こちらもまた、関数歴何ヶ月かの私の発想の中には、ありませんでした。 "a"<= ・・・・ a(文字)と、同じか大きい。 A1<= ・・・・ A1(セル)と、同じか大きい。 Σ( ̄□ ̄?)なぬぅっ!! < > が使えるのは、数字だけ。という発想しかなかったもので、大変驚きました LEFT関数の、 "a"<=LEFT(A1,1) LEFT(A1,1)<="z" REPT関数の、 "a"<=A1 REPT("z",LEN(A1)) を、それぞれ別の列に入れて、A列の最終行までコピーしてみました。 ="a"<=LEFT(A1,1) と、="a"<=A1 が 2列とも、全部 TRUEになっていましたが、 A列の名前に、スペースや数字を入れてみると、FALSEに変わったので、 ぅぉおお〜〜 なるほど、そういうことなんだ〜 と、何時間もたって、やっと意味を理解できました。 教えてくださって、ありがとうございます! あ、えっと・・・・・う? ・・・・んみゅ? あら ・o・ もうひとつ・・・・ AND("a"<=LEFT(A1,1),LEFT(A1,1)<="z") の、 ――――――― ↓ ここの部分は、 AND("a"<=A1,A1<=REPT("z",LEN(A1))) の式の、 ―――― ↓ ここの部分と同じように、AND("a"<=A1,LEFT(A1,1)<="z") ではないのは、 LEFT繋がりで お揃いにしたとかいう事ではなく、他に何か 深いわけがあるのでしょうか・・・・!? 関数って面白いです、もう一度、研究してきます。 書き込んでいる途中で、Maronさんが 回答を下さっていました。気づかずに、失礼しました。 ありがとうございます! Maronさんの式も、今から研究してきます! (カナ)
>D列に 半角英字だけを”〇”とする式は・・・・ ◆CODE関数を使用するなら、こんな方法もありますよ ★文字だけの入力ならば、 =IF(MATCH(CODE(A1),{0,65,123})=2,"○","")
★精度を上げるならば、 =IF(OR(MATCH(CODE(A1),{0,65,91,97,123})={2,4}),"○","") (Maron)
Maronさん、CODE関数の式をMATCH関数と組み合わせると、そんなに短くなるのですねー ありがとうございます。 関数の組み合わせ、勉強になります! (カナ)
結果的には >LEFT繋がりで お揃いにした って感じです。
ただ、言い方としては「考え方が違う」から、式が違ってます。
(HANA)
あ、なるほどー HANAさん、ありがとうございます。 本や、インターネットで調べるだけではわからないことが 非常に参考になりました。
(カナ)
カタカナや英字の文字を式で求めるには、COAD関数を使わなくても、十二分に できることがわかりましたが、 今後の参考にと調べて行くと、立て続けに疑問が…… Maronさんから教わった、 ★精度を上げるならば、=IF(OR(MATCH(CODE(A1),{0,65,91,97,123})={2,4}),"○","") の式についてです。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ↓ ↓ チャー?という関数と、IMEパッドで位置を見てみました。 この文字は、"「 " と、" 」" のような…… ( 0は#VALUEになりました ) A,[,a,{ でも値で貼りつけられません。IMEパッドでも見つけられませんでした。 質問です。 OR(MATCH(CODE(A1),{0,65,91,97,123})={2,4}) の意味を教えていただけませんでしょうか? よろしくお願いします! (カナ)
>OR(MATCH(CODE(A1),{0,65,91,97,123})={2,4}) の意味を教えていただけませんでしょうか ◆MATCH関数は、MATCH(検索値,検索範囲[,照合の型])=相対的な位置 ◆照合の型は-1,0,1のいずれかで検索の方法を指定します(なお、省略すると1) ◆1(または省略)は、検索値で指定した値以下の最大値が検索され、この場合は検査範囲のデータは昇順に並べておきます ◆MATCH(CODE(A1),{0,65,91,97,123})は、A1の先頭の文字のコードが、 0以上65未満ならば「1」、65以上91未満ならば「2」、91以上97未満ならば「3」、 97以上123未満ならば「4」、123以上ならば「5」を返します ◆OR(MATCH(CODE(A1),{0,65,91,97,123})={2,4}) そのMATCHの値が、2または4ならばという式になります ◆これでお分かりいただけると思います (Maron)
うお〜 Maronさん、ありがとうございます! MATCH関数の最初の中カッコの、{ } の中は、〜以上〜未満 という意味だったのですね。 あとの中カッコは、その値の数字だったなんて…… インターネットや本で調べてみても、どこにも書いてない、すごい裏ワザ式です。 Jeraさん、HANAさんの目からウロコの式も、こちらで質問しなければ、きっとわからなかったです。
しつこく質問し、お手数をお掛けして、すみませんでした。 勉強させていただき、感謝しております。 (カナ)
【補足】 ◆A1に「0」、B1に「65」、C1に「91」、D1に「97」、E1に「123」と入力して、 ◆A2に、=A1:E1 と入力して、A2を指定して、数式バーの=A1:E1を指定して、「F9」をクリックしてください ◆{0,65,91,97,123}と表示されます、 ◆MATCH関数での検索範囲 {0,65,91,97,123}はこの場合の=A1:E1 とおなじです (Maron)
ん?… にゃぬ!? ぃやぃや〜 Maronさん、F9 の裏ワザの威力を初めて知りました。 数式を値で残してくれるキーだったなんて。 ぎょえー凄い…… { }の意味が、ひときわ よく理解できました。範囲を値であらわすと、{ } になるのですね。 ということは、もしかしたら ひとつのセルだけじゃなくて、例えば 数式が入っている10セルの範囲を指定してF9を押したら、 その範囲全部の値の貼り付けができるのかな? ⇒ やってみまして、できませんでした。 ひとつのセルだけの場合なのですね。
Jeraさん、HANAさんの式を合わせると、今の所、目からウロコが 12個は出たと記憶しています。 ほんとうに ありがとうございます。またウロコが目に詰まった時は、こちらで質問をさせていただきます。宜しくお願いします。 (カナ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.