- ベストアンサー
【VALUE関数】について
例えば、C7のセルに【30005#10】がセルの中の左側にあるします。 この#の前の引数を抽出したい時には、 CHOOSE関数を使うと⇒CHOOSE(LEFT(C7,1),"◎","○","丸")となりますが VLOOKUP関数を使うと⇒VLOOKUP(VALUE(LEFT(C7,5)),記号集,2,0)になります。 これはなぜでしょう? 私は、セルの左にあるから【VALUE関数】を使えば良いと思っていましたが、どうやら違う様です。 この【VALUE関数】の見分け方と、このような時は【VALUE関数】を使えば良い というアドバイスを頂ければありがたいです。 年始早々すみません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>例えば、C7のセルに【30005#10】がセルの中の 「左側にあるします。」脱字でしょうか? 「左側にあるとします。」でよろしいですか? >この【VALUE関数】の見分け方と、このような時は【VALUE関数】を使えば良いというアドバイスを頂ければありがたいです。 VALE関数はアラビア数字で構成された文字列を数値に変換するために使います。 =VALUE("12345") C7に"30005#10"があり数値として30005に変換するには文字列を切り出さなければなりませんのでLEFT関数またはMID関数をVALUE関数の引数の中で使います。 文字列の中に境界となる文字列が固定の場合はFIND関数で位置を検出できます。 =FIND("#",C7) =VALUE(LEFT(C7,FIND("#",C7)-1)) ----> 30005 =LEFT(C7,FIND("#",C7)-1)*1 ----> 30005 文字列の中間に数値にできない不特定の文字の位置を検出するには次のような式を使うと良いでしょう。 =MIN(IFERROR(IF(MID(C7,ROW(A1:A100),1)*1>=0,""),ROW(A1:A100))) この数式はIFERROR関数で配列を返す必要があるので数式バーに入力後Ctrl+Shift+Enterで確定します。 C7セルの先頭から切り出す文字列は以下の式で良いことになります。 =LEFT(C7,MIN(IFERROR(IF(MID(C7,ROW(A1:A100),1)*1>=0,""),ROW(A1:A100)))-1) 更に数値に変換するにはVALUE関数を使う方法と切り出された文字列に1を掛けるか0を加える方法があります。 =(LEFT(C7,MIN(IFERROR(IF(MID(C7,ROW(A1:A100),1)*1>=0,""),ROW(A1:A100)))-1))*1 =(LEFT(C7,MIN(IFERROR(IF(MID(C7,ROW(A1:A100),1)*1>=0,""),ROW(A1:A100)))-1))+0 =VALUE(LEFT(C7,MIN(IFERROR(IF(MID(C7,ROW(A1:A100),1)*1>=0,""),ROW(A1:A100)))-1))