• 締切済み

Excel2000でオートフィルタを実行すると計算結果が0になってしまいます。

シートAの数値をもとに、シート1月、2月、3月のあるセル計算式を入力しているのですが、シートAでオートフィルタを実行するとシート1月、2月、3月の計算結果がすべて0になってしまいます。 オートフィルタを元に戻しても0のままになっており、計算式の入っているセルを1つ1つダブルクリックするか、そのセルに1をかけないと計算結果が変わりません。 ちなみに計算方法は"自動"に設定されています。 シートAの数値を使って計算しているシートが複数あるので1つ1つ修正するのは大変です。 シートAではオートフィルタを頻繁に使用します。 そこで、マクロなどを使って一度に0に変わったセルを再計算させる方法なないでしょうか? 教えてください。

みんなの回答

  • fmajin
  • ベストアンサー率61% (75/122)
回答No.8

ANo.#6について説明不足のようですので、補足させていただきます。 内容を読ませていただいた上で、恐らく「シートA」のA列には、月名と区分番号を組み合わせて「1月101」のようなキーが入力されているものと推測します。前半の「1月」が月名で後半の「101」が区分番号を想定しています。 この前提で行けば、SUMIF関数の条件値も同様に「1月101」のように指定すればよい。このとき、「1月」というのはシート名と同じなのでこれを利用し、区分番号はA1セルに入力しているので、これらを結合した文字を条件値として指定しているものを推測しました。 このような仕組みにしておけば、シートをコピーして、シート名だけを変更すれば、各月の合計を求めることができますからね。 よって、SHEETNAMEは、現シート名を取得するものと推測したので、これは先に紹介した関数で求めることができますよと紹介しました。 さてさて。 今回の場合は、ユーザー定義関数が怪しいと思うので、まずはそこを確認してみてはいかがでしょうか。 数式で「SHEETNAME()」としている部分を「1月」などの実際のシート名で置き換えてみてください。その上で、同じ現象が起こるのかどうかですね。 まずは、この結果を確認してみるといいと思います。

noname#9284
noname#9284
回答No.7

ANo.#6 さんのご回答を読ませていただいて思ったのですが、 SHEETNAME()という関数が、この数式が入力されているシートでしたら =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31) でもいいと思います。 ANo.#6 さんのおっしゃるように別セルにシート名を表示させ、 INDIRECTで引っ張ってくる事ができます。 ただし現時点ではSHEETNAME()がどこのシート名をどう取得しているのかがわかりませんので、 残念ですが何とも言って差し上げられません。

  • fmajin
  • ベストアンサー率61% (75/122)
回答No.6

これはユーザー定義関数が原因ではないでしょうか。 どのようなコードを記述されているのかわかりませんが、ユーザー定義関数は、原則として「非自動再計算」となっているため、「Application.Volatile」の行がないと自動再計算にはなりません。「Volatile」メソッドについて、オンラインヘルプなどで調べてみるといいでしょう。 また、シート名を取得するだけでしたら、既存の関数でも求められますよ。 =MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,100) のような関数を入力すれば、入力したシートのシート名が表示できるはずです。 ただし、この場合はどこか適当なセルに、シート名を入力して、SUMIF関数ではそのセルを参照するような仕組みにするのが単純だと思いますが。

  • esprei
  • ベストアンサー率56% (718/1271)
回答No.5

え~。直接的な解決にはならないかもしれませんが、一つの方法を・・・。 シートAにオートフィルタをかけると計算結果が0になってしまうのなら、オートフィルタをかけないようにするという発想です。 シートAをコピーします。 Ctrl押しながらシートをドラッグすれば出来ます。 次にコピーAの表内の文字はすべて消します。 シートAの表内をすべて選択して、コピーします。 コピーAの表先頭セルをクリックして、編集メニューから形式を選択して貼り付け。 左下のリンク貼り付けをクリック。 これでコピーAにはシートAの表が反映されます。 シートAの内容が変化しても大丈夫でしょう。 そしてオートフィルタはコピーAでかけるようにします。 シートAはそのままなので、月シートに影響しないと思います。

noname#9284
noname#9284
回答No.4

またまたありがとうございます。 > A1には区分番号が入っています。 このA1はシート「1月」のA1ですね。 =SUMIF(A!A1:A100,SHEETNAME()&A1,D1:D100) この数式からは「SHEETNAME()」の中身が見えてきません。 どんな風に定義されたのかはわかりませんが、中の値を確かめることはできそうです。 数式バーの「SHEETNAME()」部分をドラッグしてF9キーを押してください。 この関数が持っている実際の値が表示されます。 ご覧になりましたらEscキーで抜けてください。 さて、もしユーザー定義関数を使わないとすれば数式は次のようになって初めて機能します。 =SUMIF(A!A1:A100,INDIRECT("別なシート名!"&A1),D1:D100) ユーザー定義関数をこれに代入しますと←ユーザー定義関数の戻り値には「!」は含まれていませんよね) =SUMIF(A!A1:A100,INDIRECT("SHEETNAME()"&!A1),D1:D100) となるのではないかなぁと思います。 ご確認をお願いできませんでしょうか。

noname#9284
noname#9284
回答No.3

たびたび恐れ入ります。 オートフィルタが設定されているシートと月のデータが入力されているシートが別々だという事がわかりました。 まだオートフィルタと計算式の戻り値が0の原因を mayself さんが関連付けられていらっしゃる理由がぴんと来ません・・・。 SUMIF関数は非表示になったセルからも値を引っ張ってきます。 SUBTOTAL関数ですと表示、非表示を区別します。 ですので、SUMIFが探している「あるセル」の値と、シートAに入力されている値の書式が違うなど そのあたりから調べていかれた方がいいかも知れません。 文字列で数値を探している、とか、数値で文字列を探している、とか。 せっかく補足してくださったのですが、まだまだ詳細が不明ですので 補足の内容にお答えできるのはここまでとなってしまいます。 できましたら数式バーよりその数式をコピーし、 こちらに貼り付けていただけませんでしょうか。 シート名は「Sheet1」などのように置き換えてくださって結構です。 また、シートAにはどのような値がどういった書式で入力されているのか、 それも書き込んでいただきますと大変助かります。

mayself
質問者

補足

こちらこそ説明が足らず申し訳ありません。 そうですか、非表示になったセルからも値はひっぱってくるのですね。 私も関係ないと思ったのですが、シート1月にSUMIF関数(シートAの値を集計)を使って計算式を入力した直後は正しい結果が表示されるのですが、シートAにオートフィルタをかけると、たちまちシート1月の値がすべて0になってしまうのです。一度は正しい計算結果が出ているで、計算のタイミングかと思うのですが・・・。 シート1月に入力したSUMIF関数は、シート名(月)と区分番号を足したものをキーにして集計するとして、 =SUMIF(A!A1:A100,SHEETNAME()&A1,D1:D100)と式を入力しました。 ・シートAのA1:A100には、月&区分を組合せたキーが入っ ています。 ・SHEETNAME()はシート名を自動取得する関数としてユーザ ー定義しました。A1には区分番号が入っています。 ・シートAのD1:D100には合計する為の金額が入っていま  す。 以上よろしくお願いします。

noname#9284
noname#9284
回答No.2

うーん、宜しければ計算式を教えていただけないでしょうか。 オートフィルタでどう絞り込んでいらっしゃる、等、 もう少々お願いいたします。

mayself
質問者

補足

失礼しました。 シート1月、2月、3月にはSUMIF関数を使って、あるセルをキーにして条件にあったものだけを、シートAの表から合計するという計算式を作成しています。 シートAのオートフィルタは計算式とは関係なく、1月のものだけを表示するといった具合にいろいろな抽出用として使用しています。 フィルタを解除してすべてのデータを表示しても0のままなのです。 やはり、計算式に使用している表をオートフィルタを使って非表示にしてしまうということはやってはいけないことなのでしょうか?

noname#9284
noname#9284
回答No.1

F9を押して様子を見ていただけないでしょうか。 それで計算されるようでしたらツール→オプションを見てください。 なお、あるタイミングによって自動に設定してあった計算方法が 知らない間に手動になるアクシデントもあるようです。

mayself
質問者

補足

早速のご回答ありがとうございます。 私もそれは思ったのですが、[ツール]-[オプション]で確認したら"自動"のままで、《F9》を押しても変更されません。何かアクションを起こしてやらないといけないようです。

関連するQ&A

  • [EXCEL]オートフィルタ

    教えてください。よろしくお願いします。 EXCELで オートフィルタを使っています。 例えば、 100 と言う数値で抽出したとします。 100の ある部分を 上から下に向かって 111に修正するとします。 オートフィルタで =100 の条件で 抽出した状態で、 修正する部分の一番上のセルに 111を入力して それを 必要な部分まで ドラッグしたら、 抽出されていない(非可視セル)まで 111に なってしまいますか? ===================== 以前 修正した表について お友達から 指摘があり、 非可視セルまで 書き換えてしまったのかと・・。 心配です。 EXCELのバージョンによるのでしょうか?

  • オートフィルタの結果を違うブックに貼り付ける

    マクロの初心者です。 Excel2003を使用しています。 仕事で作らなくてはならなくなったのですが、思うように動いてくれません。 【A・Bとブックが二つあります。AのブックのセルDにランダムで文字を入力します。その文字をコピーし、Bのブックを開き、オートフィルタでコピーした文字を貼り付けて、抽出します。その結果を上から3行コピーしてAのブックの他のシートに貼り付ける。】 このマクロを作りたいのですが、うまく出来ません。 あまり難しくないマクロで出来ればいいと思います。 よろしくお願いします。

  • Excel:オートフィルタ機能について質問です

    Excel2000のオートフィルタ機能を利用して、1シート3~4万件あるデータの集計などをしています。 その中で以下の点についてお教えください。 1.フィルタリングしてセルが飛び飛びに表示された状態で、ある列に1から順に連番を振りたいのです。 たとえばフィルタリングして A1 A3 A7 A8 A13 : のように絞り込まれたセルに、上から順に01,02,03,04,05...というように番号を振りたいのですが、オートフィル機能では間のセルまで入ってしまうし、=A1+1 のような関数でもやはり間のセルが邪魔です。 フィルタをかけた状態で連番を振ることはできますでしょうか。(書式は数値でも文字列でも構いません) 2.フィルタリングした状態で、連続した複数のセルをコピー&「形式を選択して貼り付け」をしたら、間に隠れているセルに値が入ってしまいます。 フィルタをかけて表示されているセルにのみ貼り付ける方法はありますでしょうか。 以上、よろしくお願いいたします。

  • EXCEL2003 オートフィルタ オプション 結果が不正

    EXCEL2003 で20 行 10 列の表を作成し、各行には 1 2 3 と数字を入力しておりますが 01 02 という数字も あるため 書式は文字列に設定しています。 これを「オートフィルタオプション」で 2 と等しくないで抽出 すると正しく機能せず すべての数値が表示されます。 セルには [文字列として保存されている数値]のエラーチェックが 働きセル左上が緑色三角マークがついています。 2 が入力されたセルの書式を 一旦[標準]に設定した上で、 再度 2 と入力し直し、また 書式を[文字列]に設定すると セル左上 緑色三角マークがなく、前述の「オートフィルタオプション」が 正しく機能するのですが、このセルの数値を 例えば 3 に変更したり、 セルをダブルクリックすると、エラーチェックが働きセル左上 緑色三角 マークが 表示されます。 結果、「オートフィルタオプション」の 等しくない 抽出が機能しません。 Excelのオプションで[文字列として保存されている数値]のエラーチェック を外しても、「オートフィルタオプション」は正しく機能しません。 「オートフィルタオプション」の 等しくない 抽出を使うには、どの ようにすれば良いか解決をご教示ください。 よろしくお願いします。

  • 【Excel】串刺し計算オートフィルの結果が不正

    Excelで、月毎に各店の売上の合計を出そうとしています。 例えば4月のブックで、A店・B店…E店の各店5つのシートと、全店の合計のシート、全部で6つのシートがあるとします。 そしてそれぞれのシートは、縦方向に日付、横方向に商品名が並ぶ表形式になっています。 ここで、各シートは行数・列数、そして配置が全く同じですので、合計のシートにその日その商品の全店の売上を、所謂串刺し計算で出すことができます。 例えばB2のセル…日付は1日、商品名はaで、 売上はA店、B店…の順に 500、600、700、800、900 となっています。 すると合計のシートのセルB2に、5店の売り上げを串刺し計算すると、 合計は3,500になると思います。 では、B3のセル、日付は2日で商品名は同じくaです。 売上は1,000、900、800、700、600です。 合計のシートのセルB3に串刺し計算すると、4,000円になる筈です。 また、C2のセル、日付は同じく1日で、商品名はbとします。 売上は300、500、700、900、1,000です。 合計のシートのセルC2に串刺し計算すると、3,400円になりますね。 でもここで、オートフィルという便利な機能があります。 合計のシートで、オートフィルを行うことによって、全店の各日・各商品毎の合計を一気に計算することができます。 串刺し計算した結果も、ちゃんと連続データで出てくる筈です。 それが…4月のブックでそれをやると、表示される計算結果が不正になるのです。 即ち、上記の例から、合計シートのセルB2から縦方向にオートフィルしても、横方向にオートフィルしても、全て3,500と表示されてしまうのです。 ただ、数式だけはちゃんとなっているのですが… 合計シートのセルB2には =SUM(A店:E店!B2) と数式が入っています。 では、B3には =SUM(A店:E店!B3) C2には =SUM(A店:E店!C2) と入っているんです。 なのに計算結果が不正になっている… 1ヶ所のセルに入っている数式をコピーして、他のセルにペーストしても、数式だけは正しいのに計算結果は正しくありません。 逆に、各セル1ヶ所1ヶ所串刺し計算すると、計算結果が正常に出てきます。 つまり数式をコピーすると不正扱いされるということです。 今、4月のブックでこの現象が起きています。 過去の月のブックでは、同じ操作を行って、計算結果は正常に出たのですが… 何故、今に限ってこうなるのでしょうか… Excel2010で、この現象が起きています。OSはWin7です。 また、問題のシートは全て、2003以前のバージョンで作るようなブック形式です。 何方か教えて頂けますでしょうか? 不足がありましたら補足します。

  • EXCEL:オートフィルタで

    いつもお世話になってます。 月末の集計と売上計画表を作るのにどうしてもやりたい事があるのですが、どうやったらいいものか困っています。 いい方法がありましたら教えて下さい。 Sheet元データとSheet伊藤~Sheet山田(印刷用でもともと形作られています)があり、 Sheet元データには 列A~Z 行2~300 程度のデータが入っています。 これにオートフィルタをかけて、抽出されたデータをコピー→任意のシート・セルに貼り付けたいと思います。 抽出/コピーしたい列は、 A(カテゴリー):1 2 C(担当者):伊藤 佐藤 鈴木 田中 山田 E(商品名):文字列 G(単価1):数値 H(単価2):数値 I(合計金額):数値 K(売上月):日付 で、まず、 (担当者)伊藤/(売上月)今月/(カテゴリー)1/(単価1)空白以外のセル でフィルターをかけて抽出されたデータを、 Sheet伊藤の指定したセル(商品名をC5~C20、単価1をD5~D20、合計金額をE5~E20)に貼り付け、 (担当者)伊藤/(売上月)翌月/(カテゴリー)1/(単価1)空白以外のセル Sheet伊藤の指定したセル(商品名をG5~G20、単価1をH5~H20、合計金額をI5~I20)に貼り付け、 (担当者)伊藤/(売上月)次四半期/(カテゴリー)1/(単価1)空白以外のセル Sheet伊藤の指定したセル(商品名をK5~K20、単価1をL5~L20、合計金額をM5~M20)に貼り付け、 ・・・といった具合に、抽出&コピー貼り付けをSheet伊藤~山田まで繰り返します。 (売上月)の項目は、 例えば「今月」が「4月」だった場合、「翌月」は「5月」「6月」、「次四半期」は「7月」「8月」「9月」の データを抽出したいのですが、こちらも一発で抽出するにはどうしたらいいでしょうか。 かなりわかりにくい説明だとは思いますが、 よろしくお願いします。

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

  • オートフィルタで抽出結果がない場合

    excel2003を使用しています。 以下のような表があります。 コード  社名  終了日  A   あ社   6/1  B   い社         C   う社      終了日に日付が入ったら別シートにその結果をコピーしたいのですが、もし、終了日に日付がまったくない時は、オートフィルタを設定しないか、コピーをしないかにしたいです。 この表一つでしたらマクロを実行しない方法もあるのですが、実際は複数の表を同時にオートフィルタしてコピーしてしまっているので、終了日に日付のまったくない表もあり、その場合、抽出結果をコピーした表がおかしくなります。 説明が不十分かも知れませんが、よろしくお願いいたします。

  • EXCEL:オートフィルタの抽出結果を反映させる

    EXCELで顧客管理をしています。 オートフィルタで8月に問合せを頂いた顧客だけを抽出し、 受注数/問合せ数→受注率 で 8月分だけの受注率を出したいと思っています。 別シートに上記の受注率の計算式だけ入れておいて オートフィルタでの抽出結果が自動的に反映されるようにしたいのですが、 どういった形でデータを参照させれば良いのかがわかりません。 そもそもそういったことは可能なのでしょうか? お詳しい方のご教授をお待ちしております。 どうぞよろしくお願いいたします。

  • オートフィルタの結果のみで計算を行うには?

    以下のようにA列に種類、B列に個数があったとします。 A列    B列 種類1   1 種類1   2 種類2   1 種類1   4 種類3   3 種類2   2 ・     ・ ・     ・ ・     ・ オートフィルタで種類1のみを抽出しても、B列全体の合計(=sum(B:B))では、全ての種類の合計が出てきてしまいます。 オートフィルタでの抽出結果のみを計算式に反映させることは出来ないのでしょうか? ちなみに実際にやりたいことは、この種類に該当する物が多く、かつ計算式もSUMなどの単純な物だけではないため、SUMIFを使う、と言った対応は難しいので、このような質問をさせていただきました。

専門家に質問してみよう