5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
受講生さんの投稿
(投稿ID: 2658)
お世話になっております。
単純ですが、シートにある勘定科目毎に伝票を集計し、合計を別シートのP/Lに書き出すマクロです。
1万行以上と金額が億単位だったので、マクロを動かしたら、ものすごくPCのスピードが落ちたので、
何10分まったら終わるのかとおもい途中でやめました。こういう場合はSUMIF関数の方がよいのでしょうか。
ちなみにPCのスペックは問題ありません。宜しくお願いします。
ゲストさんのコメント
(コメントID: 4110)
こんばんは。
これは計算量が多いですね。。なんとかしたくなるのも分かります (^_^;
とはいえ、基礎編レベルの知識ではこれが限界です。
受講生さんも受講済の発展編1で、 WorksheetFunction というオブジェクトを扱っています。
名前のとおり、エクセルのワークシート関数を呼び出してVBAで利用できるというものです。
使いこなせるようになると、同様の計算をするエクセルワークシート関数をご存知でしたら、自分で計算アルゴリズムを編み出さないでも1行で計算をしてくれて便利です。
古典的かつ代表的なワークシート関数でしたらほぼほぼVBAから利用可能です。
以下に、Sum関数、Count関数、CountIf関数を活用する場合のサンプルを示します。試してみてください。
上に示したサンプルコードからも分かるとおり、引数でセルを指定する際は、セル番地でなく、セルをオブジェクトとして指定する必要があります。
あと、エクセルのバージョンによっては、 WorksheetFunction の前に Application. をつけなくてはならないかも。
そこだけ注意。
それから、エクセルで開いているファイルのどれかに計算量の多いワークシート関数が大量に含まれている場合も処理が遅くなる傾向があります。
セルの編集がある都度、すべてのワークシート関数が再計算をするからです。
VLookUp関数とかIsError関数とか、そういうたぐいのがぐちゃぐちゃと入れ子になっているセルが大量にあるとかの場合ですね。
その場合、マクロでの処理開始の前に、ワークシート関数の再計算機能を停止させ、処理後に自動で再計算するように再設定します。
以下の要領。
[*]について補足すると、エクセルで設定画面から再計算を自分で止めている人も(滅多にないですが)いるかもしれないので、以下のほうがより親切。
なぜ変数を Long 型にしたのか?とか [+] でなにをしているのか?とかいったことについては、基礎編レベルを大きく超えるのでここでは説明割愛します。
受講生さんは発展編1受講済のようですので、まずは上記についてテキストにて再学習のうえ、さらにご質問あるようでしたら、発展編1講座のどこかでまたご質問いただければと。