• ベストアンサー

エクセルの計算式を教えてください。

添付してある表のように左に入れたデータを右矢印の表のように自動反映するようにしたいのですが、この右表の「?」にはどのような式をいれればよいものでしょうか?  右表の『A商品』・『Y支店』のところには、共にリストの設定がしてあります。商品のセル(A商品)ではA商品・B商品・C商品を選ぶことができ、支店のセル(Y支店)ではX支店・Y支店・Z支店を選ぶことが出来ます。  このリストで選ぶと自動的にこの「?」に正しい数字が出るようにしたいです。 分かる方、教えていただけますよう宜しくお願いいたします。

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

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

エクセル関数式を使う表で、関数式で使うところの、参照するセルを「セル結合しない」のは鉄則でしょう。(下記*) エクセルでは、セル結合は最小限にすべきだ。色々な面で(VBAなどでも)あとの扱いが難しくなる。経験が無いからこんなことをやってしまうのだろう。 非常に式が難しくなると思う。 それで本件やむを得ず、作業列を使った。 例データ A1:D9 x支店 a 1 x支店 b 2 x支店 c 3 x支店 y支店 a 4 y支店 b 5 y支店 c 6 y支店 z支店 a 7 z支店 b 8 z支店 c 9 z支店 (注)回答では表の列位置が乱れると思うが、質問の例そのまま+D列(作業列)です。 D1は=A1 D2は =IF(A2=0,D1,A2) 下方向に式を複写。結果上記の通り。 ーーー あとは2条件の検索なので、頻繁に質問が出るもの。 SUMPRODUCT関数を使うのが常識。 エクセル2007ならSUMOFSを検討のこと。 ーーーー F1:G2で - a y支店 4 G2の式は =SUMPRODUCT((D1:D9=$F$2)*(B1:B9=$G$1)*(C1:C9)) 結果 上記の通り4 ーーー *参考 A列の全行にXX支店を値としていれ、条件付き書式で直上行と同じ値の場合は、文字色を白色にして見えなくするとか。 その場合X支店などの見える位置は一番上の行になる(中央揃えは難しい)ことは、辛抱しなければならないが。

その他の回答 (8)

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

こんにちは! すでに多くの方が回答されていますが・・・ 極力セルの結合がない方が色々と都合が良いのですが、 今回の場合、質問の表そのままをどうしても使用したいのであれば 無理矢理って方法で↓の画像のF3セルに =IF(OR(F2="",E3=""),"",INDEX(C2:C10,MATCH(E3,A2:A10)+MATCH(F2,B2:B10,0)-1)) という数式を入れてみました。 尚、各支店の商品名の並びは全て同じでないと正確なデータを返すことができません。 そして、余計なお世話かも知れませんが、 画像の下側がSheet2になります。 実際はこのような感じで元のデータを整理すると 簡単に希望の値を返すことができると思います。 Sheet2のH2セルに =IF(COUNTBLANK(F2:G2)>0,"",INDEX(B2:D4,MATCH(G2,A2:A4,0),MATCH(F2,B1:D1,0))) という数式を入れています。 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m

  • myRange
  • ベストアンサー率71% (339/472)
回答No.8

  ____B___C___D_____H___I__ 05_X支店_A商品_100___支店名_商品名_ 06_____B商品_200_______A商品_ 07_____C商品_300___Y支店_■■■_ 08_Y支店_A商品_400___ 09_____B商品_500___ 10_____C商品_600___ 11_Z支店_A商品_700___ 12_____B商品_800___ 13_____C商品_900___ 質問では、B5~7、8~10、11~13は結合セルになっており、 支店名は、B6,9、12に表示されてるように見えますが 結合セルの場合は、【実際の値】は、上記の表のように 最初のセル(B5,8、11)のみに入ってますのでそれを利用します。 ●I7にセットする式 =INDEX(D5:D13,MATCH(H7,B5:B13,0)+MATCH(I6,C5:C7,0)-1,0) INDEX(求める値のある範囲、その範囲での行、その範囲での列) INDEX(D5~D13,支店の位置+商品の位置-1、0) ★求める値のある範囲が1列なので、列は省略または0でいい 【Y支店、A商品を例として説明】 ●MATCH(H7,B5:B13,0)   支店の位置は、B5~B13の範囲を検索   Y支店の位置:4 ← B5~B13の中で4番目 ●MATCH(I6,C5:C7,0)   商品の位置は、C5~C7の3セルを検索   A商品の位置:1 ← C5~C7の中で1番目 ●求める値は、D8(D5~D13の4番目)にあるので 上記結果から、4を求めるには  支店の位置+商品の位置-1 = D5~D13の中での位置     4 + 1 -1 = 4番目   ●よって INDEC(D5:D13、4、0)= 400 が求まる 以上です。  

  • popuplt
  • ベストアンサー率38% (31/81)
回答No.7

chiizu2様の画像を拝借しまして、支店名は結合されているとして [F4]=INDEX(C2:C10,MATCH(E4,A2:A10)+MATCH(F3,B2:B4)-1) ※エラー処理なし。

noname#204879
noname#204879
回答No.5

   B    C   D E F G  H    I 5  X支店 A商品 1 6      B商品 2          A商品 7      C商品 3      Y支店    4 8  Y支店 A商品 4 9      B商品 5 10     C商品 6 11 Z支店 A商品 7 12     B商品 8 13     C商品 9 I7: =VLOOKUP(I6,OFFSET(INDIRECT(ADDRESS(MATCH(H7,B1:B13,0),3)),,,3,2),2,FALSE)

  • 135ok
  • ベストアンサー率34% (26/75)
回答No.4

表を次のように変える方法もあるかと思います。 無理ならば、無視してください。      A商品  B商品  C商品 X商品   1    2    3 Y商品   4    5    6 Z商品   7    8    9

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

次のように作業列を作って対応することでしょう。 例えばお示しの表がA2セルからC10セルの範囲にあるとします。 そこで作業列としてD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(A2="",B2=""),"",IF(A2<>"",A2&"/"&B2,LEFT(D1,FIND("/",D1)-1)&"/"&B2)) 答えですがF4にY支店と入力し、G3にA商品と入力するとして、その販売数をG4セルに表示させるとしたらG4セルには次の式を入力すればよいでしょう。 =IF(OR(F4="",G3=""),"",INDEX(C2:D10,MATCH(F4&"/"&G3,D2:D10,0),1))

  • chiizu2
  • ベストアンサー率41% (164/400)
回答No.2

すみません 先ほどの表で 支店名のセルを結合してしまうと B・Cに対応する支店名のデータが 無くなってしまいDSUM関数が うまく機能しないので 結合させずに全ての商品名に対して 支店名を入力してください 支店名表示がうるさいようだったら 不要な支店名を セルの書式設定→フォント→文字色→白で見えなくさせてください 条件設定のセルについても下の例のようにしてもいいです

  • chiizu2
  • ベストアンサー率41% (164/400)
回答No.1

DSUM関数を使ったらいかがですか ただしこの場合 条件設定のセルは同じ行に記述する必要がありますので 質問のようなひょうにしたければ どこか別の場所に条件を記述する H2→=E4 I2→=F3 F4→=DSUM(A1:C10,"販売数量",H2:I3)として F3の商品名とE4の支店名を変化させれば 条件に一致した販売数量の合計が出力されます 下の表の場合 条件設定のH列とI列を非表示に設定しておけば この2列は見えなくなりますし印刷もされません

関連するQ&A