• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの高速化には?)

エクセルの高速化方法とは?

このQ&Aのポイント
  • エクセルでの在庫管理システムの作成において高速化するための方法をまとめました。
  • 参照関数や配列数式の避け方、ブック間参照の減らし方、VBAやアクセスの活用などが考えられます。
  • また、関数のネストを浅くすることや条件付き書式として関数を使用することによる重さの比較についても検討する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 一般的な方法論というのは、あまり大した効果はないとは思います。 ワークシートでは、安定した値を保管できるものは、保管させればよいのです。だから、補助セル・補助列で演算して、それを参照させればよいわけです。その意味は、数式というのは、基本的には、参照セルの変化に対して、解を変化させます。しかし、そうでない関数もあります。 今さらの話ですが、 http://support.microsoft.com/default.aspx?scid=kb;ja;402644 [XL95]変更していないブックを閉じる際保存するか尋ねられる場合 たとえば、 RAND関数のように、値を保持しないものは、極力使わないようにします。 ただ、神経質になる必要はないし、VBAで、それを避けることも可能です。 上記のサイトの関数は、再計算関数とか揮発性関数と呼びますが、完全になくすことはできませんから、その場合に、数式の数を増やさないとか参照範囲を広げないとかします。 前の書き込みで、 =IF(COUNTIF(C:C,A1)>0,VLOOKUP(A1,C:C,2,0),"") =IF(COUNTIF($C$1:$C$250,A1)>0,VLOOKUP(A1,$C$1:$C$250,2,0),"") どちらが速いかは、どちらもデータが、250行目までなら、ほとんど同じです。 もともと、データのある場所までしか、データは存在していないし、データのない場所は、単に見かけのスペースだけですから。 ただし、メモリの使用率からすると、数式は文字列ですから、文字列を略したほうがよいです。 例 上記のサイトの関数は、再計算関数とか揮発性関数と呼びますが、完全になくすことはできませんから、その場合に、数式の数を増やさないとか参照範囲を広げないとかします。 = Offset(A1,0,1)    ↓ = Offset(A1,,1) 実務上では、実際に、配列数式を使わなくてもできるものがほとんどです。配列数式でないとできない種類のものは少ないです。専門のMODEとかFREQUENCYとかは、マクロで代用できますので、広範囲に使うなら、切り替えが必要です。 ブックを分ける方法もあります。片方をデータだけにして、別のブックから、ODBC や古典的方法でデータを取り出す方法でもよいのです。それが、ブックでなくても、mdb ファイルでも良いわけです。 それに、データベース関数もありますし、フィルタオプションやオートフィルタもよいです。 VBAのマクロというのは、数式と比較したら、100倍ぐらい遅いのですが、保有メモリに邪魔されることがないので、結果的には速くなるわけです。保有メモリに邪魔されると、半端ではなく遅いからです。Excel 2007 になると、特別に改善されているようです。 http://msdn.microsoft.com/ja-jp/library/aa730921.aspx Excel 2007 におけるパフォーマンスの改善 書式は、スタイルで変更すると、負担が少ないといいます。また、書式は、こまめに設定するのではなく、まとめて設定したほうがよいです。 「ユーザー関数を使えば書式は簡単になりますが、重さの点ではどうなのか、」 たぶん、書式のユーザー定義だと思いますが、数を増やさないことですね。

maina-
質問者

お礼

ご丁寧な回答、ありがとうございます。 >補助セル・補助列で演算して、それを参照させればよいわけです。 私は補助列等はできるだけ避けて、書き込むセルの数を減らした方が高速化できるように思っていたのですが、ご紹介いただいたサイトを拝見すると逆効果のようですね (--;) >どちらが速いかは、どちらもデータが、250行目までなら、ほとんど同じです。 もともと、データのある場所までしか、データは存在していないし、データのない場所は、単に見かけのスペースだけですから。 そうでしたか・・・ 揮発性関数に関しては特に文字列を削減して = Offset(A1,0,1)    ↓ = Offset(A1,,1) ですね。これは役立ちそうです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

これは「Excelの設定」になってしまい、「Bookの設定」ではない ので、動作させるExcel全てに設定が必要(またはvbaでそういう 設定変更を動作させる必要)があるんですが、 「ツール」「オプション」の「計算方法タブ」で「計算方法」を 「手動」にする という手があります。これをすると、[F9]を押さない限り全ての 再計算をやってくれません(当然計算結果も出てこない)。当然 計算をしない分処理速度は速いですし、入力が終わった時点で [F9]を押して結果を待つ、というのは余りストレスにならないと 思います。 最後の手段として、覚えておくといいかもです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelで#N/Aエラーの対策

    Sheet1の表の一部をSheet2に抜粋して表示したくて =IFERROR(INDIRECT(A1),"") と抜粋を表示するSheet2のセル範囲に配列数式として入力しました。 式内の参照先A1には、「Sheet1!A1:E5」「Sheet1!G1:D7」等を示す範囲の名前を記入しています。 画像では「範囲1」となっています。その名前を変更することで、抽出する範囲も変更されます。 「A1:E5」なら5行5列、「G1:D7」なら6行7列のように抽出する範囲の大きさが異なるので 上記の配列数式はその最大の範囲6行7列の大きさに合わせて入力しています。 ここで5行5列分を抽出すると、画像の様に最大範囲に満たない部分に#N/Aエラーが出るため、 その対策として IFERROR関数を使用したわけですが、エラー対策前後で変化がありません。 IFNA関数や、IF関数とISERROR関数のネストでも同様です。IS関数ではエラーかどうかは判別できているようです。 このケースではエラー対策の関数は無効なのでしょうか。 尚、条件付き書式で「エラーなら文字色を背景色に同じ」としてごまかすことはできますが、 その値を別の引数として使用するため、可能なら根本的にエラー対策したいところです。

  • エクセルの#value!エラーについて質問します。

    エクセルのヘルプには#value!エラーが返る原因のひとつに ・セル参照、数式または関数が配列定数として入力されている とありますが、これはどのような状態なのでしょうか? 具体的に数式で示してください。 他所でも質問したのですが具体的な答えが返ってこなかったので・・・

  • エクセル2013保存エラー

    エクセル2000(.xls)ブックを2013(.xlsx)に保存し直しました。 新たに入力をし上書きをすると、エラーとなりバイナリブック(.xlsb)にて回復されたり、エクセルブックで回復保存されたりします。 ブック内の関数や参照数式の一部変更をしたら、元のブックのまま上書きが可能となったのですが、テキストの入力は新たにするも、数式の入力はしていなかったにも関わらず、しばらくしたら、特定のページを開いたままでの上書きができなくなり、少ししたら、特別に何を変えたわけでもないのに保存ができる様になりました。 現在は大丈夫なのですが、また起きそうで原因と対応策を探しています。 Win8.1 acer メモリ8G エクセルはアマゾン購入の国内販売用(のはず)のダウンロード版で、マイクロソフトのHPよりダウンロードしました。 解決策があったら教えて下さい。お願いします。 開いた状態での上書きではエラーとなるページで、おかしな参照をしているセルが無いか検索にて条件を=とし、すべて数式を見ましたが、同ブック内他シートを参照しているものはあっても、他のブックの参照や結果エラーとなっているものはありませんでした。

  • エクセルの書式コピーの仕方に関して教えてください。

    はじめまして。 エクセルの書式コピーの仕方に関して教えてください。 A1 =VLOOKUP($B$1,'sap fcst'!$F:$AD,3,0) という数式があったとして、 B1・C1・D1・E1と数式を横にコピーするにあたって 列番号だけを4.5.6.7.8と参照の列を変えていくには どのような関数と数式を使ったら良いでしょうか。 よろしくお願いいたします。

  • エクセル VLOOKUPが反映されない

    エクセルに詳しい方、教えて下さい。 エクセルで部品の在庫管理をしているのですが、月に1度、外注さんからエクセルのデータで在庫表が送られてくるのですが、データ量が多い為、VLOOKUP関数を使って同じ部品があるかどうか(部品コードで検索しています。)検索をかけているのですが、外注さんのエクセルのセルの書式設定が違うのか、同じ部品コードがあっても「#N/A」になってしまうのですが、なぜでしょうか? また、セルの書式設定を「標準」にしても、「#N/A」←エラーになってしまって、どちらかの表に部品コードを入力し直すと反映されるのですが、データ量が多いので1個1個入力し直すと時間がかかってしまうので困っています。どなたかわかる方がいましたら宜しくお願いします。

  • Excelについて

    Excel2003を使用しています。 1ヶ月の表を作成しようとし、 先月分、来月分の日付だけは フォントを灰色にしようとして、 条件付き書式の設定で EOMONTH関数を使いました。 すると以下のメッセージが出てこの関数が使えないです。 “抽出条件 条件付き書式で、他のワークシートまたはブックへの参照は使用しません。” 一応、アドインの分析ツールのチェックはしています。 Excel2003ではEMONTH関数は使えないのでしょうか? 使えるとしたらどのように使えばよろしいでしょうか?

  • エクセルのデータベースで参照・貼り付け

    エクセル2003で、部品在庫のデータベースを作成してあります。 シート1"18年部品在庫" [コード][部品名称][単価][数量]... シート2は"19年部品在庫"ですが、ほぼ白紙の状態。 [コード]を手入力すると、昨年のデータベースを参照し[部品名称][単価][数量]を貼り付け。 単価や、数量に変化がある場合、19年度のシートの単価や、数量だけを修正したいと思います。 ※できるだけマクロではなくて、関数で行いたいと思います。 よろしくお願いいたします。

  • C言語でストップウォッチ

    ストップウォッチをデジタル表示で作っているんですが、行き詰ったので質問させてもらいました。 二次元配列に数字のデジタル表示の部品を入れ、ネストを繰り返し、Sleep関数を使い1秒毎に表示させているんですが、「キーを押すと止まる」が出来ずに詰まっていますので、教えていただけるとありがたいです。

  • エクセル関数で0表示を消したい

    エクセルで0表示を消すには? エクセル2002を使っています。 例えば A1セルにて割り算をセットしRAUND関数を使い 書式設定では、数式を選び 少数点以下桁数は0表示を選択。 で、演算結果は良いのですが計算されない場合0が表示されます。 この0表示されない様にするには? どのような数式を追加すると良いのでしょうか? よろしくお願いいたします。

  • 条件付書式で「他のワークシートまたはブックへの参照は使用しません」

    条件付書式(の数式の方)で 数式に、 =NETWORKDAYS(TODAY(),$B28)<=4 といれると、 「抽出条件 条件付書式で、他のワークシートまたはブックへの参照は使用しません」というエラーになってしまいます。 これがなぜなのか、また、回避策を教えてください。 他のシートやブックへの参照なんてしてないんですけど。。。 やりたいことは、条件付書式の条件で 今日から数えて、平日日数で3日後までならば、という条件を書きたいです。 Bの列(上記の例ではB28)には日付が入っております。 なお、 =NETWORKDAYS(TODAY(),$B28) そのものは、 単純にセルに入力するときちんと認識されます。 (分析ツールアドイン組込み済み) よろしくお願いいたします。

専門家に質問してみよう