• 締切済み

Excel 関数

先日こちらで、「数字と文字が含まれるもの(左に数字、右に文字の場合)の、文字までの(スペースを含む)桁数を表す関数(例えば{11 3D}であれば4を返すような関数 )」を教わりました。以下の関数です。 =MATCH(1,INDEX(N((MID(A1,ROW(A:A),1))>"9"),0),0) 正しく動いてくれたのですが正直なところ、知識がまだ浅く、一つ一つの関数の意味はわかっても全体としては全然理解できませんでした。また数字の9に””を付ける意味も全くわかりません。。。 詳しい方、理解できるように、できるだけ詳しく教えていただけませんでしょうか。

みんなの回答

回答No.3

この関数は、配列という考え方が使われるため複雑です。 ●まず、配列を使わずに関数の働きを追います。 A1="11 3DE" として、配列のかわりに5を代入すると MID(A1,5,1) ="D" (MID(A1,5,1))>"9" =true   数字の大小でなく、文字コードの大小を比較させるため"9"と表記します   簡単に言うと    数字と空白= 9以下の文字コード →false    数字以外 = 9を超える文字コード →true   となります。 N((MID(A1,5,1))>"9")=1  true→1、false→0と変換します。 ●次に配列を使った場合です。 配列とは値の集合で、excelでは{9,8,7}のように表します。 ※セルへ ={9,8,7}など入力しても、先頭の9しか表示されません。 関数へ配列を代入すると、それぞれの値へ関数計算が行われ、新しい配列が返されます。 仮に、{1,2,3,4,5,6}という配列を用いて考えます。 MID(A1,{1,2,3,4,5,6},1) ={1,1, ,3,D,E}  ※先頭の1しか表示されず (MID(A1,{1,2,3,4,5,6},1))>"9" ={false,false,false,false,true,true} N((MID(A1,{1,2,3,4,5,6},1))>"9") ={0,0,0,0,1,1} ●次にmatch関数の働きについてです 入力された配列を左から検索し、値が合致した要素の番号を出力します。 例: match(6,{3,6,9,12,15},0)=2 今回の関数では、1を検出すれば良いので、 match(1, N((MID(A1,{1,2,3,4,5,6},1))>"9") ,0)=4 ・・・(1) となります。 この式でも、文字Dが4桁目にある事を出力できます。 ●最後に、ROW関数、INDEX関数についてです。 {1,2,3,4,5,6}という書き方では、7桁以上が入力されると正しく動きません。 任意の桁数に対応するために、ROW関数を使って大きな集合を作ります。 ROW(A:A)≒{1,2,3....,1048576} ROW関数を使う場合、配列をMATCH関数へ渡すためにはindex関数を使う事が必要です。 そのため、 MATCH(1,INDEX(N((MID(A1,ROW(A:A),1))>"9"),0),0) という書き方になります。 もし最大桁数が分かっているなら、式(1)のような記述でも問題無いです。

全文を見る
すると、全ての回答が全文表示されます。
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

提示の数式は私の提言かと思います。 >一つ一つの関数の意味はわかっても全体としては全然理解できませんでした。 数式全体の解説が必要のようですね。 INDEX関数の中でA1セルの文字列を1文字ずつに切り分けて文字コードが"9"より大きい文字に対して1を、それ以外を0に置き換えた配列値を対象にMATCH関数で1の位置を検出する方法で目的の文字数を算出しています。 >また数字の9に””を付ける意味も全くわかりません。 文字を対象に大小を比較していますのでMID関数で1文字単位に切り出された文字の比較対象として数値の9ではなく文字列の9("9")との大小(文字コードで)が対象になります。 前回の質問( https://okwave.jp/qa/q9388298.html )では数字と半角の空白以外の文字が最初に現れた文字までの文字数を返す数式を要求されています。

全文を見る
すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

ひとつ確認したいことが・・・ 貴方が書いた{11 3D}の両端の括弧を除いたものは 11 3D について、数字は全て全角文字、アルファベットと「3」の左のスペースは半角文字。それでよろしいのですか?!

bitamin123456
質問者

補足

すみません、わかりにくくて。。。 全て半角です。誤解する表記で申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MID関数について

    一桁から八桁までの任意の数字を1セルごとに分けたいのですが、MID関数では左から取り出すため桁数が変化すると使えません。 一桁目にMID(A1,1,1)から八桁目にMID(A1、8,1)を入れると1234が4321と逆になってしまいます。 12でも12345678と桁が違っても1セルごとにわけることはできないでしょうか

  • EXCEL MID関数の文字数について!

    セルA1 12×1240×2280 セルA2 3×1240×2280 セルA3 5.5×1240×2280 ↑こんな風にセルの中に数字が入っているのでMID関数で セルA1 =MID(A1,1,2)→12 セルA2 =MID(A2,1,1)→3 セルA3 =MID(A3,1,3)→5.5 と答えが出ます。でもA列の桁数によりMID関数の文字数を変えなければなりません。 一気に出せる方法はないでしょうか?? おわかりの方教えてくださーい!

  • エクセル関数について

    A列とB列に氏名を入れてA列にあってB列にないものを取り出す為に=IFERROR(INDEX($A$2:$A$8,SMALL(IF(ISNA(MATCH($A$2:$A$8,$B$2:$B$8,0)),ROW($A$2:$A$8)-1),ROW()-1),1),"")の関数をⅮ列に入れ下にオオートフィルしたのですが、思うように表示されません。  関数が間違っているのか判りません。 何か良い方法はあれば教えてください。

  • EXCEL 2010 VBAまたは関数について

    こんにちは 初投稿です。 早速ですが、VBAまたは関数について質問させて頂きたいのですが・・・ 一つのセルに複数の数字と文字列がセルのE1混ざっている場合, (12345abc678cdef9ghijk)と入っている場合 にこの例で行くとセルのA1に12345セルB1に678セルC1に9というように数字で表示させたいのです が、最初関数で A1=VALUE(MID(E1,1,5)) B1=VALUE(MID(E1,9,3)) C1=VALUE(MID(E1,16,1)) と言う形で数字だけ抜き出していたのですが これだと数字の桁数が違ってくる(※正し文字列の長さは一緒 数字だけが桁が違ってきます) と表示されなくなってしまうため、 出来れば関数をいじらなくても表示されるようにしたいのです。 VBAもしくは関数でこの問題を解決出来る方がいらっしゃるなら どうぞよろしくお願い致します。 長文失礼致しました。 | A | B | C | D | E | ------------------------------------------------ 1 | 12345 | 678 | 9 | | 12345abc678cdef9ghijk | 2 | | | | | |

  • match関数とindex関数について

    B列に空白を含む連続した数値の配列において、空欄と空欄の間の数値の個数を数える式として、以下の式を見たことがあります。 =IF(AND(B9<>"",B10=""),IF(ROW(B9)=COUNT($B$1:B9),ROW(B9),ROW(B9)-MATCH(1,INDEX(0/($B$1:B9=""),0))),"") 確かにこの式で求める答えが出るのですが、式の最後の「MATCH(1,INDEX(0/($B$1:B9=""),0)」の意味がよく分かりません。 ・MATCH関数の範囲としているINDEXの内容はどういう意味なのか ・MATCH関数の検査値としている「1」はどういう意味なのか ご教授願います。

  • EXCEL 数字の切り出し方法

    こんばんは。 各行に数字が入力されています。 桁数は6桁、5桁、4桁とマチマチです。 この各数字の右から4つめから左方向の 数字を抜き出したいのですが、できますでしょうか? ちなみに、LEFT関数は左から右へmid関数は、 左から指定の桁数からの抜き出しのようです。 ぜひ、教えてください。 (例)25467・・・25を抜き出したい     7683・・・7 7476876・・・7476 というかんじです。

  • エクセル MID関数

    MID関数で表示した文字列が、数字として認識されません。 MID関数で表示された数字が10とします。セルはA1とします。 その後、IF式で =if(A1<5,10,0) とすると、結果は0になるはずなのに、常に真の値、10になってしまいます。 原因は、MID関数で表示された数字が文字列として認識しているからと考えられますが、対象方法をご存知の方がおりましたら教えてください。 よろしくお願いします。

  • エクセルで英数字の文字列から数字を抽出

    エクセルで英数字を含む文字列から数字を抽出く =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0),COUNT(1*MID(A1,ROW($1:$9),1))) 小数点にも対応させるにはどうしたら良いでしょうか。 「AA0.45」→0.45 「0.65BB」→0.65 「CC0.85CC」→0.85 http://office.microsoft.com/ja-jp/excel-help/HA001154901.aspx を参照しました

  • エクセルの関数

    VLOOKUP関数とINDEX+MATCH関数の使い分けが良く分かりません。 VLOOKUP関数が検索値と完全一致するものを検索         検索値と一致する値がない時データを昇順に並べ替えて検索値未満を検索 INDEX+MATCH関数もMATCH関数があるから似た事ができると思うのですがどうでしょうか? この2つがいまひとつ理解ができません。分かりやすい説明をいただければ幸いです。 よろしくお願いします。

  • エクセルの関数について

    いつもお世話になっております。 エクセルの関数についてお尋ねします。 (例) A1に 12/09/2013 16:00:06 という文字列があり、これをB1でシリアル値に変更しようと考えています。 MID(A1,7,4)&"/"&LEFT(A1,5)&MID(A1,11,9) ⇒ 2013/12/09 16:00:06(文字列) (MID(A1,7,4)&"/"&LEFT(A1,5)&MID(A1,11,9))*1 ⇒41612.7086111111 と*1する事によってシリアル値に変換されてるわけですが、この『×1』はどのような意味なのでしょうか? 知らないで使っているのが気持ち悪いのでどなたかよろしくお願いいたします。

専門家に質問してみよう