Office 開発におけるパフォーマンス トラブルシュート (その 1 : 概要と対処方法)

こんにちは、Office 開発サポート チームの中村です。   Office 開発において、「期待するパフォーマンスが出ない」「利用する Office のバージョンによってパフォーマンスが低下する」といったお問い合わせを頂くことがあります。今回の記事では、このような状況で改善を図るためにどのように調査・検討を進めればよいかを記載します。 このテーマの記事は 2 回に分けて投稿予定で、今回は全体の流れと Office におけるパフォーマンスの考え方など、2 回目はボトルネックの特定手法について具体的に解説する予定です。   目次 1. はじめに : Office におけるパフォーマンス 2. プログラム上のボトルネックの特定 3. 対処方法の検討 3-1. ボトルネックとなる処理の速度改善 3-2. プログラム構成の見直し 3-3. プログラム全体のパフォーマンス チューニング 3-4. 他の言語から VBA に変更する 3-5. マシン リソースの増強   1. はじめに : Office におけるパフォーマンス Office はデスクトップ アプリケーションとして設計されています。このため、ユーザー操作では大きく気にならないような短い処理時間のパフォーマンスは、機能設計上それほど優先される考慮事項ではありません。このため、例えばデータベース製品のように、大量の要求が常に送られれてくることを想定した精度のパフォーマンス設計は行われていません。プログラムにより大量の処理を繰り返し行うと、ユーザー操作では許容される程度の小さな積み重ねが全体としてパフォーマンスに大きく影響を与えることがあります。   また例えば、「Office 2010 から Office 2016 にバージョンアップしたら以前の処理時間の…


Office リボンをカスタマイズ – パート7 – (TIPS 3 : 特殊メニューのカスタマイズ)

こんにちは、Office 開発サポートの中村です。 これまで 6 回にわたってリボン カスタマイズについて記事を公開してきましたが、今回でいったん最後の記事の予定です。最後に、特殊なメニューである BackStage ビュー / 右クリックで表示されるコンテキスト メニュー / クイック アクセス ツール バーのカスタマイズ方法をご紹介します。   目次 1. BackStage ビューのカスタマイズ 2. 右クリック メニューのカスタマイズ 3. クイック アクセス ツールバーのカスタマイズ     1. BackStage ビューのカスタマイズ BackStage ビューは、Office 2010 から導入された [ファイル] タブ内のメニューを指します。Excel 2016 の場合、以下のような画面です。 Office 2010 の名前空間 <http://schemas.microsoft.com/office/2009/07/customui> では、この BackStage ビューをカスタマイズする方法も用意されています。言い換えますと、XML でのカスタマイズのみとなりますので、VSTO でビジュアルなデザイナーから BackStage ビューをカスタマイズすることはできません。 また、通常のリボンは、VBA の Comanndbars…


Excel ユーザー定義関数に機能説明や独自ヘルプをリンクする方法

こんにちは、Office 開発サポート チームの中村です。   Excel には、セルに設定する式として、SUM() のように計算に関するものや、IF() のように論理条件を制御するものなど、様々なワークシート関数が用意されています。既存のワークシート関数で要望を満たすものがない場合、マクロで実装した独自処理を、ユーザー定義関数として登録することができます。 このブログを訪れる方の多くは、ユーザー定義関数を登録すること自体はご存知の方が多いかと思いますが、このようなユーザー定義関数を作成するときにその関数に機能説明やヘルプを追加する方法について、公開情報からは分かりづらい点もありますので、本記事で紹介したいと思います。   1. ユーザー定義関数の作成 関数説明の登録やヘルプのリンクの前に、まずはユーザー定義関数を登録する方法を確認します。 ユーザー定義関数の作成は、VBA の標準モジュールに Function 関数を記述するだけですぐに利用できます。以下の例は、TestUDF という名前の関数を作成し、引数 1 に数値、引数 2 に文字列を渡すと、これらを組み合わせて文章を作成して返却する関数です。(Public でなくともユーザー定義関数として利用できます。アドインなどで複数ブックからの利用を想定している場合は Public を付与します。) Public Function TestUDF(num As Integer, str As String) As String TestUDF = “No.” & num & “は” & str & “です” End Function   このような VBA コードを追加した状態でシート上でセルに直接関数を入力すると、すぐに利用できます。   ただこのままの状態では、Excel に標準で用意されているワークシート関数で表示される利用方法の説明やヘルプ…


Office リボンをカスタマイズ – パート6 – (TIPS 2 : 動的なカスタマイズ)

こんにちは、Office 開発サポート チームの中村です。 今回の記事では、前回の投稿に引き続き、リボン カスタマイズ方法の例をご紹介します。   以前の投稿で紹介した方法で、リボンのカスタマイズがファイル単位でできることはお伝えしましたが、以下のような状況の開発者の方もいるのではないでしょうか。 ・アドインとして提供する 1 つのプログラムから、ファイルによってリボンの内容を変えたい (ファイルにカスタマイズを組み込みたくない) ・Office 97-2003 形式 (.xls 等) のファイルにリボン カスタマイズを行いたい ・ブック内での操作に応じて動的にリボンの状態を変えたい   これらの要望は、Office 2007 形式のアドイン (.xlam 等)、または VSTO カスタマイズで実現できますので、以下に具体例を用いて紹介します。Excel のカスタマイズを行われることが多いので、(これまでの記事を含め) 以下はすべて Excel を例に説明していますが、他の Office アプリケーションでも利用できます。   目次 1. .xls 形式のファイルのリボン カスタマイズを行う (アドインからファイルごとにリボンをカスタマイズする) 2. 任意のタイミングでリボンの状態を変更する   1. .xls 形式のファイルのリボン カスタマイズを行う (アドインからファイルごとにリボンをカスタマイズする) .xlsx / .xlsm 形式のファイルであれば、リボン カスタマイズの XML をファイル内に組み込むことができました。一方、.xls…


Office リボンをカスタマイズ – パート5 – (TIPS 1 : 既存メニューのカスタマイズ)

こんにちは、Office 開発サポート チームの中村です。   本テーマについて、前回の投稿から時間が空いてしまい申し訳ありません。 ここまでの記事では、カスタムのリボン タブを作成するというカスタマイズ内容を例に、カスタマイズ手法についてご紹介してきました。今回の記事からは、この他によく行われるカスタマイズの実装方法をいくつか紹介しつつ、XML などの書き方のイメージを掴んでいただればと思います。   今回の投稿で紹介する方法は、1. を除いて VSTO のビジュアルなデザイナーではカスタマイズできない内容となりますので、XML を利用して実装します。VSTO のビジュアルなデザイナーでカスタマイズしている方で以下の方法を利用したい場合は、以前の投稿の例でも行っていたように、ビジュアルなデザイナーで作成したリボンを XML へエクスポートできます。   目次 はじめに : 開発時に便利な機能 1. 既存のタブをすべて表示しない方法 2. 既存のリボン メニューを無効化する方法   はじめに : 開発時に便利な機能 Office で以下のオプションを有効にすると、リボン カスタマイズ用の XML の記述エラーをハンドリングすることができます。 無視して問題ないエラーも通知されるため、運用上はお勧めしませんが、開発時にはこのオプションを有効にしておくと実装上の問題点を確認しやすくなります。 <該当の設定項目> [ファイル] タブ – [オプション] – [詳細設定] – [全般] セクション – [アドイン ユーザー インターフェイスに関するエラーを表示する]   1. 既存のタブをすべて表示しない方法 アプリケーション経由で…


VSTO : .NET 3.5 で使用していた UserInclusionList クラスが .NET 4.0 以降は使用できない

  こんにちは、Office 開発 サポート チームの多田です。 今回は、.NET 3.5 で使用していた UserInclusionList クラスが .NET 4.0 以降では使用できない件、およびその対処策についてご案内します。   はじめに VSTOソリューションをインストール時や、初回起動時にユーザーに信頼するかどうかの確認ダイアログを表示させたくない、といった理由から、VSTO ソリューションへの信頼をあらかじめ付与したい場合があります。信頼を付与する方法として、従来、VSTO では UserInclusionList クラスおよび AddInSecurityEntryクラスが用意されていました。   参考) 方法: 信頼のリストのエントリを追加または削除する https://msdn.microsoft.com/ja-jp/library/bb398239.aspx UserIncrusionList クラスおよび AddInSecurityEntry クラスを含む Microsoft.VisualStudio.Tools.Office.Runtime.v10.0.dll は、.NET Framework 3.5 用の Office 拡張機能アセンブリです。 このため、.NET Framework 3.5 ターゲットの VSTO テンプレートを含まない Visual Studio 2012 以降がインストールされた開発環境で、かつ .NETFramework 3.5 が端末にインストールされていない場合は、Microsoft.VisualStudio.Tools.Office.Runtime.v10.0.dll アセンブリを利用できません。また、インストール先環境に .NET Framework 3.5 がインストールされていない場合も、同様に利用できません。   参考) タイトル : Visual Studio Tools…


Excel の CodeName プロパティが取得できない動作

こんにちは、Office 開発 サポート チームの中村です。 今回は、Excel の CodeName プロパティの動作について、開発時に気付きづらい動作上の注意点を記載します。この状況に直面した開発者の皆様へのヒントになれば幸いです。   Excel をオートメーションするとき、ブックやシートを特定するために、CodeName プロパティを使用できます。CodeName プロパティは、Visual Basic Editor (VBE) のプロパティ ウィンドウの [(オブジェクト名)] で確認できる値です。 Excel の CodeName プロパティは、以下の 3 つのオブジェクトに用意されています。   タイトル : Workbook.CodeName プロパティ (Excel) アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff195162.aspx   タイトル : Worksheet.CodeName プロパティ (Excel) アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff837552.aspx   タイトル : Chart.CodeName プロパティ (Excel) アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff835278.aspx   CodeName…