『文字の選択』(カナ) 毎日 こちらで勉強させてもらっています、関数とマクロの初心者です。 いろいろ調べて 下の関数を考えましたが、 他に もっといい方法がないものかなー と質問しました。 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個は出たと記憶しています。 ほんとうに ありがとうございます。またウロコが目に詰まった時は、こちらで質問をさせていただきます。宜しくお願いします。                                       (カナ)