こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

SUMIFの代用

お世話になります。
ファイル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))
に置きかえてもうまくでません。
どなたかアドバイスをお願いいたします。

投稿日時 - 2008-12-17 20:32:57

QNo.4563577

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(5)

ANo.5

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

投稿日時 - 2008-12-18 12:45:05

ANo.4

こんばんは。

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より以上

とすれば出来ます。

投稿日時 - 2008-12-18 00:23:29

[回答番号:No.1この回答への補足]に対するコメント、

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

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


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

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

投稿日時 - 2008-12-17 22:31:35

補足

何度もすみません。ファイル2にてSUMIFをやるが正しいです。

投稿日時 - 2008-12-17 22:49:42

ANo.2

2つのファイルを開かないと無理ですよ
オブジェクトのインスタンスがないので参照出来ません。

投稿日時 - 2008-12-17 21:59:18

「…というデータ」は「ファイル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\

投稿日時 - 2008-12-17 21:25:28

補足

私のまちがいでした。ファイル1が正解です。質問の打ちまちがいでした。すみません。実際はファイル1でSUMIFをやるとエラーになります。アドバイスお願いします。

投稿日時 - 2008-12-17 21:53:32

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-