• ベストアンサー

エクセル、この関数の意味は?

以前、質問をして、いただいた関数ですが よくみると、理解できないところが 2箇所ありました どなたかご教授願います LEFT(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},ASC(A1)&1234567890))-1) アルファベット(左側)と数字(右側)を分けるための関数ですが 上記は左側にあるアルファベットを取り出すためのものです FIND({1,2,3,4,5,6,7,8,9,0},ASC(A1)&1234567890)の中の (1){1,2,3,4,5,6,7,8,9,0}がなぜ配列になっているのか (2)ASC(A1)&1234567890はなぜ「&1234567890」をつけているのか 理解できません よろしくお願いいたします

noname#96506
noname#96506

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

(1){1,2,3,4,5,6,7,8,9,0}がなぜ配列になっているのか A1の中から数値を見つけるためですね。{0-9}のような書き方でもOKです。 上記の場合、MIN関数を使うことで初めの数値のある桁数を抽出できます。 (2)ASC(A1)&1234567890はなぜ「&1234567890」をつけているのか FIND関数は文字列の中に対象の文字がない場合エラーが表示され計算が中断されます。 文字列の後方に検索する文字をつけることでエラーを回避しているのです。

noname#96506
質問者

お礼

ありがとうございます 別例【{0-9}のような書き方でもOKです】まで 教えていただいて 大変助かります

その他の回答 (3)

noname#204879
noname#204879
回答No.4

(1){1,2,3,4,5,6,7,8,9,0}がなぜ配列になっているのか   全ての数字を一度で次々と検索するため。結果も配列となる。 (2)ASC(A1)&1234567890はなぜ「&1234567890」をつけているのか   全ての数字をエラーなしで検索可能とするため

noname#96506
質問者

お礼

回答ありがとうございます 的確で大変わかりやすく 助かります

noname#22222
noname#22222
回答No.3

A1=aaa1234567890 であれば、 =MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1)) は 4 になります。 が、 A1=aaa123456789 では、#Value! と表示されます。 これは、0 の検索に失敗したからです。 =MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1 & "0")) で、この不具合は回避されます。 A1=aaa12345678 の9と0の検索に失敗する不具合を解消するには =MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1 & "90")) で、結局 A1=aaa の場合の不具合対策として、 =MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1 & "1234567890")) 「全部ダミーをくっつけちゃえ!」ということでしょう。

noname#96506
質問者

お礼

回答ありがとうございます 例が大変わかりやすくて助かります どういった意味でのエラー回避なのか 理解できました

回答No.1

1.1から0をそれぞれFINDで探しているのでは?その中の最小値が先頭の数字の位置になります。 2.エラー回避(末尾に付けておけば必ず値が返るので)だと思います。

noname#96506
質問者

お礼

早速の回答ありがとうございます 大変助かります

関連するQ&A

  • エクセル文字列抽出関数についての補足説明のお願い

    エクセルの使用歴は長いのですが、簡単な関数以外使ったことがない初心者です。 文字列の中から、英字と数字を抜き出す関数を検索し、たどり着きました。 やりたいことは解決したのですが、入力した式の意味がわかりません。 以下の式で、関数の書式や目的は調べることが出来ますが、なぜそう言う処理を行うと、 英字と数字に分離できるかを初心者にわかりやすく教えて下さい。 宜しくお願い致します。 -------------------------------- A1に「aaaa1111」があるとき B1に  =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))-1) C1に  =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)) で「aaaa」と「1111」が分離できます 以上

  • このエクセルの複雑な関数を訳してください!

    こんにちは。 これから年賀状の季節ということで、エクセルでリストを作成し、印刷にまでこぎつけたいと思うのですが、「(株)や(有)を除いた会社名順に並び替えたい」と考えております。 そこで、こちらのOkwebで検索したところ、下記のような式がアドバイスされていました。とてもありがたいです。 ただ、こちらをそのまま使わせていただいてもかまわないのですが、式に興味を持ち、自分で辞書をひいて調べたところ、構造が理解できませんでした。 そこで、どなたかこちらのエクセルの式を訳していただけないでしょうか。 =CONCATENATE(LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1),MID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1,LEN(PHONETIC(A2)))) CONCATENATE関数で、LEFT関数・MID関数・LEN関数で出したものを結合する? ・LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1) ・MID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1 ・LEN(PHONETIC(A2) このようにわけられるものでしょうか。 アドバイス、よろしくお願いします!

  • エクセルの関数を教えてください!

    840   1 1260  1 1260  1 1260  1 1890  2 1890  1 1890  1 2310  3 2646  1 2646  1 2940  4 この2列の数字は左側の数字に対して、右側が その数字の個数なのですが、 左の数字が統合され、それに対して右の数値が加算される エクセルの関数を教えてください。

  • エクセル関数を教えてください!

    840 1 1260 1 1260 1 1260 1 1890 2 1890 1 1890 1 2310 3 2646 1 2646 1 2940 4 この2列の数字は左側の数字に対して、右側が その数字の個数なのですが、 左の数字が統合され、それに対して右の数値が加算される エクセルの関数を教えてください。

  • エクセル 関数 文字列を分ける

    23Ar23 28Ar05 3Ta16 8Ta07 11Ta53 14Ta21 …以下多数 のように文字列があって、アルファベット前の数字(1文字か2文字)、アルファベット(2文字)、アルファベット後の数字(2文字)の3つに分割したいのです。データ区切り位置の機能を使えれば簡単ですが、アルファベットの前の文字数が1字と2字のものがあるのでできません。RIGHT、LEFTの関数を使用すれば、アルファベット2文字とアルファベット後の数字2文字は抽出できますが、アルファベット前の数字(1文字か2文字)だけ取り出せません。 関数か何かの方法で文字数を分ける方法を教えてください。

  • エクセル関数

    エクセル関数が今一よく理解できてません。 A1からA3の各セルに、ランダムに1から5のうち3つの数字が入ります。 A1からA3のセル内に、「1」があればA4のセルに「●」を、 A1からA3のセル内に、「2」があればA5のセルに「●」を、 A1からA3のセル内に、「3」があればA6のセルに「●」を、 と同様に4があればはA7に、5があればA8のセルに「●」をうつ表を作成しました。A1からA3のセルは、左側から昇順に並んでいます。この場合、どんな関数を使えばよいか教えてください。

  • エクセルで文字列を抽出する関数

    エクセルでデータ処理をしています。 例えばA列に Iwate kenichi Akita hachiro gata (1992) Yamagata shi,1905 というデータがあり、同じ関数を使ってそれぞれB列に Iwate kenichi Akita hachiro gata Yamagata shi と抽出したいので、 =IF(FIND("(",A1),LEFT(A1,FIND("(",A1)-1),IF(FIND(",",A1),LEFT(A1,FIND(",",A1)-1),A1))という式を作ってみましたが、うまく処理できません。 どのような式を作れば上手くいきますか?マクロは使えませんので、関数でお願い致します。

  • Excel 関数について

    AND ASC AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS COLUMN COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS DATE DAY FIND HLOOKUP HOUR IF IFERROR INDEX INDIRECT JIS LARGE LEFT LEN LOWER MATCH MAX MEDIAN MID MIN MINUTE MOD MODE MONTH NOT OR PHONETIC PROPER RANK RIGHT ROUNDDOWN ROUNDUP ROW SECOND SMALL SUM SUMIF SUMIFS TEXT UPPER VLOOKUP WEEKDAY WORKDAY WORKDAY.INTL YEAR これくらい自由に使えますが、一般企業で使用するならこれくらい使えればいいですか。 また、これはよく使うという関数を教えてください(表記以外で)

  • エクセル関数で住所から丁目番地、建物名を抽出したい

    エクセルで関数を使って、住所から、都道府県、市区町村、丁目番地、建物名をそれぞれ抽出するにはどうしたらよいですか? いま、C列に住所が入っています。 D列に、=LEFT(C3,4-SUM((MID(C3,3,1)={"都","道","府","県"})*1))という関数で都道府県を抽出しました。 F列に、=IF(E2="東京都", IF(COUNT(FIND({"東村山","武蔵村","羽村市"},LEFT(I2,3))), LEFT(I2,FIND("市",I2)), LEFT(I2,MIN(FIND({"市","区","町","村"},I2&"市区町村",2))) ), IF(COUNT(FIND({"今市市","四日市","八日市","廿日市"},LEFT(I2,3))), LEFT(I2,FIND("市",I2,FIND("市",I2)+1)), IF(IF(COUNT(FIND({"蒲郡市","大和郡","小郡市"},LEFT(I2,3))),"市",IF(COUNT(FIND({"余市郡","高市郡"},LEFT(I2,3))),"郡",MID(I2,MIN(FIND({"市","郡"},I2&"市郡",2)),1)))="市", IF(COUNT(FIND({"札幌市","仙台市","千葉市","横浜市","川崎市","名古屋","京都市","大阪市","神戸市","広島市","北九州","福岡市"},LEFT(I2,3))), LEFT(I2,FIND("区",I2)), LEFT(I2,FIND("市",I2,2)) ), IF(COUNT(FIND({"佐波郡玉村","恵那郡岩村","東宇和郡野","杵島郡大町","北松浦郡鹿"},LEFT(I2,5))), LEFT(I2,FIND("郡",I2)+3), LEFT(I2,MIN(FIND({"町","村"},I2&"町村",FIND("郡",I2)+2))) ) ) ) ) という関数を使って市区町村を抽出しました。 あとは、丁目番地と建物名を別々のセルに抽出したいです。 よきアドバイスをお願いいたします。 区切りに半角空いてるとかいうことはありません。 膨大な住所録を処理したいので、例外が多いのは使えません。 なかなか厳しい質問だとは思いますが、どうぞご教授くださいませ。よろしくお願いいたします。

  • Excel 関数

    文字と数字(例えば111aaa)から、数字だけを抽出する関数を作ろうとしたら上手くいかず、ネット上で調べたら次のようなものが出てきました。 =LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1) となっていました。うまく作動はするのですがどうも意味がわからないところがあります。 Q, Column($1:$1)を単独で用いると1を返します。それをLEFTの文字数に表したところで1しか表さないと思うのですが、lookupまで用いると、lookupで探している値に近くなる数字を探し、Column($1:$1)が任意に動いているような挙動をしています。これはなぜなのでしょうか?

専門家に質問してみよう