2023/04/02

Notes - Excel 連携:#6)マクロの記録の活用 と 文法の違い

ノーツと Excel を連携してアプリを作り始めると、やりたいことがどんどん出てきますよね。

その都度、Microsoft Learn で調べるのは非常に大変です。プロパティやメソッド、オブジェクト自身も非常にたくさんあります。そして、オブジェクトの関連をやさしく図式した概要的な記事は存在しません。少なくとも私は発見できていません。

ネットで検索しても、やりたいことを端的に記述した記事に出くわすことは少ないです。

このようなときに、活用できるのが、Excel に搭載されている『マクロの記録』機能です。この機能は、Excel の UI で行った操作を Excel VBA のマクロとして保存してくれます。


マクロの記録の使い方

リボンのマクロをクリックすると以下のメニューが表示されますので、[マクロの記録]を選択します。

すると、マクロの名称を入力する画面が表示されますので、そのまま[OK]をクリックします。それ以降の Excel の操作がマクロとして記録されますので、VBA コードを調べたい操作を行います。

マクロ記録中は、記録を開始したメニューが [記録終了] に変化します。必要な操作が終わったらクリックして、マクロの記録を停止します。

記録したマクロは、[マクロの表示]で確認できます。


Excel VBA との文法の違い

以下は、Sheet1 を選択後、シートを追加して、追加したシートを一番後ろの4番目にドラッグ&ドロップで移動した操作を記録したマクロです。

Sub Macro1()
'
' Macro1 Macro
'

'
   Sheets("Sheet1").Select
   Sheets.Add
   Sheets("Sheet4").Select
   Sheets("Sheet4").Move After:=Sheets(4)
End Sub

LotusScript の記述とずいぶん違いますね。

まず、Sheets オブジェクトの取得するコードがありません。Excel VBA は詳しくありませんが、基本的なオブジェクトは生成済みということなのでしょう...

続いて、Sheets オブジェクトに対して、シート名を添え字的に渡して、ワークシートオブジェクトにアクセスしています。シート番号(数値)だけではなく、名前でもアクセスできる柔軟な仕様のようです。便利ですね。

次は、Select メソッドです。Worksheet オブジェクトのメソッドとして、Microsoft Learn に記述があり、シートを選択するメソッドだそうです。

Worksheet.Select メソッド (Excel)

次の行の Add メソッドは、 Worksheets オブジェクトのメソッドです。Worksheets と Worksheet 混乱しないように注意しましょう。

Worksheets.Add メソッド (Excel)

構文を見てもらうと引数が4つあります。ただ、これら引数は省略できるとあり、その場合選択したシートの直前に追加されるとのことです。ここで、前行の Select メソッドが有効になるということですね。

以降は追加したワークシートを一番後ろに移動するコードです。以下の行に注目してください。LotusScript では見たことのない記述です。

   Sheets("Sheet4").Move After:=Sheets(4)

メソッドの詳細は以下の通りで、Before と After の引数があります。Excel VBA では、これら引数に値を与える場合、[引数名 := 設定する値]と記述でき、この仕様で、引数の順番にとらわれず、不要な引数を省略しやすくなっているようです。

Worksheet.Move メソッド (Excel)

LotusScript の場合、この記述は文法エラーとなり、利用できません。対策は簡単で、Microsoft Learn に記載の構文の通りに記述すればいいのです。ただ、以前記載した通り、このサイト機械翻訳の影響か不必要に日本語化されています。

以下は、日本語のサイトと原文の比較です。原文を見れば構文が良くわかりますね(笑)

 

LotusScript での記述

それでは、LotusScript で新しいワークシートを一番後ろに追加する方法です。

   Set oSheets = oXls.Workbooks(1).WorkSheets
   Call oSheets.Add( , oSheets(oSheets.Count))

Worksheets オブジェクトは何度もアクセスするので、oSheets 変数(バリアント型)にいったん代入しています。なお、oXls は、これまでの流れで、Application オブジェクトが入っている前提です

2行目で、Add メソッドをコールしています。このメソッドの引数は Worksheet オブジェクトです。oSheets.Count で最後のシートを指定して取得、After 側の引数にセットしているので、この1行だけで一番後ろに追加されます。


まとめ

今回はマクロの記録機能とその使い方、文法の違いなどをご紹介しました。

記録したコードはそのままでは動かないことも多く、Microsoft Learn で調べた上で、LotusScriptに移植する必要があります。

そうはいっても、マクロの記録は、実現方法のきっかけづくりとして、オブジェクトやメソッドにあたりを付けるという意味で、重要な役割を持っています。ぜひ、ご活用ください。

前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿