Excel2013以降の特徴とVBAの挙動について

記事
IT・テクノロジー
数ヶ月前に会社のパソコンが Windows7 のサポート終了に伴って Windows10 に変わり、 Excel も 2010 から 2016 に上がりました。 
(パソコンは中古機だったので 2019 ではなかった。。。笑)

Excel は 2010 から 2013 になったときに大きく変貌しました。
それによってマクロも多大な影響を受けています。

●シングルドキュメントインターフェイス
大きく変貌したすべての元凶(?)はこれです。

2010 までの Excel は1つのアプリケーションウィンドウに複数のドキュメントウィンドウがある形でした。
これを「マルチドキュメントインターフェイス(MDI)」と言います。

一方 2013 以降の Excel は1つのアプリケーションウィンドウに1つのドキュメントウィンドウのみの「シングルドキュメントインターフェイス」となりました。

Excel2013以降の VBA の影響で気づいたことを1つずつ書いてみます。

●複数のブックを横断する処理における UserForm の表示
私が作成するマクロではよく進捗表示を UserFrom を使いますが、2つ以上のブックをそれぞれアクティブにしながら処理するようなマクロの場合、UserForm は後ろに隠れてしまう場合があります。

これの対処法ですが、CSVデータの場合は普通に開くのではなく「外部データの取り込み」を使うこと。
Excelブックの場合は普通に開くしかないので、開いて必要なデータを処理対象のブックに持ってきてから処理を行うといいと思います。

とにかく、極力マクロの処理を1つのブックだけで行うことだと思います。

●マクロの実行が遅い
Excel2010 から 2016 になって、マクロの実行スピードが格段に落ちたと感じることがよくありました。
そのうち、対処できるものをいくつか書いてみます。

①ウイルススキャンが実行されている
 → スキャンを止めるか、スキャンが終わるまで待ちます。

②別のExcelブックでオブジェクト(図形)がいっぱいあるブックを開いている
③別のExcelブックで条件付き書式が設定されているブックを開いている
 → その「別のブック」を閉じます。

ウイルススキャンはしょうがないとして、マクロを実行するときは他のExcelブックは閉じた状態で実行するほうが良さそうです。

④Outlook を開いている
 → Office つながりなんでしょうが、Outlook が開いた状態でも処理が遅いことがありました。これも閉じて実行してみてください。

●マクロの実行中に実行していないブックを開く(選択する)と処理が止まる
Excel2010以前はマクロ実行中は他のブックを操作することはできませんでしたが、2013以降は SDI のため操作できてしまいます。
しかしそのせいで他のブックを選択してしまうと、マクロが処理対象とするブックが変わってしまうため、処理対象のシートやセルが見つけられず、エラーになってしまうことがあります。

これの対処方法としては、特にシート名を切り替えたりするときに "Sheets(XXX).Activate" の記述を "ThisWorkbook.Sheets(XXX).Activate" などとブック名を明示してあげるのがいいのではないかと思います。
しかし、それ以外の場所でも他のブックを選択することで処理に問題が起こる可能性があるので、結局は処理中はパソコンを触らないのが一番だとは思います 笑


以上、気づいたことを記載してみました。
また気づいたことがあれば追加しようと思います。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す