• 締切済み

INDIRECT関数のことで教えてください

Sheet1に表を作ろうとしています。同じBooKのなかに「売上実績0610」・「売上実績0611」・・・と複数のシートがあります(どんどん増えます)。 Sheet1のB列に、=IF(COUNTIF(売上実績0610!$B$6:$C$1608,B3)=0,0,B3)という式を設定し縦の列をつくり、C列・D列とつくっていきます。 この式の【売上実績0610!$B6$:$C$1608】の部分にINDIRECT関数を使いたいのですが範囲指定がどうしてもうまくいきません。 どなたかご教授お願いします。(EXCEL2003です)

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

>これで補足になりますでしょうか? はっきり言って余計分からなくなりました(;_;) =IF(COUNTIF(売上実績0610!$B$6:$J$608,B3)=0,0,VLOOKUP(TEXT(B3,0),売上実績0610!$B$6:$J$608,11,FALSE)) この関数で正しく表示されていますか? VLOOKUP関数でB列からJ列までは9列しかないのに11列目を参照しようとしていますよ。 またCOUNTIFではB3を直接比較文字として使用しているのに、VLOOKUPではTEXT関数で文字列にして検索しています。これは何のためですか? そもそもこの式はどこに入力されているのですか? 私の頭は混乱しまくりです。 以下は想像で補って回答します。これで違っているのなら、もはや私には回答できません。 もしかしたらやりたいことは「1行目にシート名を入れたら同名のシートから集計シートA列の商品コードの売上を検索して、集計シートに表示するようにしたい」ということではありませんか? 集計シート(Sheet1)のB2に =IF(COUNTIF(INDIRECT(B$1&"!$B$6:$B$608"),$A2)=0,0,VLOOKUP($A2,INDIRECT(B$1&"!$B$6:$J$608"),9,0)) を入力して下方向、および右方向にコピーします。 この式はA列のコード(1001)が1行目のシート(売上実績0610)になければ0を表示し、あれば売上実績0610のB列にあるコード(1001)のコードを検索し、そのコードの売上(J列)を表示するという動作をします TEXT関数で文字列に変換する処理は省きましたが、数値と文字列で比較するとVLOOKUP関数は失敗しますから必要であればご自身で追加してください

SEINEN
質問者

お礼

ありがとうございました。

SEINEN
質問者

補足

いろいろすみません。ご推察の通りです。 シート1は商品マスタ、シート2以降は毎月届けられる売上データです。シート1に書式を設定しておいて毎月届くTEXTのデータシートをBookに貼り付けるだけでシート1に集計が簡単に出来上がる表を作りたいと考えているんです。 あとTXTE関数を使用するのは届くデータのコードの部分が文字列になっているためLOOKUPがうまくマッチングしなくていろいろ模索後の手法でした。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

範囲指定にわざわざINDIRECT関数を用いる理由は「参照範囲を動的に変更したい」からだと推察します。 どの部分を変更したいのですか? また参照するべき範囲やシート名はどこかのセルに書き込んでありますか。 B1に 1608 を入力しておいて  =IF(COUNTIF(INDIRECT("売上実績0610!$B$6:$C$"&B1),B3)=0,0,B3) とか、B1に 売上実績0610 を入力しておいて  =IF(COUNTIF(INDIRECT(B1&"!$B$6:$C$1608"),B3)=0,0,B3) になるでしょう。 余計なことかもしれませんが元の式はなんだか変ですね 売上実績0610!$B$6:$C$1608の範囲でB3と一致する数字があればB3を表示し、なければ0を表示するのですね。「合致する数字があれば、その個数(COUNTIF関数の結果)を表示する」なら何となくしっくりきますが…

SEINEN
質問者

お礼

紙面だと表現したいことがうまく出せなくて申し訳けありません、ご回答くださいましてありがとうございました。

  • suekun
  • ベストアンサー率25% (369/1454)
回答No.1

何がどの様にうまく行かないのでしょう? 実際に設定した数式・参照先等を教えてもらえませんか? 一般的には、仮にF1セルに「売上実績0610!$B$6:$C$1608」と言う文字を入力しておいて =IF(COUNTIF(INDIRECT(F1),B3)=0,0,B3) と言う感じの使い方になると思われますが・・・

SEINEN
質問者

補足

早速のご回答ありがとうございます。 すみません、例題が正確でない為伝わらないですね。 Sheet1は [A列] [B列]シート2のJ列 [C列]シート3のJ列]  [Dはシート3の] コード 売上実績0610     売上実績0611   売上実績0612  10001    0       0        0 10002 70,056         350,200 10003 830,919      1,290,550 10005 0 10010 0 10013 0 で、シート2は売上実績0610という名称、シート3は売上実績0611・・・と続いていきます。 作った式は=IF(COUNTIF(売上実績0610!$B$6:$J$608,B3)=0,0,VLOOKUP(TEXT(B3,0),売上実績0610!$B$6:$J$608,11,FALSE))です。 シート2・シート3・・・は毎月の売上実績が入っているデータです。 (シ-ト2内はB列がコード、C列~I列は他の数字、J列が今回使う数値です) 但し売上が無いとシート2にデータが載ってなかったりします。 INDIRECT関数を使って毎月シートを貼り付けるだけで使っていこうと考えています。 これで補足になりますでしょうか? 宜しくおねがいします。

関連するQ&A

専門家に質問してみよう