- ベストアンサー
エクセルの以下の算式の説明をして欲しいです。Mshr1962さんの答えです。
A1にもとデータが入っているとして B1=MID(A1,3,SUMPRODUCT(NOT(ISERROR(VALUE(MID(A1,3,{1,2,3,4}))))*1))+0
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ご本人のご説明と併せて読んで見てください。 (1)前問の例で、OS1235着物23455と言う文字列があるとします。 OSは2桁でいつも固定と言う例です。 (2)=MID(A1,3,LEN(A1)-2)で「1235着物23455」となります。この部分に注目します。 (3)この1235の部分が1桁(OS1)、2桁(OS23)、3桁(OS321)、4桁(OS4321)、のいずれの場合も有りえるので、その桁数をどう捉えるかが問題です。 その桁数は、次に文字である「着物」が現れたところで桁数が決まりますよね。 (4)幸いISNUMBERという「数値(数字文字ではない)を判別する関数」が有りそれを使えそうです。 「1235着物23455」がC1にあるとします。 =ISNUMBER(MID($C$1,1,1)*1)*1は1を判別していて1 =ISNUMBER(MID($C$1,2,1)*1)*1は2で1 =ISNUMBER(MID($C$1,3,1)*1)*1は3で1 =ISNUMBER(MID($C$1,4,1)*1)*1は5で1 =ISNUMBER(MID($C$1,5,1)*1)*1は着で0 「*1」はISNUMBER関数が文字列数字1等だとTRUEにならないので*1して、数値化している。 それで数字文字の時TRUEが返るが、それを1にするために*1している。 そして上例は4桁という例ですが、4は1+1+1+1+0と加えた数が桁数を表して入ることを見ぬく。 その和を出すために SUMPRODUCT関数を使う。 (5)もう一つ難しいのはMID($C$1,3,1)の3の部分で、第1式では1、第2式では2のようになって、変化してくれなければ(しなければ)なりません。 これに配列数式{1,2,3,4}を使います。 この辺は経験しないと、思いつかない難しい点と思います。OKWEB回答でも初出? (6)結局 =MID(C1,1,SUMPRODUCT(ISNUMBER(MID($C$1,{1,2,3,4},1)*1)*1)) と入れて、SHIFT+CTRLキーを押しつつ、ENTERキーを押すと、式の前後に{と}がついて、上例では SUMPRODUCT(ISNUMBER(MID($C$1,{1,2,3,4},1)*1)*1) が4を返すので、=MID(C1,1,4)になって、「1235」を返す。あと「OS」を結合すると商品コードが出ます。 残り後半は =MID(A1,上記長さ+1、LEN(A1)-上記長さ+1) =MID(A1,LEN(C10)+1,LEN(A1)-LEN(C10)+1) のようになります。着物23455です。
その他の回答 (2)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 余計混乱するかも知れませんが、せっかくなのでB1の別解を。 =--MID(A1,3,COUNT(-MID(A1,3,{1,2,3,4}))) 基本的な考え方は、No.1の方と同じで、VALUE関数の変わりに「-」(-1を掛けるということ)を使用しています。 さらに、SUMPRODUCT+NOT+ISERRORを、COUNT関数1つにしています。
お礼
参考になったというべきかまだ1番の方の答えも理解していないので、・・・ ありがとうございました。 関数恐るべしという感じです。
- mshr1962
- ベストアンサー率39% (7417/18945)
mshr1962です。ちょっと説明が難しいのですが... MID(A1,3,{1,2,3,4})はA1の3桁目から1桁,2桁,3桁,4桁の文字を返します。 VALUE関数で数値化した場合、文字があると#VALUEのエラーになります。 NOT関数とISERROR関数で数値ならTRUE,文字(エラー)ならFALSEに置換しています。 SUMPRODUCTでTRUEを1,FALSEを0として加算しています。 上記でCR1テープなら1,CR9999テープなら4を返します。 要は何桁目までが数字かの判定を行っています。 最後にMID関数で3桁目から数字の桁分を抽出します。 ただこれは文字なので数字にするため+0しています。 各関数の詳細はヘルプで確認してください。
お礼
ご本人から説明いただいて感謝です。 レベルの違いというものを非常に実感する内容でした。 ありがとうございました。
お礼
細かい補足を丁寧にありがとうございました。 ただ今現在では全てを理解することが出来ないのであとでゆっくり印刷したものと私のファイルを比較して確認していってみようと思います。 ありがとうございました。