- 締切済み
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です)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- zap35
- ベストアンサー率44% (1383/3079)
>これで補足になりますでしょうか? はっきり言って余計分からなくなりました(;_;) =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関数は失敗しますから必要であればご自身で追加してください
- zap35
- ベストアンサー率44% (1383/3079)
範囲指定にわざわざ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関数の結果)を表示する」なら何となくしっくりきますが…
お礼
紙面だと表現したいことがうまく出せなくて申し訳けありません、ご回答くださいましてありがとうございました。
- suekun
- ベストアンサー率25% (369/1454)
何がどの様にうまく行かないのでしょう? 実際に設定した数式・参照先等を教えてもらえませんか? 一般的には、仮にF1セルに「売上実績0610!$B$6:$C$1608」と言う文字を入力しておいて =IF(COUNTIF(INDIRECT(F1),B3)=0,0,B3) と言う感じの使い方になると思われますが・・・
補足
早速のご回答ありがとうございます。 すみません、例題が正確でない為伝わらないですね。 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関数を使って毎月シートを貼り付けるだけで使っていこうと考えています。 これで補足になりますでしょうか? 宜しくおねがいします。
お礼
ありがとうございました。
補足
いろいろすみません。ご推察の通りです。 シート1は商品マスタ、シート2以降は毎月届けられる売上データです。シート1に書式を設定しておいて毎月届くTEXTのデータシートをBookに貼り付けるだけでシート1に集計が簡単に出来上がる表を作りたいと考えているんです。 あとTXTE関数を使用するのは届くデータのコードの部分が文字列になっているためLOOKUPがうまくマッチングしなくていろいろ模索後の手法でした。