• ベストアンサー

エクセル:配列数式や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

  • Nouble
  • お礼率91% (1698/1856)

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆可変長な式に >文字列の1文字ずつを可変長の配列定数の要素の1つ々に分解するにはどうしたらいいでしょうか? >(文字列は可変長な為) =MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)

Nouble
質問者

お礼

迅速な回答に感謝します 動作を再現できました(「"」は付いたままでした) (^^;) 有難う御座います て、いうか R1C1形式の書き方までさりげなく教えて頂けているなんて… 流石隅には置けないですね (^^;) これを拝見して思ったのですが この構文は配列数式の中から1要素ずつ取りだしてるように思いました 文字列は既に配列数式の一種として扱われているのでしょうか?

その他の回答 (4)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.5

N03の回答の >配列数式にするとエラーは考えにくいですね >MATCH関数の検査範囲は、論理演算の結果としての0か1ですので・・ >D2、$A$2:$A$11、A2、$B$2:$B$11 にエラーがありませんか MATCH(検査値,検査範囲,照合の型) 質問者が提示した式では「照合の型」が省略されていますので、上記の表現をしました。(期待する値を得られるかは別にして) Ms.Rin さん回答のように「照合の型」を指定した方がいいと思います。 (「照合の型」を指定しない場合、Ms.Rinさん回答のおのおのの式は違う結果を出す場合があります。) Ms.Rinさんへ いつも、いろんな掲示板でご活躍ご苦労様です   By しげちゃん

Nouble
質問者

お礼

ご配慮有難う御座います 了解です 試してみますね

  • rin01
  • ベストアンサー率43% (33/76)
回答No.4

こんばんは~♪ みなさん。失礼しま~す。。。 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~♪♪

Nouble
質問者

お礼

何時もお世話になってます 感謝です それにしてもMATCHて 何故配列数式なのか・・・?? indexとかVLOOKUPとかと基本理念的には挙動同じように思えるのに 仕様という名のバグなのでしょうか?   (T_T)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.3

>でも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 にエラーがありませんか

Nouble
質問者

お礼

謝罪します MATCHが配列数式であることを確認しました 失礼な発言をしたにも関わらす お心を砕いて頂いたこと 本当に感謝します これからもお手数をお掛けすることもあるかと思いますが 宜しくお願い致します

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.1

>=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)

Nouble
質問者

お礼

迅速な回答に感謝します まず やっぱり結合は難しいのですか? あと ヘルプとmaron--5さんの回答を参考に色々試したのですが INDIRECTのエラーは取れなかったです    (T_T) >MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))につい… 式の両端に例の{}をシフト・コントロール・エンターで付けても エラーなどの状況は変わりなかったですし MATCH構文全体をMAX構文でくるんでも(効果ありますよね?)変わり中ってのですね また、MATCHて 「配列要素を検索し適合する要素の要素番号を単一のシリアル値で返す」 て、感じだと思うので かんですが配列数式じゃないような気がするのですが… ?? 底抜けに明るく振る舞い レースはしてそうですが…                                                                (陳謝) 文字列分割はどうやら慣用句なのですね 動作確認しました ですがこの式でA1に「"stringthが」と入れて 配列数式を「F9」で確認したところ 「が」が切れているようでした 更に場所依存性があるようで 範囲選択してずるっと動かすと字が消えてしまいました 残念!! {}を数式に付けずに下へコピーしても上手く行ったので おぉ~ぅ!! と思ったのですが… 何はともあれ有難う御座います (あと、「"」付いたままでした)

Nouble
質問者

補足

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」と計算されました)

関連するQ&A

  • エクセル配列数式について

    A列(A3:A42)に氏名 B列(B3:B42)に性別 C列(C3:C42)に第1回テスト成績 D列(D3:D42)に第2回テスト成績 が入力してあります。 性別が"男" かつ 第1回テスト成績が350以上 かつ 第2回テスト成績が350以上 の条件を満たす配列数式を {=COUNT(IF((B3:B42="男")*(C3:C42>=350)*(D3:D42>=350),B3:B42,""))} だと正しい回答がでません IFの真の場合の欄をC3:C42またはD3:D42にすると正しい値がでます なぜC3:C42だとだめなのでしょうか?

  • エクセル 配列数式+ワイルドカードの使い方

    以下のように、列A,BにそれぞれA,B,Cまた、D,E,Fで始まるデータが存在します。 そのデータ数をサマリーするテーブルを列C-列Fに作成しようとしております。 たとえば、列D,2行目の???には、列AはAで始まり、かつ列BはDで始まるデータの数を数えたいと思ってます。 "???"の列に記述すべき数式を教えていただけないでしょうか? -----データ------------- --------サマリーテーブル---- 列A 列B 列C 列D 列E 列F 1 ABC DDD D* E* F* 2 ABB DFE A* ??? ??? ??? 3 AAB EFF B* ??? ??? ??? 4 CBB FGH C* ??? ??? ??? 5 BAC EGG 6 CAD FFF 7 BBB DGD 8 BCB DGG

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

    エクセルの数式について詳しい方がいらっしゃれば教えていただけないでしょうか。 例えば、 (1)M28セルに以下の数式が入っているとします。 =IF(INDIRECT(M$19)="","",IF(SUMIF(INDIRECT(M$20),$D27,INDIRECT(M$21))=0,"",SUMIF(INDIRECT(M$20),$D27,INDIRECT(M$21)))) (1)の数式で参照しているセルとして以下のものがあります。 (2)M19セル⇒=CONCATENATE("'計算'!",M13,)&$D$14 (3)M20セル⇒="'計算'!AR6:"&"AR"&$D$15+1 (4)M21セル⇒=CONCATENATE("'計算'!",M13)&$C$16+1&CONCATENATE(":",M13)&$D$16+1 (5)M13セル⇒N(文字列のみ) (6)D14セル⇒152(数値のみ) (7)C16セル⇒5(数値のみ) (8)D16セル⇒150(数値のみ) (9)D27セル⇒1-1(文字列のみ) そこで質問ですが、(1)の式で参照している、M$19やM$20、M$21がどこのセルを参照しているかわからないのです。 例えば、(2)の式では、M19セルには、『'計算'!N152』と表示されます。この数式とその結果としてM19に『'計算'!N152』と表示されるのはわかります。が、『'計算'!N152』がどこのセルのことを言っているのかがわかりません。 『!』があるので、『計算』というワークシートのN152を参照しているのかな・・・?とも思ったのですが違いますよね?! 因みに当ブックの中には『計算』というワークシートはありませんでした。 きちんと説明できている不安ですが、回答いただけると大変助かります。 宜しくお願い申し上げます。

  • エクセルの数式について。

    A1に1 B1に2が入っているとします。 C1セルに ="a"&1+"b"&1と代入すると  結果は =a1+b1 と表示されます。(当たり前ですね) その結果を、バリューのみD1セルに貼り付け(この段階では、=a1+b1としか表示されません)、カーソルをフォーカス、フォーカスを外すと3と答えが出ます。 この一連の動きをなんとか一発でやる方法は無いでしょうか? 実際の例 sheet1A列に患者名、sheet1B列にPCP(プライマリー ケア フィジシャン)かかりつけの医者と判断してください 患者は必ず1人PCPを持ち、PCPがダブルことはありません。(PKというのかな?) 別のシートに医療請求リストがあり、 sheet2A列に患者名、sheet2B列にPCP、sheet2C列に実際に治療したドクターの名前を入れれるようなファンクションを作っています。 A列とC列は自動に取得できるようになっているんですが、B列だけは、現在手作業で入れているとのこと、 ="=Sheet1!B"&MATCH(A1,Sheet1!A:A,0) この結果をコピー&バリューのみのペーストをすると、テキストで”数式”が表示されます。 望む結果は数式ではなく、PCPを出したいと思っています。 昔やったときはなんとなくうまく動いたような記憶があるんですが、バージョンの違いで動かないのか?少し疑問です。 コンキャットで作り出したのだから、数式ではなくタダのテキストだ!といわれそうですが、タダのテキストを数式のフォーマットに変換できるような手法がもしあれば、よろしくご教授ください。 データベース化したら、ものすごく簡単な問題なんですが、ガンとしてアクセスを使いたがらないので、エクセルでどうにか?してやろうと考えています。 よろしくお願いします。

  • エクセルの配列数式について教えてください。

    A2~A30まで月~土のテキストデータ 1行目は見出しでA1~F1まで  レジホール1ホール2キッチン1キッチン2キッチン3 月A B   C   D   Z    Y 火R T   X   A   C    M 水 木 金 土 ・ ・ ・ 条件1:祝日休みなので、曜日はとぶ場合もあります。 条件2:表の中身は担当者(A~Zの26人) 条件3:担当者は全ポジションできます。 条件4:同じ行でたとえばAが2回以上でることはありません。 条件5:各担当者の休みは不定期です。 上記の設定で、 Aさんが土曜に出勤している日を数えたいのですが。 配列数式か、SUMPRODUCT関数を使うと思うのですが、 上手くできません。 よろしくお願いいたします。

  • エクセル 複数列に数式が入っているのをまとめる

    A列B列にもそれぞれデータが入っていてC列D列にそれぞれ違うシートから数式を使ってマッチングをしました。 このマッチングをC列でまとめたいのですがやり方がわかりません。 データが1000近くあり手作業では大変なので教えてください! C列 D列 #N/A 未完了 完了 #N/A 完了 #N/A #N/A 未完了 完了 #N/A #N/A 未完了 完了 #N/A #N/A #N/A 完了 #N/A #N/A #N/A 完了 #N/A #N/A #N/A #N/A 未完了 ↓ C列 未完了 完了 完了 未完了 完了 未完了 完了 #N/A 完了 #N/A 完了 #N/A 未完了  

  • エクセル文字の結合について

    A    B     C         D 03  1234  5678 045  1234 5678 045 1234 5678 この様にあったとして A列B列C列を結合させるCONCATENATEや&はわかったのですが、 A列のみ( )をつけて (03)12345678と全部D列に表示させる方法はありますでしょうか? 御教授お願い致します。

  • エクセルの数式教えて下さい

    セルAの列にAっていれたらB1とC1が赤く BっていれたらC1とD1が青く CっていれたらB1とE1が黄色くセルに色をつけたいのですが‥ Aの列(A200まで英字を入れたい) A(A1) 赤(B1) 赤(C1)    B(A2)       青(C1)青(D1) C(A3) 黄(B1)           黄(E1) B(A4)       青(C1)青(D1) 教えて下さい

  • EXCELで

    以下のように B,C,D列には数字、空欄、#N/Aが入力されています。 A列にB,C,D列の数字だけをもってきたいです。 どうしたらよいでしょうか? お分かりになる方宜しくお願いします。 A B C D #N/A #N/A 26.052 3.472 1.42 #N/A #N/A 26.052 3.082

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

    エクセルのMATCH関数についての質問ですが、どうしてもエラーが表示され悩んでいます。どうか教えていただければと思います。 たとえば下記のような場合なぜかエラーが発生してしまいますがどうしてでしょうか?      A列   B列   C列   D列   E列   F列 1行              A     B    A+B  戻り値 2行    2.0        1.0    1.2   2.2   2 3行    2.2        0.9    1.1   2.0   1 4行    2.4        1.1    1.3   2.4   #N/A 5行    2.6        1.0    1.4   2.4   3 使用している関数は、 E列2行 =C2+D2  F列2行 =MATCH(E2,$A2:$A5,0) E列3行 =C3+D3  F列3行 =MATCH(E3,$A2:$A5,0) E列4行 =C4+D4  F列4行 =MATCH(E4,$A2:$A5,0) E列5行 =C5+D5  F列5行 =MATCH(E5,$A2:$A5,0) です。ここでどうしても、F列4行にエラー値(#N/A)が発生してしまいます。どうしてでしょうか? E列4行とE列5行は同じ値にもかかわらず戻り値が違うのはどうしてでしょうか? また、不思議なことにE列4行に手入力で2.4の値を入力した場合は戻り値は3となり、正しい値を表示します。どうしてでしょうか? 以上、よろしくお願いします。

専門家に質問してみよう