• 締切済み

エクセル2007のMATCH関数の入力方法について。添付画像のような表

エクセル2007のMATCH関数の入力方法について。添付画像のような表があるとします。 入力データとして、 要素1には 甲 または 乙 を入れます 要素2には(1)~(5)を入れます。 要素3には、1~300までを入れます。 画像の例では、要素が 甲・(3)・120なので 80 をE2に表示したいわけですが そのための関数式を教えて下さいませんでしょうか。 例の変形で、要素1を 乙にしたときには、E2セルに 85 を表示し、 要素を 甲・(4)・250とした場合には 140を、 要素を 乙・(1)・100とした場合は 15をE2に表示するというように、要素を任意に入れ替えて、表内で合致する値をE2に表示する関数の式が知りたいわけです。 たぶんMATCH関数を使うのだろうと思いますが、よくわからなくて・・・。 よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

#6です。私の回答では数値区分の値を1つの数にする例ですが、判りにくければ 数値区分のせるで、例えば100のセルの書式をユーザー定義で、###"から200"と設定して、「100から200」のような見た目にすることが出来ルことを申し添えます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

式が複雑になる最大の要素は、文字列の1~100などの見出しにあると思う。人間には見やすいが、関数の処理には面倒。 私は勝手ながら下記のように変更させてもらった例を説明する。 ーー (大方針) 表の索引は、行、列が決ればその交差点のセルの値の数を取ってくれば良い。 ーー 例 データ 甲、乙、丙の3種の例。私のやり方では増えても式が変わるだけ。 B2:D2,E2:G2,H2:J2はそれぞれセル結合してあるものとする。3列にしているが 4列などが混じった場合は私のやり方では対応できず、修正が必要。 A1:J8 -は実際は空白列。左詰め防止用。 - - - 検索表 - 甲 乙 丙 - 0 100 200 0 100 200 (1) (2) (3) a - - x y z (4) (5) ーーー (行の決定) 行であるが、条件2の(1)から(5)は、条件(1)の値には関係なく場所か固定で、(3)などを探せば良いから簡単。 (注)INDEXやMATCHの探すセル範囲(第1、第2引数)はA1を起点にしたほうがわかりやすいのでそうする。もうひとつの方法は表の実質データの左上隅セルにする方法である。 =MATCH("(3)",$A$1:$A$8,0)のような式で捉えられる ーーー (列の決定) 列であるが、甲乙・・と値が関係して決る。 大枠の甲乙丙のスタート列は =MATCH("乙",A2:J2,0)で決る。甲は2、乙は5である。 ーーー 最終的な見るべき列は、条件3の値も関係して決る。 それぞれのスタート列から3列について、MATCH関数の第3引数1を使って、範囲検索的なことをやる。 =MATCH(115,OFFSET($A$1,2,MATCH("乙",$A$2:$J$2,0)-1,1,3),1)+MATCH("乙",$A$2:$J$2,0)-1) 乙の115の場合の、見るべき列です。この場合は7(G列)です。 組み合わせて =INDEX($A$1:$J$8,MATCH("(3)",$A$1:$A$8,0),MATCH(115,OFFSET($A$1,2,MATCH("乙",$A$2:$J$2,0)-1,1,3),1)+MATCH("乙",$A$2:$J$2,0)) 私の例ではZを返します。 ・ OFFSET($A$1,2,MATCHの2は条件3の数量区分けが第3行目(A1から隔たりは2行)だから。 ・ +MATCH("乙",$A$2:$J$2,0))は乙などのスタート列からの隔たり列数なので、A1起点に換算するため+MATCH("乙",$A$2:$J$2,0)) している。 ーー 以上は、(3)や乙や115などの1例の値でやっているが、条件の入っているセル番地に置き換えた式を作って入れてください。 ーー 甲、乙、丙の条件3の区分だが、MATCH関数の第3引数の1の場合を考えて、1程度注意が必要なので、 以上、未満の問題も含めて、その付近の数で、表と条件3を変化させて見て、チェックしてください。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

C8セルから右に「~」の数字が入力されている現在のレイアウトそのままを利用するなら以下のような複雑な数式を使用する必要があります。 =IF(COUNTA(C2:C4)<3,"",INDEX(C9:H13,MATCH(C3,B9:B13,0),MATCH(C4,INDEX(LEFT(C8:E8,(FIND("~",C8:E8)-1)*1)*1,))+(C2="乙")*3)) C8セルに「1」D8セルに「101」のように開始の数字だけが記載されているなら以下の式で計算できます(必ずC2セルは甲か乙のみ入力される場合) =IF(COUNTA(C2:C4)<3,"",INDEX(C9:H13,MATCH(C3,B9:B13,0),MATCH(C4,C8:E8)+(C2="乙")*3))

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! 一例です。 ↓の画像で説明させていただきます。 要素3の行の数値を画像の黄色部分のように変更してみてください。 要素1に関しては「甲」か「乙」しか入らない前提です。 E2セルに =IF(COUNTBLANK(C2:C4),"",IF(C2="甲",INDEX(C9:E13,C3,MATCH(C4,C8:E8,1)),INDEX(F9:H13,C3,MATCH(C4,F8:H8,1)))) という数式を入れています。 余計なお世話かも知れませんが、画像の4・5行目(薄い緑色の部分)でその範囲を説明しています。 結局201以上の場合は全て同じ結果が返ります。 以上、参考になれば良いのですが 他に良い方法があれば読み流してくださいね。m(__)m

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.3

こんな数式でどうでしょう。 =VLOOKUP(C3,B9:H13,INT((C4-1)/100)+IF(C2="甲",2,5))

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

方法は色々ありますが一例として =INDEX(INDIRECT(C2),MATCH(C3,B9:B13),ROUNDUP(C4/100,0)) ※範囲C9:E13に甲、範囲F9:H13に乙と名前付けする INDIRECT関数を使いINDEXの範囲を指定 MATCH関数で範囲の何行目かを指定 列指定は今回100単位での増加なので100で割った数値をROUNDUPで繰り上げて列数を求めています。

  • akiomyau
  • ベストアンサー率43% (555/1280)
回答No.1

以下のような式でどうでしょうか。 =IF(C2="甲",INDIRECT(IF(C4<101,"B",IF(C4<201,"D","E"))&MATCH(C3,B9:B13)+8),INDIRECT(IF(C4<101,"F",IF(C4<201,"G","H"))&MATCH(C3,B9:B13)+8))

yamata2525
質問者

お礼

ありがとうございました。ばっちりできました。 他の方からもいろいろいただいています。後で試してみます。

関連するQ&A

専門家に質問してみよう