• 締切
  • すぐに回答を!

SUMIFの代用

  • 質問No.4563577
  • 閲覧数752
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 22% (10/44)

お世話になります。
ファイル2からファイル1へリンクして計算をしてますが、同時に開いてないと更新されない(VALUE)となるため調べましたら、SUMIF・COUNTIF関数はこのような現象が発生するということでした。
ファイル1はSUMIFを多用しており納得はしましたが、SUM+IFに置き換えれば良いとのことで試しましたが、計算結果がうまくでません。
ファイル1:抜粋
   A   B   C
1  12/1  AAA  100
2  12/2  AAA  200
3  12/3  AAA  300
4  12/4  AAA  400
5  12/5  BBB  500
というデータがあります。A:日付 B:コード C:数量
ファイル2表にてAAAの合計数量を出したいのですが、
SUMIF([ファイル2.XLS]sheet1!$B:$B、(ファイル1のコード入力セル)、[ファイル2.XLS]sheet1!$C:$C)
にてできるのですが、ファイルを同時に開かずに行いたいのです。

SUM(IF([ファイル2.XLS]sheet1!$B:$B=(ファイル1のコード入力セル)、[ファイル2.XLS]sheet1!$C:$C、0))
に置きかえてもうまくでません。
どなたかアドバイスをお願いいたします。

回答 (全5件)

  • 回答No.5
 いったんデータをファイル2にリンクしたうえで、SUMIF関数を使えばできます。
 ファイル2に
   A   
1  ='ファイル1のパス[ファイル1.xls]Sheet1'!A1
2  ='ファイル1のパス[ファイル1.xls]Sheet1'!A2
3  (以下同じ)
という具合にいったんデータをリンクで取り込み、それに対してSUMIF関数を使います。
  • 回答No.4

ベストアンサー率 57% (3570/6233)

こんばんは。

Excelシートは、古いデータベース機能が残されていて、シートの中のセルを1つなら、静的な値のみを呼び出すことが可能です。現在では、DAOやADOという、データベース・オブジェクトで呼び出しますが、やはり、同じ原理です。

あくまでも、アプリケーションのクラス・オブジェクトで生成されたインスタンスは、そこで演算など計算しなければ、インスタンスは必要ありません。ご質問で出ている範囲(Range)オブジェクトは、確かに、シート・オブジェクトでなければ出来ませんから、質問者さんのような方法は、仮にフルパスでも不可能です。確保した値を失うと#VALUE! が出てしまいます。

だから、開いているシートか開いているセルに、

×[ファイル2.XLS]sheet1!$B:$B (範囲にする場合は、シートオブジェクトが必要です)

例:
B列:
B1:
='C:\Documents and Settings\[UserID]\My Documents\[ファイル1.xls]Sheet1'!$B1

入れて、データが出ているところまで、コピーします。

同様に、C列にも、
C1:
='C:\Documents and Settings\[UserID]\My Documents\[ファイル1.xls]Sheet1'!$C1

で、同じくデータが出ているところまで、コピーします。
(もちろん、ブックを開いて、リンクさせて、それを閉じれば、以上のようになります)

そうして、

リンクされたシートに出ている値に対して、
例:
=SUMIF(B1:B1000,">"&"12/5"*1,D1:D1000)
12/5より以上

とすれば出来ます。
  • 回答No.3
[回答番号:No.1この回答への補足]に対するコメント、

》 アドバイスお願いします。

え?私の提案式に何も反応していないから、アドバイスのしようがありません。


》 ファイル1でSUMIFをやるとエラーになります

「というデータ」が「ファイル1」にあるのなら、同じファイル内で「SUMIFをやる」わけで、最初の質問と矛盾していますよ。
「ファイル2でSUMIFをやると…」の間違いですか?しっかりしてください。
補足コメント
shogo814

お礼率 22% (10/44)

何度もすみません。ファイル2にてSUMIFをやるが正しいです。
投稿日時:2008/12/17 22:49
  • 回答No.2

ベストアンサー率 46% (32/69)

2つのファイルを開かないと無理ですよ
オブジェクトのインスタンスがないので参照出来ません。
  • 回答No.1
「…というデータ」は「ファイル1」にあると仰っているから、貴方の式の「ファイル2」は「ファイル1」の間違いでしょ?

=SUMIF('fullpath[ファイル1.xls]Sheet1'!$B:$B,(ファイル1のコード入力セル),'fullpath[ファイル1.xls]Sheet1'!$C:$C)

fullpath は「ファイル1」が存在する場所(パス、フォルダ、ディレクトリ)で、例えば次のようになります。
C:\Documents and Settings\Shogo814\My Documents\
補足コメント
shogo814

お礼率 22% (10/44)

私のまちがいでした。ファイル1が正解です。質問の打ちまちがいでした。すみません。実際はファイル1でSUMIFをやるとエラーになります。アドバイスお願いします。
投稿日時:2008/12/17 21:53
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ