- ベストアンサー
エクセル:配列数式やINDIRECT(CxRy,1)の挙動について
modesut様がQNo.2487818でされている質問に答えられればと 頭を捻ったのですが (http://oshiete.coneco.net/kotaeru.php3?q=2487818) データはQNo.2487818のを流用させて頂くとして =INDIRECT("C10")とか =INDIRECT("c"&10)とかすると チャンと参照して6と応えるのに =INDIRECT(CONCATENATE("r",3,"c",10),1)とか (#REF!) =INDIRECT(TEXT(CONCATENATE("r",3,"c",10),"@"),1)とか (#REF!) =INDIRECT("c"&(MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))))とか (#VALUE!) =INDIRECT("c"&MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11)))とか (#N/A!) =INDIRECT(CONCATENATE("R",3,"C",MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))),1)とか (#N/A!) =INDIRECT("c"&TEXT(MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11)),"@"))とか (#N/A!) エラーに成ってしまいます 何故でしょうか? もう一つ 例えば上の例を流用して TRANSPOSE((D2=$A$2:$A$11)*(A2=$B$2:$B$11)*({0,1,2,3,4,5,6,7,8,9,10}))と ($D$2:$D$11)を結合して10行2列の配列を合成できたら データベース構文のCriteriaにも応用できそうだし 何よりVLOOKUPやHlookupのリストとして使えるので 便利そうだから出来ないのかな? と探したのですが見付けられませんでした 何か良い方法ありませんか? あと 文字列の1文字ずつを可変長の配列定数の要素の1つ々に分解するにはどうしたらいいでしょうか? (文字列は可変長な為) 例 text → {t,e,x,t} ストリングス → {ス,ト,リ,ン,グ,ス} "stringth" → {s,t,r,i,n,g,t,h} 注)全てマクロ系は使わずにお願いします m(_ _)m
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
◆可変長な式に >文字列の1文字ずつを可変長の配列定数の要素の1つ々に分解するにはどうしたらいいでしょうか? >(文字列は可変長な為) =MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)
その他の回答 (4)
- sige1701
- ベストアンサー率28% (74/260)
N03の回答の >配列数式にするとエラーは考えにくいですね >MATCH関数の検査範囲は、論理演算の結果としての0か1ですので・・ >D2、$A$2:$A$11、A2、$B$2:$B$11 にエラーがありませんか MATCH(検査値,検査範囲,照合の型) 質問者が提示した式では「照合の型」が省略されていますので、上記の表現をしました。(期待する値を得られるかは別にして) Ms.Rin さん回答のように「照合の型」を指定した方がいいと思います。 (「照合の型」を指定しない場合、Ms.Rinさん回答のおのおのの式は違う結果を出す場合があります。) Ms.Rinさんへ いつも、いろんな掲示板でご活躍ご苦労様です By しげちゃん
お礼
ご配慮有難う御座います 了解です 試してみますね
- rin01
- ベストアンサー率43% (33/76)
こんばんは~♪ みなさん。失礼しま~す。。。 INDIRECT と MATCH を使った場合 は、こんな式でもいいですね。。。 =INDIRECT("C"&MATCH(1,INDEX((D2&A2=$A$2:$A$11&$B$2:$B$11)*1,),0)+1) または =INDIRECT("C"&INDEX(MATCH(D2&A2,$A$2:$A$11&$B$2:$B$11,0)+1,)) INDEX MATCH を使って =INDEX($C$2:$C$11,INDEX(MATCH(D2&A2,$A$2:$A$11&$B$2:$B$11,0),)) ご参考にどうぞ~。。。 それから、 sige1701さんは、 あの しげちゃんさん なのかな~?? 。。。。Ms.Rin~♪♪
お礼
何時もお世話になってます 感謝です それにしてもMATCHて 何故配列数式なのか・・・?? indexとかVLOOKUPとかと基本理念的には挙動同じように思えるのに 仕様という名のバグなのでしょうか? (T_T)
- sige1701
- ベストアンサー率28% (74/260)
>でもN/Aだったり… (MATCH構文を「F9」で確認したところ >配列数式ではなく「10」と計算されました) >また、MATCHて >「配列要素を検索し適合する要素の要素番号を単一のシリアル値 >で返す」て、感じだと思うので あなたの提示した式を元に回答しています。 実際の表がどの様になっているのかこちらでは分かりません 「シリアル値」とはどこからでたのでしょう。 質問分には記載されていませんよ、また提示された式から、シリアル値が答えになることはありませんよ >かんですが配列数式じゃないような気がするのですが… ?? 配列数式です。 こんな感じでもいいかな(配列数式ではありません) =INDIRECT("c"&MATCH(1,INDEX((D2=$A$2:$A$11)*(A2=$B$2:$B$11),))) >ですがこの式でA1に「"stringthが」と入れて >配列数式を「F9」で確認したところ >「が」が切れているようでした A1に「stringthが」と入れて下さい 「"」 は必要ありません >更に場所依存性があるようで >範囲選択してずるっと動かすと字が消えてしまいました >残念!! >{}を数式に付けずに下へコピーしても上手く行ったので あなたが何をしたいのかさっぱり理解できません やりたいことは =MID($A$1,ROW(A1),1) だけでよかったのかな? 因みに >>MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))につい… >式の両端に例の{}をシフト・コントロール・エンターで付けても >エラーなどの状況は変わりなかったですし 配列数式にするとエラーは考えにくいですね MATCH関数の検査範囲は、論理演算の結果としての0か1ですので・・ D2、$A$2:$A$11、A2、$B$2:$B$11 にエラーがありませんか
お礼
謝罪します MATCHが配列数式であることを確認しました 失礼な発言をしたにも関わらす お心を砕いて頂いたこと 本当に感謝します これからもお手数をお掛けすることもあるかと思いますが 宜しくお願い致します
- sige1701
- ベストアンサー率28% (74/260)
>=INDIRECT(CONCATENATE("r",3,"c",10),1) INDIRECT(参照文字列,参照形式) 「参照形式」について調べてみましょう MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11)) については、配列数式なのでは? "stringth"がA1にあるとして =MID($A$1,ROW(A1:A8),1)
お礼
迅速な回答に感謝します まず やっぱり結合は難しいのですか? あと ヘルプとmaron--5さんの回答を参考に色々試したのですが INDIRECTのエラーは取れなかったです (T_T) >MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))につい… 式の両端に例の{}をシフト・コントロール・エンターで付けても エラーなどの状況は変わりなかったですし MATCH構文全体をMAX構文でくるんでも(効果ありますよね?)変わり中ってのですね また、MATCHて 「配列要素を検索し適合する要素の要素番号を単一のシリアル値で返す」 て、感じだと思うので かんですが配列数式じゃないような気がするのですが… ?? 底抜けに明るく振る舞い レースはしてそうですが… (陳謝) 文字列分割はどうやら慣用句なのですね 動作確認しました ですがこの式でA1に「"stringthが」と入れて 配列数式を「F9」で確認したところ 「が」が切れているようでした 更に場所依存性があるようで 範囲選択してずるっと動かすと字が消えてしまいました 残念!! {}を数式に付けずに下へコピーしても上手く行ったので おぉ~ぅ!! と思ったのですが… 何はともあれ有難う御座います (あと、「"」付いたままでした)
補足
ps =INDIRECT("r"&3&"c"&MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11)),1) じゃなく =INDIRECT("r"&MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))&"c"&3,0) なんですね? でもN/Aだったり… (MATCH構文を「F9」で確認したところ配列数式ではなく「10」と計算されました)
お礼
迅速な回答に感謝します 動作を再現できました(「"」は付いたままでした) (^^;) 有難う御座います て、いうか R1C1形式の書き方までさりげなく教えて頂けているなんて… 流石隅には置けないですね (^^;) これを拝見して思ったのですが この構文は配列数式の中から1要素ずつ取りだしてるように思いました 文字列は既に配列数式の一種として扱われているのでしょうか?