[[20120501223747]] 『文字の選択』(カナ) ページの最後に飛ぶ

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

 

『文字の選択』(カナ)

 毎日 こちらで勉強させてもらっています、関数とマクロの初心者です。

 いろいろ調べて 下の関数を考えましたが、
 他に もっといい方法がないものかなー と質問しました。

 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.