Office VBA の基礎知識Getting started with VBA in Office

Word で 50 個の表を繰り返しクリーンアップしていませんか。Are you facing a repetitive clean up of fifty tables in Word? 特定の文書が開かれたときに、ユーザーに入力を求めるようにする必要はありませんか。Do you want a particular document to prompt the user for input when it opens? Microsoft Outlook の連絡先を Microsoft Excel のスプレッドシートに効率よく転記する方法を求めてはいませんか。Are you having difficulty figuring out how to get your contacts from Microsoft Outlook into a Microsoft Excel spreadsheet efficiently?

Visual Basic for Applications (VBA) for Office を使用すると、これらの作業を実行し、さらにそれ以上のことを実現できます。VBA for Office は、単純でありながら強力なプログラミング言語であり、Office アプリケーションを拡張するために使用できます。You can perform these tasks and accomplish a great deal more by using Visual Basic for Applications (VBA) for Office—a simple, but powerful programming language that you can use to extend Office applications.

この記事の内容は、VBA について学ぶことを希望したり、Office をカスタマイズする作業にプログラミングを役立てる方法について詳しく知ることを望む、経験ある Office ユーザーのために書かれています。This article is for experienced Office users who want to learn about VBA and who want some insight into how programming can help them to customize Office.

Office アプリケーション スイートには、豊富な機能が用意されています。The Office suite of applications has a rich set of features. ドキュメント、メール、データベース、フォーム、スプレッドシート、プレゼンテーションを多数の異なる方法で作成、書式設定、および操作することができます。There are many different ways to author, format, and manipulate documents, email, databases, forms, spreadsheets, and presentations. Office において VBA プログラミングが提供する大きなメリットは、マウス、キーボード、またはダイアログ ボックスで実行できるほとんどすべての操作が VBA を使用しても行えることです。The great power of VBA programming in Office is that nearly every operation that you can perform with a mouse, keyboard, or a dialog box can also be done by using VBA. さらに、VBA を使用して実行できるようになった操作は、簡単に 100 回繰り返すこともできます Further, if it can be done once with VBA, it can be done just as easily a hundred times. (実際、タスクを自動で繰り返し実行することは、Office で最も一般的な VBA の使い方です)。(In fact, the automation of repetitive tasks is one of the most common uses of VBA in Office.)

VBA では、日常の作業を効率化するだけでなく、Office アプリケーションに新しい機能を追加したり、それぞれのビジネス ニーズに合わせた方法でドキュメントのユーザーに操作を促したりユーザーと対話したりすることもできます。Beyond the power of scripting VBA to accelerate every-day tasks, you can use VBA to add new functionality to Office applications or to prompt and interact with the user of your documents in ways that are specific to your business needs. たとえば、文書の初回保存時には、特定のネットワーク ドライブに保存するように指示するポップアップ メッセージを表示することも、VBA コードを作成して実行できます。For example, you could write some VBA code that displays a pop up message that reminds users to save a document to a particular network drive the first time they try to save it.

以下では、VBA プログラミングを活用する主な理由について説明します。This article explores some of the primary reasons to leverage the power of VBA programming. VBA 言語の概要を解説し、ソリューションを操作するためにすぐに使用できるツールについて説明します。It explores the VBA language and the out-of-the-box tools that you can use to work with your solutions. 締めくくりとして、一般的なプログラミングのフラストレーションと手違いを避けるためのヒントと手法を示します。Finally, it includes some tips and ways to avoid some common programming frustrations and missteps.

VBA を使用する状況と理由When to use VBA and why

Office で VBA プログラミングの使用を検討するのは、次のようないくつかの理由からです。There are several principal reasons to consider VBA programming in Office.

自動実行と繰り返しAutomation and repetition

VBA は、特定の書式の設定や問題の修正を繰り返し実行するソリューションを作成するには、効果的で効率の良い手段です。VBA is effective and efficient when it comes to repetitive solutions to formatting or correction problems. たとえば、Word で各ページの最初の段落にのみ別のスタイルを設定したことはないでしょうか。For example, have you ever changed the style of the paragraph at the top of each page in Word? Excel から Word 文書または Outlook のメールに貼り付けた複数の表に、書式の再設定が必要になったことはないでしょうか。Have you ever had to reformat multiple tables that were pasted from Excel into a Word document or an Outlook email? 同じ変更作業を複数の Outlook の連絡先に行う必要に迫られたことはないでしょうか。Have you ever had to make the same change in multiple Outlook contacts?

変更を 10 回または 20 回以上繰り返す必要がある場合、VBA を使用してこの操作を自動化すると便利です。If you have a change that you have to make more than ten or twenty times, it may be worth automating it with VBA. 変更を数百回繰り返す必要があるのなら、VBA の使用には確実にメリットがあります。If it is a change that you have to do hundreds of times, it certainly is worth considering. 手動で行えるほとんどすべての書式設定や編集の操作は、VBA でも実行することができます。Almost any formatting or editing change that you can do by hand, can be done in VBA.

ユーザーとの対話を拡張するExtensions to user interaction

ときには、標準アプリケーションの一部ではない方法で、Office アプリケーションまたは文書との対話型の操作をユーザーに求める、または強制する必要に迫られることもあります。There are times when you want to encourage or compel users to interact with the Office application or document in a particular way that is not part of the standard application. たとえば、文書を開く、保存する、または印刷するときに特定のアクションを行うようにユーザーに求めることがあります。For example, you might want to prompt users to take some particular action when they open, save, or print a document.

Office アプリケーション間の対話Interaction between Office applications

Outlook からすべての連絡先を Word にコピーし、それらに特定の方法で書式を設定する必要はないでしょうか。Do you need to copy all of your contacts from Outlook to Word and then format them in some particular way? または、Excel からデータを PowerPoint スライドに移動する必要はないでしょうか。Or, do you need to move data from Excel to a set of PowerPoint slides? ときには、コピーと貼り付けが期待した結果にならなかったり、時間がかかり過ぎたりすることもあります。Sometimes simple copy and paste does not do what you want it to do, or it is too slow. VBA プログラミングを使用すると、同時に 2 つ以上の Office アプリケーションの個別の機能を対話型で操作してから、あるアプリケーションのコンテンツを別のアプリケーションのコンテンツに基づいて変更することができます。You can use VBA programming to interact with the details of two or more Office applications at the same time and then modify the content in one application based on the content in another.

別の方法で実現するDoing things another way

VBA プログラミングは強力なソリューションですが、常に最適なアプローチであるとは限りません。VBA programming is a powerful solution, but it is not always the optimal approach. 目的によっては、別の手段を選択するほうが適切な場合もあります。Sometimes it makes sense to use other ways to achieve your aims.

まず、もっと簡単な方法がないかを確認します。The critical question to ask is whether there is an easier way. VBA プロジェクトを開始する前に、組み込みのツールや標準機能で実現できないか検討してください。Before you begin a VBA project, consider the built-in tools and standard functionalities. たとえば、時間のかかる編集やレイアウトの作業がある場合、スタイルやアクセラレータ キーを使用して問題を解決できるかどうかを検討します。For example, if you have a time-consuming editing or layout task, consider using styles or accelerator keys to solve the problem. 最初の一回だけその操作を行って、Ctrl + Y キー (やり直し) でその操作を繰り返すという方法も検討してみてください。Can you perform the task once and then use CTRL+Y (Redo) to repeat it? 正しい書式やテンプレートを使用して新しい文書を作成してから、コンテンツをこの文書にコピーすることはできないでしょうか。Can you create a new document with the correct format or template, and then copy the content into that new document?

Office アプリケーションの機能はとても充実しています。必要とするソリューションが既に用意されている可能性があります。Office applications are powerful; the solution that you need may already be there. プログラミングを始める前にまず、Office の機能を確認する時間を確保してください。Take some time to learn more about Office before you jump into programming.

VBA プロジェクトを開始する前に、VBA の作業に必要な時間を確保してください。Before you begin a VBA project, ensure that you have the time to work with VBA. プログラミングには作業に専念できる時間が必要となり、その作業にかかる時間数は予測できないこともあります。Programming requires focus and can be unpredictable. 特に初心者の場合は、注意深く作業できる時間を確保せずにプログラミングを始めることはしないようにしてください。Especially as a beginner, never turn to programming unless you have time to work carefully. 期限が迫っているときに、"間に合わせのスクリプト" を記述して問題を解決しようとすると、深刻な状況に陥ることがあります。Trying to write a "quick script" to solve a problem when a deadline looms can result in a very stressful situation. 時間がないときは、単調で繰り返しが多いとしても標準的な手段を利用してください。If you are in a rush, you might want to use conventional methods, even if they are monotonous and repetitive.

VBA プログラミングの基礎VBA Programming 101

コードを使用してアプリケーションに処理を実行させるUsing code to make applications do things

コードを記述することは謎の多い難解な作業に思われることもありますが、その基本原理は日常的論理に基づいていて理解しやすいものです。You might think that writing code is mysterious or difficult, but the basic principles use every-day reasoning and are quite accessible. Microsoft Office アプリケーションは "オブジェクト" という概念を公開するように開発されており、各オブジェクトは命令を受け取ることができます。これは、電話機にボタンがあり、ボタンを介して電話機に操作を伝えるのと似ています。Microsoft Office applications are created in such a way that they expose things called objects that can receive instructions, in much the same way that a phone is designed with buttons that you use to interact with the phone. あるボタンを押すと電話機は命令を認識し、ダイヤルする番号を順序に従って受け取ります。When you press a button, the phone recognizes the instruction and includes the corresponding number in the sequence that you are dialing. プログラミングの世界では、アプリケーションとやり取りするためにそのアプリケーションに含まれる各種 "オブジェクト" に命令を送ります。In programming, you interact with the application by sending instructions to various objects in the application. それらのオブジェクトには拡張性がありますが、それぞれに制約があります。These objects are expansive, but they have their limits. 各オブジェクトはデザインされている機能だけを実行でき、命令されたことだけを実行します。They can only do what they are designed to do, and they will only do what you instruct them to do.

たとえば、文書を Word で開き、若干の変更を行ってから保存し、最後に閉じるとします。For example, consider the user who opens a document in Word, makes a few changes, saves the document, and then closes it. VBA プログラミングの世界では、Word は Document オブジェクトを公開します。In the world of VBA programming, Word exposes a Document object. VBA コードを使用して、Document オブジェクトに対して Open、Save、Close などの動作を指示することができます。By using VBA code, you can instruct the Document object to do things such as Open, Save, or Close.

以下に、オブジェクトがどのような方法で整理されているかを説明します。The following section discusses how objects are organized and described.

オブジェクト モデルThe Object Model

プログラミング オブジェクトは階層構造で開発され、そのような階層をアプリケーションの "オブジェクト モデル" といいます。Developers organize programming objects in a hierarchy, and that hierarchy is called the object model of the application. たとえば、Word のトップレベルの Application オブジェクトには、Document オブジェクトが含まれます。Word, for example, has a top-level Application object that contains a Document object. さらに Document オブジェクトには Paragraph オブジェクトが含まれ、以降も同様の構造となっています。The Document object contains Paragraph objects and so on. オブジェクト モデルは、ユーザー インターフェイス上に見えるものをおおまかに反映します。Object models roughly mirror what you see in the user interface. アプリケーションとその機能の概念上のマップが、オブジェクト モデルです。They are a conceptual map of the application and its capabilities.

オブジェクトの定義は "クラス" と呼ばれるので、オブジェクトとクラスは同じものを指す用語としてよく登場します。The definition of an object is called a class, so you might see these two terms used interchangeably. 技術的にはクラスとは、オブジェクトを作成 ("インスタンス化") するために使用される記述またはテンプレートを指します。Technically, a class is the description or template that is used to create, or instantiate, an object.

オブジェクトを作成した後は、そのオブジェクトの "プロパティ" を設定したり、"メソッド" を呼び出したりすることによって、オブジェクトを操作できます。Once an object exists, you can manipulate it by setting its properties and calling its methods. オブジェクトが名詞だとすると、プロパティはその名詞を修飾する形容詞、メソッドはその名詞の述語となる動詞です。If you think of the object as a noun, the properties are the adjectives that describe the noun and the methods are the verbs that animate the noun. プロパティを変更すると、オブジェクトの外観や動作が変わります。Changing a property changes some quality of appearance or behavior of the object. オブジェクトのメソッドの 1 つを呼び出すと、オブジェクトにアクションを実行させることができます。Calling one of the object methods causes the object to perform some action.

この記事の VBA コードは、動作中の Office アプリケーションに対して実行します。アプリケーションでは、コードによって操作される多数のオブジェクトが既に稼働しています。たとえば、アプリケーション本体 (Application)、Excel の Worksheet、Word の Document、PowerPoint の Presentation、Outlook の Explorer や Folder は、いずれもオブジェクトです。The VBA code in this article runs against an open Office application where many of the objects that the code manipulates are already up and running; for example, the Application itself, the Worksheet in Excel, the Document in Word, the Presentation in PowerPoint, the Explorer and Folder objects in Outlook. オブジェクト モデルの基本レイアウトと、アプリケーションの現在の状態にアクセスするために使用できる Application の主なプロパティについて理解すれば、Office 内で VBA を使用して Office アプリケーションを拡張したり操作したりすることができます。Once you know the basic layout of the object model and some key properties of the Application that give access to its current state, you can start to extend and manipulate that Office application with VBA in Office.

メソッドMethods

たとえば、Word では、現在の Word 文書のプロパティを変更し、メソッドを呼び出すには、Application オブジェクトの ActiveDocument プロパティを使用します。In Word, for example, you can change the properties and invoke the methods of the current Word document by using the ActiveDocument property of the Application object. この ActiveDocument プロパティは、Word アプリケーションで現在アクティブになっている Document オブジェクトへの参照を返します。This ActiveDocument property returns a reference to the Document object that is currently active in the Word application. "~への参照を返す" とは、"~へアクセスできるようにする" ことを意味します。"Returns a reference to" means "gives you access to."

次のコードは、文字どおりの処理を実行します。つまり、アプリケーション内のアクティブな文書を保存します。The following code does exactly what it says; that is, it saves the active document in the application.

Application.ActiveDocument.Save

このコードを左から順に見ていくと、"この Application 内で、ActiveDocument によって参照される Document を使用して、Save メソッドを呼び出す" と書かれています。Read the code from left to right, "In this Application, with the Document referenced by ActiveDocument, invoke the Save method." Save がメソッドの最も単純な形式であることに注意してください。細かい指示を与える必要はありません。Be aware that Save is the simplest form of method; it does not require any detailed instructions from you. Document オブジェクトに Save を行うよう指示すれば、それ以上の入力を与える必要はありません。You instruct a Document object to Save and it does not require any more input from you.

メソッドが他の情報を必要とする場合、そのような詳細な情報はパラメーターと呼ばれます。If a method requires more information, those details are called parameters. 次のコードは、SaveAs メソッドを実行します。このメソッドは、ファイルの新しい名前を受け取る必要があります。The following code runs the SaveAs method, which requires a new name for the file.

Application.ActiveDocument.SaveAs ("New Document Name.docx")

メソッド名の直後にかっこで囲んで記述する値が、パラメーターです。Values listed in parentheses after a method name are the parameters. ここでは、ファイルの新しい名前が SaveAs メソッドのパラメーターです。Here, the new name for the file is a parameter for the SaveAs method.

プロパティProperties

プロパティを設定する構文は、プロパティを読み取るときの構文と同じです。You use the same syntax to set a property that you use to read a property. 次のコードは、Excel 内でセル A1 を選択し、そのセルに値を入力するためにプロパティを設定するメソッドを実行します。The following code executes a method to select cell A1 in Excel and then to set a property to put something in that cell.

    Application.ActiveSheet.Range("A1").Select
    Application.Selection.Value = "Hello World"

VBA プログラミングの学習で最初に訪れる試練は、各 Office アプリケーションのオブジェクト モデルを把握し、オブジェクト、メソッド、またはプロパティの構文を読み解くことです。The first challenge in VBA programming is to get a feeling for the object model of each Office application and to read the object, method, and property syntax. オブジェクト モデルはすべての Office アプリケーションで類似していますが、アプリケーションごとに扱う文書とオブジェクトの種類に依存する固有の部分があります。The object models are similar in all Office applications, but each is specific to the kind of documents and objects that it manipulates.

このコード スニペットの 1 行目にはオブジェクト Application (ここでは Excel) があり、その直後には、アクティブなワークシートへのアクセスを提供する ActiveSheet オブジェクトがあります。In the first line of the code snippet, there is the Application object, Excel this time, and then the ActiveSheet, which provides access to the active worksheet. その次にある見慣れない用語 Range は、"セル範囲をこのように定義する" という意味です。After that is a term not as familiar, Range, which means "define a range of cells in this way." このコードは Range に対して、A1 のみを定義済みのセルのセットとしてセル範囲を作成することを指示します。The code instructs Range to create itself with just A1 as its defined set of cells. つまり、コードの 1 行目では Range というオブジェクトを定義し、メソッドを実行してそれを選択します。In other words, the first line of code defines an object, the Range, and runs a method against it to select it. その結果は Application の別のプロパティである Selection に自動的に保管されます。The result is automatically stored in another property of the Application called Selection.

コードの 2 行目では、SelectionValue プロパティにテキスト "Hello World" を設定し、この値をセル A1 に表示します。The second line of code sets the Value property of Selection to the text "Hello World", and that value appears in cell A1.

おそらく最も簡単に作成できる VBA コードは、使用中の Office アプリケーション内のオブジェクトにアクセスし、プロパティを設定するだけのコードです。The simplest VBA code that you write might simply gain access to objects in the Office application that you are working with and set properties. たとえば、VBA スクリプトを使用して Word の表にある行にアクセスし、表の書式を変更できます。For example, you could get access to the rows in a table in Word and change their formatting in your VBA script.

単純に聞こえますが、これができると非常に便利です。コードを書いてさえおけば、プログラミングの威力を最大限に活用して、同じ変更を複数の表または文書に対して行ったり、変更を特定の論理や条件に従って実行したりすることができます。That sounds simple, but it can be incredibly useful; once you can write that code, you can harness all of the power of programming to make those same changes in several tables or documents, or make them according to some logic or condition. コンピューターにとって 10 回の変更も 1000 回の変更も違いはないので、文書や問題の規模が大きいほど得られるスケール メリットも大きくなります。これこそが、VBA がその真価を発揮し、時間の節約をもたらす状況です。For a computer, making 1000 changes is no different from making 10, so there is an economy of scale here with larger documents and problems, and that is where VBA can really shine and save you time.

マクロと Visual Basic EditorMacros and the Visual Basic Editor

これで Office アプリケーションから公開されるオブジェクト モデルについてはある程度わかったので、この知識を生かしてオブジェクトのメソッドを呼び出し、オブジェクトのプロパティを設定し、オブジェクトのイベントに応答してみることにしましょう。Now that you know something about how Office applications expose their object models, you are probably eager to try calling object methods, setting object properties, and responding to object events. これらの操作を行うには、Office が認識できる場所および方法でコードを記述する必要があります。一般には Visual Basic エディターを使用します。To do so, you must write your code in a place and in a way that Office can understand; typically, by using the Visual Basic Editor. これは既定でインストールされますが、リボン上で有効になるまではほとんどのユーザーは存在することさえ知りません。Although it is installed by default, many users do not know that it is even available until it is enabled on the ribbon.

すべての Office アプリケーションではリボンを使用しています。All Office applications use the ribbon. このリボンにある [開発] タブから、Visual Basic Editor とその他の開発者ツールを使用できます。One tab on the ribbon is the Developer tab, where you access the Visual Basic Editor and other developer tools. 既定では、Office に [開発] タブは表示されないので、以下の手順でこれを有効にする必要があります。Because Office does not display the Developer tab by default, you must enable it by using the following procedure:

[開発] タブを有効にするにはTo enable the Developer tab

  1. [ファイル] タブの [オプション] をクリックして [オプション] ダイアログ ボックスを表示します。On the File tab, choose Options to open the Options dialog box.

  2. ダイアログ ボックスの左側にある [リボンのユーザー設定] を選択します。Choose Customize Ribbon on the left side of the dialog box.

  3. ダイアログ ボックスの左側にある [コマンドの選択] で、[基本的なコマンド] を選択します。Under Choose commands from on the left side of the dialog box, select Popular Commands.

  4. ダイアログ ボックスの右側にある [リボンのユーザー設定] のドロップダウン リストから [メイン タブ] を選択し、[開発] チェック ボックスをオンにします。Under Customize the Ribbon on the right side of the dialog box, select Main Tabs in the drop down list box, and then select the Developer checkbox.

  5. [OK] を選択します。Choose OK.

注意

Office 2007 で [開発] タブを表示するには、Office ボタンを選択し、[オプション] を選択してから、[オプション] ダイアログ ボックスの [基本設定] カテゴリで [[開発] タブをリボンに表示する] チェック ボックスをオンにしていました。In Office 2007, you displayed the Developer tab by choosing the Office button, choosing Options, and then selecting the Show Developer tab in Ribbon check box in the Popular category of the Options dialog box.

[開発] タブを有効にすると、そこに [Visual Basic] ボタンと [マクロ] ボタンがあることもすぐにわかります。After you enable the Developer tab, it is easy to find the Visual Basic and Macros buttons.

図 1. [開発] タブのボタンFigure 1. Buttons on the Developer tab

[開発] タブのボタン

セキュリティの問題Security issues

Office のユーザーをウイルスと危険なマクロ コードから保護するため、標準のファイル拡張子が付けられた標準の Office 文書にマクロ コードを保存することは禁止されています。To protect Office users against viruses and dangerous macro code, you cannot save macro code in a standard Office document that uses a standard file extension. マクロ コードは、特別な拡張子付きのファイルに保存する必要があります。Instead, you must save the code in a file with a special extension. たとえば、マクロを .docx 拡張子付きの標準 Word 文書に保存することはできませんが, .docm 拡張子付きの特別な Word マクロ有効文書に保存することはできます。For example you cannot save macros in a standard Word document with a .docx extension; instead, you must use a special Word Macro-Enabled Document with a .docm extension.

.docm ファイルを開くと、Office のセキュリティ設定によっては文書内でのマクロの実行が禁止されている場合があり、そのことを通知するメッセージも表示されないことがあります。When you open a .docm file, Office security might still prevent the macros in the document from running, with or without telling you. すべての Office アプリケーションでセキュリティ センターの設定とオプションを調べてください。Examine the settings and options in the Trust Center on all Office applications. 既定ではマクロの実行は無効になっていますが、マクロが無効にされていることを警告するメッセージが表示され、その文書に関してマクロを有効にするオプションが提示されます。The default setting disables macro from running, but warns you that macros have been disabled and gives you the option to turn them back on for that document.

マクロを実行できる特定のフォルダーを指定するには、信頼できる場所、信頼済みドキュメント、または信頼できる発行元を作成します。You can designate specific folders where macros can run by creating Trusted Locations, Trusted Documents, or Trusted Publishers. 最も移植性に優れたオプションは、信頼できる発行元を使用する方法です。信頼できる発行元は、配布するデジタル付き署名文書と共に使用できます。The most portable option is to use Trusted Publishers, which works with digitally signed documents that you distribute. 特定の Office アプリケーションのセキュリティ設定の詳細については、[オプション] ダイアログ ボックスを開き、[セキュリティ センター] をクリックし、[セキュリティ センターの設定] をクリックすると確認できます。For more information about the security settings in a particular Office application, open the Options dialog box, choose Trust Center, and then choose Trust Center Settings.

注意

Outlook などの一部の Office アプリケーションでは、マクロは既定でローカル コンピューターのマスター テンプレートに保存されます。Some Office applications, like Outlook, save macros by default in a master template on your local computer. この方法は自身のコンピューターで自作のマクロを実行するときにセキュリティ問題を減らしますが、マクロを配布する場合には展開の手段が必要になります。Although that strategy reduces the local security issues on your own computer when you run your own macros, it requires a deployment strategy if you want to distribute your macro.

マクロの記録Recording a macro

[開発] タブの [マクロ] ボタンを選択すると、[マクロ] ダイアログ ボックスが表示されます。ここから、特定の文書またはアプリケーションからアクセスできる VBA サブルーチンまたはマクロにアクセスできます。When you choose the Macro button on the Developer tab, it opens the Macros dialog box, which gives you access to VBA subroutines or macros that you can access from a particular document or application. [Visual Basic] ボタンを選択すると、Visual Basic エディターが表示され、VBA コードの作成と編集を行うことができます。The Visual Basic button opens the Visual Basic Editor, where you create and edit VBA code.

Word および Excel の [開発] タブには [マクロの記録] という別のボタンがあり、これをクリックすると、アプリケーションで実行したアクションを再現できる VBA コードが自動的に生成されます。Another button on the Developer tab in Word and Excel is the Record Macro button, which automatically generates VBA code that can reproduce the actions that you perform in the application. [マクロの記録] は、VBA の学習を深めるには絶好のツールです。Record Macro is a terrific tool that you can use to learn more about VBA. この機能によって生成されるコードを読み解くことで VBA をより深く理解することができ、ユーザーとしての Office の知識と、プログラマーとしての知識を確実に結び付けることができます。Reading the generated code can give you insight into VBA and provide a stable bridge between your knowledge of Office as a user and your knowledge as a programmer. 1 つだけ注意する必要すべき点は、マクロのエディターはユーザーが何を意図しているかを仮定して機能するため、その仮定が正確でないと、生成されたコードがあいまいになることです。The only caveat is that the generated code can be confusing because the Macro editor must make some assumptions about your intentions, and those assumptions are not necessarily accurate.

マクロを記録するにはTo record a macro

  1. Excel で新しいブックを開き、リボンの [開発] タブを選択します。Open Excel to a new Workbook and choose the Developer tab in the ribbon. [マクロの記録] を選択し、[マクロの記録] ダイアログ ボックスでは、マクロ名 [Macro1] やマクロの保存先 [作業中のブック] など、既定の設定をすべてそのまま使用します。Choose Record Macro and accept all of the default settings in the Record Macro dialog box, including Macro1 as the name of the macro and This Workbook as the location.

  2. [OK] を選択すると、マクロの記録が開始します。Choose OK to begin recording the macro. ボタンに表示されるテキストが [記録終了] に変わることに注意してください。Note how the button text changes to Stop Recording. 記録するアクションを完了したら、このボタンを選択します。Choose that button the instant you complete the actions that you want to record.

  3. セル B1 を選択し、プログラマーが伝統的に使う最初の文字列である「Hello World」を入力します。Choose cell B1 and type the programmer's classic first string: Hello World. 入力を終えたら、[記録終了] ボタンを見てください。灰色表示になっているはずです。これは、セルへの値の入力が終了するのを Excel が待っているからです。Stop typing and look at the Stop Recording button; it is grayed out because Excel is waiting for you to finish typing the value in the cell.

  4. セル B2 を選択してセル B1 へのアクションを完了し、[記録終了] を選択します。Choose cell B2 to complete the action in cell B1, and then choose Stop Recording.

  5. [開発] タブの [マクロ] を選択し、まだ選択されていなければ [Macro1] を選択し、[編集] を選択して Macro1 のコードを Visual Basic エディターに表示します。Choose Macros on the Developer tab, select Macro1 if it is not selected, and then choose Edit to view the code from Macro1 in the Visual Basic Editor.

図 2. Visual Basic Editor 内のマクロ コードFigure 2. Macro code in Visual Basic Editor

Visual Basic Editor 内のマクロ コード

コードを調べるLooking at the code

作成したマクロは、以下のようなコードになっているはずです。The macro that you created should look similar to the following code.

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("B2").Select
End Sub

セル A1 内のテキストを選択した前のコード スニペットとの類似点および相違点に注目してください。Be aware of the similarities to the earlier code snippet that selected text in cell A1, and the differences. このコードは、セル B1 を選択してから、文字列 "Hello World" をアクティブになっていたセルに適用します。In this code, cell B1 is selected, and then the string "Hello World" is applied to the cell that has been made active. テキストを引用符で囲むのは、これが数値ではなく文字列値であることを示すためです。The quotes around the text specify a string value as opposed to a numeric value.

[記録終了] ボタンを再び表示するためにセル B2 を選択したことを思い出してください。Remember how you chose cell B2 to display the Stop Recording button again? このアクションもコードの 1 行として現れます。That action shows up as a line of code as well. マクロ レコーダーは、すべてのキーストロークを記録します。The macro recorder records every keystroke.

アポストロフィで始まり、エディターには緑色の文字で表示されるコード行はコメントです。コメントは、コードについて説明したり、他のプログラマーにコードの目的を知らせたりするためのテキストです。The lines of code that start with an apostrophe and colored green by the editor are comments that explain the code or remind you and other programmers the purpose of the code. VBA では、単一引用符で始まる行または行の一部は無視されます。VBA ignores any line, or portion of a line, that begins with a single quote. わかりやすく適切なコメントをコードに記入することは重要なテーマですが、これについて語ることはこの記事の主旨を外れます。Writing clear and appropriate comments in your code is an important topic, but that discussion is out of the scope of this article. 以下でこのコードについて触れるときは、これらの 4 行のコメント行は割愛します。Subsequent references to this code in the article do not include those four comment lines.

マクロ レコーダーでは、コードの生成時に複雑なアルゴリズムを使用して、ユーザーの意図するメソッドとプロパティが判断されます。When the macro recorder generates the code, it uses a complex algorithm to determine the methods and the properties that you intended. 見覚えがないプロパティがあっても、解釈の手がかりとなるリソースはたくさんあります。If you do not recognize a given property, there are many resources available to help you. たとえば、記録したマクロの内部に、マクロ レコーダーによって FormulaR1C1 プロパティを参照するコードが生成されたとします。For example, in the macro that you recorded, the macro recorder generated code that refers to the FormulaR1C1 property. 意味がわかりませんか。Not sure what that means?

注意

Application オブジェクトはすべての VBA マクロに暗黙に含まれます。Be aware that Application object is implied in all VBA macros. 記録されたコードでは、各行の先頭で Application.The code that you recorded works with Application. を使用できます。at the beginning of each line.

開発者用ヘルプUsing Developer Help

記録されたマクロの FormulaR1C1 を選択し、F1 キーを押します。Select FormulaR1C1 in the recorded macro and press F1. ヘルプ システムで検索が行われ、Excel ヘルプの Excel 開発者用ヘルプ セクションに適切なトピックがあるかどうかが確認され、一覧に FormulaR1C1 プロパティが表示されます。The Help system runs a quick search, determines that the appropriate subjects are in the Excel Developer section of the Excel Help, and lists the FormulaR1C1 property. このリンクを選択すると詳細な情報を表示できますが、そうする前にウィンドウの下部近くに [Excel オブジェクト モデル リファレンス] というリンクがあることに注目してください。You can choose the link to read more about the property, but before you do, be aware of the Excel Object Model Reference link near the bottom of the window. このリンクを選択して Excel のオブジェクト モデルで使用される多数のオブジェクトを示す一覧を表示すると、ワークシートとそのコンポーネントに関する説明を参照できます。Choose the link to view a long list of objects that Excel uses in its object model to describe the Worksheets and their components.

一覧でいずれかのオブジェクトを選択すると、そのオブジェクトに対応するプロパティおよびメソッドと、別の関連トピックへの相互参照が表示されます。Choose any one of those to see the properties and methods that apply to that particular object, along with cross references to different related options. 多くのヘルプ項目には、役に立つ簡単なコード サンプルも含まれています。Many Help entries also have brief code examples that can help you. たとえば、 Borders オブジェクトの関連リンクを使用して VBA で罫線を設定する方法を参照できます。For example, you can follow the links in the Borders object to see how to set a border in VBA.

Worksheets(1).Range("A1").Borders.LineStyle = xlDouble

コードの編集Editing the code

この Borders コードと前に記録したマクロには相違が見られます。The Borders code looks different from the recorded macro. オブジェクト モデルのややこしい点の 1 つは、特定のオブジェクト (ここではセル A1) を扱う方法がいくつもあることです。One thing that can be confusing with an object model is that there is more than one way to address any given object, cell A1 in this example.

ときには、機能するコードの一部を変更してコードの動作がどのように変わるかを実地に試してみることが、プログラミングを習得する最適な方法であることもあります。Sometimes the best way to learn programming is to make minor changes to some working code and see what happens as a result. これを試してみましょう。Try it now. Macro1 を Visual Basic エディターで表示し、次のようにコードを変更します。Open Macro1 in the Visual Basic Editor and change the code to the following.

Sub Macro1()
    Worksheets(1).Range("A1").Value = "Wow!"
    Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub

ヒント

入力ミスを避けるため、コードを編集するときはできる限りコピーと貼り付けを使用します。Use Copy and Paste as much as possible when working with code to avoid typing errors.

コードを試すためにその都度保存する必要はありません。Excel 文書に戻り、[開発] タブの [マクロ] を選択し、Macro1 を選択して、[実行] を選択します。You do not need to save the code to try it out, so return to the Excel document, choose Macros on the Developer tab, choose Macro1, and then choose Run. Excel 文書に戻り、 [開発] タブの [マクロ] をクリックし、 [Macro1] をクリックし、 [実行] をクリックします。Cell A1 now contains the text Wow! セル A1 にテキスト "Wow!" が収められ、その周囲に罫線が二重線のスタイルで表示されます。and has a double-line border around it.

図 3. 最初のマクロの実行結果Figure 3. Results of your first macro

最初のマクロの実行結果

マクロの記録を組み合わせ、オブジェクト モデルのドキュメントを参照し、単純なプログラミングを行うだけで、機能する VBA プログラムを作成できました。You just combined macro recording, reading the object model documentation, and simple programming to make a VBA program that does something. おめでとうございます!Congratulations!

期待どおりに動作しないときは、Did not work? VBA のデバッグ関連情報を参照してください。Read on for debugging suggestions in VBA.

プログラミングのヒントとコツProgramming tips and tricks

サンプルを土台とするStart with examples

VBA には大規模なコミュニティがあります。Web を検索すると、求めている機能とよく似た機能を備えたサンプル VBA コードがたいてい見つかります。The VBA community is very large; a search on the Web can almost always yield an example of VBA code that does something similar to what you want to do. 適切なサンプルが見当たらなければ、タスクをより小さな単位に分割し、それぞれについて検索を行ってみるか、問題の性質は同じままで、より一般的な解釈に替えて試してみます。If you cannot find a good example, try to break the task down into smaller units and search on each of those, or try to think of a more common, but similar problem. サンプルを土台とすることは、開発時間の節約になります。Starting with an example can save you hours of time.

ただし、十分に考え抜かれて記述された無料のコードが Web で出番を待っているとは思わないでください。That does not mean that free and well-thought-out code is on the Web waiting for you to come along. 実際には、見つかるコードの多くにバグや誤りが含まれます。In fact, some of the code that you find might have bugs or mistakes. オンラインで見つかったり、VBA のドキュメントから入手できるサンプルを利用すれば、出発点を前に進めることができる、というのがこの方法の発想です。The idea is that the examples you find online or in VBA documentation give you a head start. プログラミングの習得には時間と思考力が必要とされます。Remember that learning programming requires time and thought. 問題を解決しようと別のソリューションに性急に飛び付く前に、その問題に VBA が適しているかどうかを冷静に検討してください。Before you get in a big rush to use another solution to solve your problem, ask yourself whether VBA is the right choice for this problem.

問題を単純化するMake a simpler problem

プログラミングはあっという間に複雑になります。Programming can get complex quickly. そのため、特に初心者にとっては、問題をできる限り小さい論理単位に分割してから、それぞれのコードを単独で記述し、テストすることが不可欠です。It is critical, especially as a beginner, that you break the problem down to the smallest possible logical units, then write and test each piece in isolation. 取り組むコードが多すぎて混乱したり収拾がつかなくなったりした場合は、作業を中断し、その問題を保留にします。If you have too much code in front of you and you get confused or muddled, stop and set the problem aside. 後でその問題に再び取り組むときに、問題の一部を新しいモジュールとして切り出して、その部分を解決し、コードが機能するようにし、最後にテストして機能の正常性を確認します。When you come back to the problem, copy out a small piece of the problem into a new module, solve that piece, get the code working, and test it to ensure that it works. その後で、次の部分の記述に進んでください。Then move on to the next part.

バグとデバッグBugs and debugging

プログラミング エラーには、主に 2 つの種類があります。"構文" エラーは、プログラミング言語の文法規則に反すると発生し、"実行時"エラーは、構文としては正しく見えても VBA がコードの実行に失敗すると発生します。There are two main types of programming errors: syntax errors, which violate the grammatical rules of the programming language, and run-time errors, which look syntactically correct, but fail when VBA attempts to execute the code.

修正には手間取ることもありますが、構文エラーを見つけることは簡単です。入力したコードに構文エラーがあると、Visual Basic Editor が警告音を鳴らし、エラー部分の表示を強調します。Although they can be frustrating to fix, syntax errors are easy to catch; the Visual Basic Editor beeps and flashes at you if you type a syntax error in your code.

たとえば、VBA では文字列を二重引用符で囲む必要があります。For example, string values must be surrounded by double quotes in VBA. 代わりに単一引用符を使用するとどうなるか調べるため、Visual Basic エディターに戻り、"Wow!" To find out what happens when you use single quotes instead, return to the Visual Basic Editor and replace the "Wow!" というコード例の文字列を 'Wow!' に置き換えます string in the code example with 'Wow!' (つまり、Wow という単語を単一引用符で囲みます)。(that is, the word Wow enclosed in single quotes). 次の行をクリックすると、Visual Basic エディターが反応します。If you choose the next line, the Visual Basic Editor reacts. 表示されるエラー "コンパイル エラー: 修正候補: 式" はあまり役に立ちませんが、エラーが発生した行が赤い字で表示されて、その行に構文エラーがあり、その結果、このプログラムは動作しないことが通知されます。The error "Compile error: Expected: expression" is not that helpful, but the line that generates the error turns red to tell you that you have a syntax error in that line and as a result, this program will not run.

[OK] を選択し、テキストを "Wow!" に戻します。Choose OK and change the text back to"Wow!".

実行時エラーを見つけることは、構文エラーの場合よりも困難です。プログラミングの構文は正しく見えますが、VBA がコードを実行しようとする時点で失敗するからです。Runtime errors are harder to catch because the programming syntax looks correct, but the code fails when VBA tries to execute it.

たとえば、Visual Basic エディターを開き、マクロの Value プロパティの名前を ValueX に変更すると、故意に実行時エラーを発生させることができます。Range オブジェクトには ValueX という名前のプロパティは存在しないからです。For example, open the Visual Basic Editor and change the Value property name toValueX in your Macro, deliberately introducing a runtime error since the Range object does not have a property called ValueX. Excel ドキュメントに戻り、[マクロ] ダイアログ ボックスを開いて、Macro1 を再び実行します。Go back to the Excel document, open the Macros dialog box and run Macro1 again. 実行時エラーについて説明するテキスト "オブジェクトは、このプロパティまたはメソッドをサポートしていません" を含む Visual Basic メッセージが表示されます。You should see a Visual Basic message box that explains the run-time error with the text, "Object doesn't support this property of method." このメッセージでも明らかですが、[デバッグ] を選択してさらに詳細な情報を表示します。Although that text is clear, choose Debug to find out more.

Visual Basic Editor に戻ると、特別なデバッグ モードに切り替わり、実行に失敗したコード行が黄色で強調表示されます。When you return to the Visual Basic Editor, it is in a special debug mode that uses a yellow highlight to show you the line of code that failed. 予想どおり、ValueX プロパティを記述した行の表示が強調されています。As expected, the line that includes the ValueX property is highlighted.

実行中の VBA コードを変更できるので、ValueX を Value に戻し、[デバッグ] メニューの下にある小さな緑色の再生ボタンを選択します。You can make changes to VBA code that is running, so change ValueX back to Value and choose the little green play button underneath the Debug menu. プログラムの実行が正常に戻るはずです。The program should run normally again.

もっと大きく複雑なプログラムについては、デバッガーをより慎重に使用する方法を学ぶことをお勧めします。It is a good idea to learn how to use the debugger more deliberately for longer, more complex programs. 少なくとも、コードを確認する必要がある場所で実行を停止するためにブレークポイントを設定する方法と、コードの実行中にさまざまな変数やプロパティの値を確認できるウォッチを追加する方法、およびコードを 1 行単位でステップ実行する方法は習得してください。At a minimum, learn a how to set break-points to stop execution at a point where you want to take a look at the code, how to add watches to see the values of different variables and properties as the code runs, and how to step through the code line by line. これらのオプションはいずれも [デバッグ] メニューから使用できますが、デバッガーを使いこなそうとするなら、各機能に対応するキーボード ショートカットを覚えておくのが一般的です。These options are all available in the Debug menu and serious debugger users typically memorize the accompanying keyboard shortcuts.

リファレンスの活用Using reference materials well

Office ヘルプに組み込まれた開発者用リファレンスを表示するには、いずれかの Office アプリケーションでリボン上の疑問符を選択するか、F1 キーを押して、ヘルプ リファレンスを開きます。To open the Developer Reference that is built into Office Help, open the Help reference from any Office application by choosing the question mark in the ribbon or by pressing F1. 次に、内容をフィルター処理するために [検索] ボタンの右側にある下向き矢印を選択します。Then, to the right of the Search button, choose the dropdown arrow to filter the contents. [開発者用リファレンス] を選択します。Choose Developer Reference. 目次が左側パネルに表示されない場合は、小さな本のアイコンを選択してパネルを開き、そこからオブジェクト モデルのリファレンスを展開します。If you do not see the table of contents in the left panel, choose the little book icon to open it, and then expand the Object Model Reference from there.

図 5. 開発者用ヘルプのフィルター処理はすべての Office アプリケーションに適用されるFigure 5. Filtering on developer Help applies to all Office applications

開発者用ヘルプのフィルター処理はすべての Office アプリケーションに適用される

オブジェクト モデルのリファレンスは、時間をかけて閲覧するだけの価値があります。Time spent browsing the Object Model reference pays off. VBA 構文の基礎と使用中の Office アプリケーションのオブジェクト モデルについて理解できれば、手探りの作業から秩序あるプログラミングへと前進できます。After you understand the basics of VBA syntax and the object model for the Office application that you are working with, you advance from guesswork to methodical programming.

当然ですが、Office デベロッパー センターは、記事、ヒント、およびコミュニティ情報を得るには非常に便利なポータルです。Of course the Microsoft Office Developer Center is an excellent portal for articles, tips, and community information.

フォーラムとグループの検索Searching forums and groups

すべてのプログラマーは、いずれどこかで壁に突き当たります。探し出したリファレンス記事に残らず目を通し、夜を徹してさまざまな問題解決策を考えたとしてもです。All programmers get stuck sometimes, even after reading every reference article they can find and losing sleep at night thinking about different ways to solve a problem. 幸いなことに、インターネットでは、互いのプログラミング上の問題に救いの手を差し伸べる開発者コミュニティが発達しています。Fortunately, the Internet has fostered a community of developers who help each other solve programming problems.

Web で "office 開発者 フォーラム" を検索すると、複数のディスカッション グループが見つかります。Any search on the Web for "office developer forum" reveals several discussion groups. "office 開発" または問題に関する説明を検索テキストとすると、フォーラム、ブログ投稿、および記事も見つかります。You can search on "office development" or a description of your problem to discover forums, blog posts, and articles as well.

問題を解決するためにできることはやり尽くしたのであれば、遠慮しないで質問を開発者フォーラムに投稿してください。If you have done everything that you can to solve a problem, do not be afraid to post your question to a developers forum. これらのフォーラムは新参のプログラマーからの投稿に寛容であり、多くの経験豊かな開発者が喜んで助言してくれます。These forums welcome posts from newer programmers and many of the experienced developers are glad to help.

以下に、開発者フォーラムに投稿するときに注意すべき若干のエチケットについて説明します。The following are a few points of etiquette to follow when you post to a developer forum:

  • 質問を投稿する前に、サイトに FAQ、またはメンバーが従う必要があるガイドラインがないか探してください。Before you post, look on the site for an FAQ or for guidelines that members want you to follow. 投稿の内容がそれらのガイドラインに従っていることを確認し、フォーラムの正しいセクションに投稿します。Ensure that you post content that is consistent with those guidelines and in the correct section of the forum.

  • わかりやすく完結したコード サンプルを投稿に含めます。また、それが長いコードの一部である場合は、他人にもわかるようにコードを編集して明確なものにします。Include a clear and complete code sample, and consider editing your code to clarify it for others if it is part of a longer section of code.

  • 問題についてわかりやすく簡潔に説明し、解決するために試みた手順を要約して示します。Describe your problem clearly and concisely, and summarize any steps that you have taken to solve the problem. できるだけ時間をかけて投稿を書くように心がけてください。焦っているときや急いでいるときほど、そうする必要があります。Take the time to write your post as well as you can, especially if you are flustered or in a hurry. 問題について初めて読む人にも筋が通るような状況説明を盛り込んでください。Present the situation in a way that will make sense to readers the first time that they read the problem statement.

  • 礼儀正しく振舞い、感謝の言葉を書き込むようにします。Be polite and express your appreciation.

より高度なプログラミングGoing further with programming

この短い記事では VBA とプログラミングのさわりを紹介しただけに過ぎませんが、これが出発の足がかりとして役立つことを願っています。Although this article is short and only scratches the surface of VBA and programming, it is hopefully enough to get you started.

以下に、その他の重要なトピックについて簡単に説明します。This section briefly discusses a few more key topics.

変数Variables

この記事で使用したサンプル コードでは、アプリケーションで既に作成されたオブジェクトを操作しました。In the simple examples in this article you manipulated objects that the application had already created. 独自のアプリケーションで一時的に使用する目的で、値または他のオブジェクトへの参照を保存するオブジェクトを独自に作成することもできます。You might want to create your own objects to store values or references to other objects for temporary use in your application. これらは、変数と呼ばれます。These are called variables.

VBA で変数を使用するには、その変数が表すオブジェクトの種類を、Dim ステートメントを使って VBA に伝える必要があります。To use a variable in VBA, must tell VBA which type of object the variable represents by using the Dim statement. その後で、変数に値を設定してから、その変数を他の変数またはプロパティを設定するために使用できます。You then set its value and use it to set other variables or properties.

    Dim MyStringVariable As String
    MyStringVariable = "Wow!"
    Worksheets(1).Range("A1").Value = MyStringVariable

分岐とループBranching and looping

この記事で使用した単純なプログラムでは、コードを 1 行ずつ、上から下へ順番に実行しました。The simple programs in this article execute one line at a time, from the top down. プログラミングの真価は、1 つ以上の条件を指定して、どのコード行を実行するかをその条件に基づいて決定できることにあります。The real power in programming comes from the options that you have to determine which lines of code to execute, based on one or more conditions that you specify. 同じ操作を多くの回数繰り返すことができる場合は、この機能をさらに拡張できます。You can extend those capabilities even further when you can repeat an operation many times. 以下の例は、Macro1 を拡張します。For example, the following code extends Macro1.

Sub Macro1()
    If Worksheets(1).Range("A1").Value = "Yes!" Then
        Dim i As Integer
        For i = 2 To 10
            Worksheets(1).Range("A" & i).Value = "OK! " & i
        Next i
    Else
        MsgBox "Put Yes! in cell A1"
    End If
End Sub

このコードを Visual Basic Editor に入力するか貼り付けて、実行します。Type or paste the code into the Visual Basic Editor and then run it. 表示されるメッセージ ボックスの指示に従い、セル A1 のテキストを Wow! から Yes! に変更し、コードを再実行してループの効果を確かめてください。Follow the directions in the message box that appears and change the text in cell A1 from Wow! ★上のセグメントで翻訳済み★to Yes! ★上のセグメントで翻訳済み★and run it again to see the power of looping. このコード スニペットは、変数、分岐、およびループの働きを具体的に示します。This code snippet demonstrates variables, branching and looping. 実際の動作を確かめた後でコードを読み解いて、各行の実行でどのような処理が行われるのかを確認してください。Read it carefully after you see it in action and try to determine what happens as each line executes.

実用的な Office サンプル コードAll of my Office applications: example code

以下のいくつかのスクリプトを試してみてください。実際に存在する Office の問題を解決できます。Here are a few scripts to try; each solves a real-world Office problem.

Outlook でメールを作成するCreate an email in Outlook

Sub MakeMessage()
    Dim OutlookMessage As Outlook.MailItem
    Set OutlookMessage = Application.CreateItem(olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Set OutlookMessage = Nothing
End Sub

状況によっては、Outlook でメールを自動で作成することが必要になる場合もあります。この目的にはテンプレートも使用できます。Be aware that there are situations in which you might want to automate email in Outlook; you can use templates as well.

Excel ワークシートから空の行を削除するDelete empty rows in an Excel worksheet

Sub DeleteEmptyRows()
    SelectedRange = Selection.Rows.Count
    ActiveCell.Offset(0, 0).Select
    For i = 1 To SelectedRange
        If ActiveCell.Value = "" Then
            Selection.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Next i
End Sub

セル列を選択してからこのマクロを実行すると、選択した範囲の列から、空のセルがある行が削除されます。Be aware that you can select a column of cells and run this macro to delete all rows in the selected column that have a blank cell.

PowerPoint で空のテキスト ボックスを削除するDelete empty text boxes in PowerPoint

Sub RemoveEmptyTextBoxes()
    Dim SlideObj As Slide
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    For Each SlideObj In ActivePresentation.Slides
        For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Set ShapeObj = SlideObj.Shapes(ShapeIndex)
            If ShapeObj.Type = msoTextBox Then
                If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
                    ShapeObj.Delete
                End If
            End If
        Next ShapeIndex
    Next SlideObj
End Sub

このコードを実行すると、すべてのスライドに対して処理がループして実行され、テキストを含まないすべてのテキスト ボックスが削除されます。Be aware that this code loops through all of the slides and deletes all text boxes that do not have any text. カウント変数の値は、1 つずつ増えるのではなく減っていきます。コードでオブジェクトを 1 つ削除するたびにコレクションからオブジェクトが削除されるので、カウントが減ります。The count variable decrements instead of increments because each time the code deletes an object, it removes that object from the collection, which reduces the count.

連絡先を Outlook から Word にコピーするCopy a contact from Outlook to Word

Sub CopyCurrentContact()
   Dim OutlookObj As Object
   Dim InspectorObj As Object
   Dim ItemObj As Object
   Set OutlookObj = CreateObject("Outlook.Application")
   Set InspectorObj = OutlookObj.ActiveInspector
   Set ItemObj = InspectorObj.CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub

このコードでは、現在 Outlook で開いている連絡先を、Word で開いている文書にコピーします。Be aware that this code copies the currently open contact in Outlook into the open Word document. このコードを正常に実行するには、連絡先が Outlook で開かれ、閲覧できる状態になっている必要があります。This code only works if there is a contact currently open for inspection in Outlook.

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.