• ベストアンサー

エクセルとIF関数について

エクセル初心者です。 今、下の画像上段のような、データ(シート1)をエクセル2007で作成しました。 売上と販売形式、場所、そして報告形式があります。 今、シート2のAからC列に販売形式、売上場所、売上金額を 手入力で入れてみました。 ここでしたい処理ですが、IF関数を使って、シート2の4列目に自動的に報告形式が 表示される数式を作りたいのです。 単純なIF関数はわかるのですが、この場合、AND関数をどうやってつくっていいか わかりませんでした。 教えてください。お願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

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

こんばんは! 一例です。 Sheet1の「100万以上」等々が文字列だと思いますので、これではかなり難しくなります。 そこで「○○万以上」となっているセルの表示形式を数値に変えておきます。 画像ではC2~E5セルを範囲指定 → 右クリック → セルの書式設定 → ユーザー定義 を選択し G/標準 となっている欄に 0万以上 と入力して、そのセルは 100 のように数値のみを入力しておきます。 そうすれば画像のような表示になりますので、関数で対応できると思います。 お示しの画像の配置だとして、Sheet2のD2セルに =IF(COUNTBLANK(A2:B2),"",IF(A2="直売",IF(C2>=1000000,Sheet1!$B$2,"報告不要"),IF(ISERROR(INDEX(Sheet1!$B$3:$B$5,MATCH(C2/10000,OFFSET(Sheet1!$B$3:$B$5,,MATCH(B2,Sheet1!$C$1:$E$1,0),,1),1))),"報告不要",INDEX(Sheet1!$B$3:$B$5,MATCH(C2/10000,OFFSET(Sheet1!$B$3:$B$5,,MATCH(B2,Sheet1!$C$1:$E$1,0),,1),1))))) という数式を入れオートフィルで下へコピーではどうでしょうか?m(__)m

aidorumary
質問者

補足

TOM04さんありがとうございました。完ぺきでした。 数式は難しいですね。考えてみましたが。 追加で質問なのですが、金額が以下のような金額(0万以上) 東京  大阪   名古屋 100 250 160 250 250 160 1000 1000 500 0 1000 0 はどうなるのでしょうか。 さらに複雑になるのでしょうか。 よろしくお願いします。

その他の回答 (2)

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

Sheet1に検索表で(関数式なし) 通販東京 通販大阪 通販名古屋 直売東京 直売大阪 直売名古屋 0 0 0 報告不要 0 0 0 報告不要 100 100 100 報告不要 100 100 100 支店報告 400 300 200 本店報告 500 400 300 支部報告 600 500 400 本部報告 を作る。 ーー Sheet2で  テストデータ A2:E30(A-C列が素データ、結果はD列、E列は作業列) 通販 東京 99 報告不要 1 通販 東京 299 報告不要 1 通販 東京 399 報告不要 1 通販 東京 499 本店報告 1 通販 東京 599 支部報告 1 通販 東京 699 本部報告 1 通販 大阪 99 報告不要 2 通販 大阪 299 報告不要 2 通販 大阪 399 本店報告 2 通販 大阪 499 支部報告 2 通販 大阪 599 本部報告 2 通販 大阪 699 本部報告 2 通販 大阪 799 本部報告 2 通販 名古屋 99 報告不要 3 通販 名古屋 299 本店報告 3 通販 名古屋 399 支部報告 3 通販 名古屋 499 本部報告 3 通販 名古屋 599 本部報告 3 通販 名古屋 699 本部報告 3 通販 名古屋 799 本部報告 3 直売 東京 99 報告不要 1 直売 東京 199 支店報告 1 直売 東京 299 支店報告 1 直売 大阪 99 報告不要 2 直売 大阪 199 支店報告 2 直売 大阪 299 支店報告 2 直売 名古屋 99 報告不要 3 直売 名古屋 199 支店報告 3 直売 名古屋 299 支店報告 3 E列の式はE2に=IF(A2="通販",MATCH(A2&B2,Sheet1!$A$2:$C$2,0),MATCH(A2&B2,Sheet1!$E$2:$G$2,0)) 式を下方向に式複写。 メインの D列はD2に=IF(A2="通販",INDEX(Sheet1!$D$1:$D$7,MATCH(C2,OFFSET(Sheet1!$A$1,0,E2-1,7,1),1)),INDEX(Sheet1!$H$1:$H$7,MATCH(C2,OFFSET(Sheet1!$E$1,0,E2-1,7,1),1))) 式を下方向に式複写。 E列は式が長くなるので分けた。 このやり方に興味があれば、内容が正しいか十分チェックしてください。 ーー やはりVBAの世界に持ち込まないと式が複雑になるように思う。 表の構成の仕組みだけではすっきりする方法はないのではないか。

回答No.2

行いたいことはわかったし、図の添付でレイアウトもわかった。 でも、計算方法の説明がない。 初心者に回答者の数式から考えを読み取ってもらうのも辛いものがある。 最低限だとは思いますが、少しだけ説明を加えつつ、数式を提示してみます C2:E5セルは 計算しやすいように数値にします。 100万以上 → 1000000 各売上場所の売上条件は、昇順になっているとします。(違っている場合は下記無視) J2セル =IF($I2<INDEX($C$2:$E$2,,MATCH($H2,$C$1:$E$1,0)),"報告不要", INDEX(B$2:B$5,MATCH($I2,INDEX($C$2:$E$5,,MATCH($H2,$C$1:$E$1,0))))) 下へオートフィル 各売上場所の最低金額(C2:E2)を下回っていれば、報告不要。そうでないなら 売上場所の列(C,D,E)において、売上がどの範囲(行)収まっているかを調べ、 その時の報告形式を返す。販売形式を計算に入れていないことに注意。 ちなみに、販売形式を出すならK2セルに =IF($I2<INDEX($C$2:$E$2,,MATCH($H2,$C$1:$E$1,0)),$A$2, INDEX(A$2:A$5,MATCH($I2,INDEX($C$2:$E$5,,MATCH($H2,$C$1:$E$1,0))))) 下へオートフィル 最後にG:K列を切り取って Sheet2へ貼り付け。

関連するQ&A