Microsoft OfficeマクロをONLYOFFICEマクロに変換する方法

2023年07月06日著者:Denis

Microsoft OfficeのVBAマクロをONLYOFFICEでシームレスに動作するマクロに変換する方法を疑問に思ったことはありませんか?この変換に直接的な解決策はありませんが、この記事では、ユーザー様から送られてきたVBAマクロを変換する手順をご説明します。

Transforming a Microsoft Office macro into an ONLYOFFICE macro

VBAマクロ

元のVBAマクロは次の通りです:

Sub Button1_Click()
    Dim mycel As Range
    For Each mycel In Columns("D:D").SpecialCells(xlCellTypeConstants, 23)
        If mycel = [TODAY()] Then mycel.Offset(0, 1) = [This_value]
    Next
End Sub

このマクロはD列の定数値23のセルをスキャンし、各セルの値が[TODAY(] と書かれたセルの値と等しいかどうかをチェックする。値が一致すれば、[This_value]とラベル付けされたセルの値で、1列右にオフセットされた次の列のセルを更新する。

Transforming a Microsoft Office macro into an ONLYOFFICE macro

ONLYOFFICEマクロの構築

このマクロをONLYOFFICEと互換性のあるJavaScriptマクロに変換するには、ONLYOFFICE APIを活用します。

ONLYOFFICEマクロでは、まずApi.GetActiveSheet()関数を使ってアクティブシートを取得します。そして、VBAマクロの[TODAY()]と[This_value]に対応するセルA2とA4から値を取得します:

var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();

次に、sheet.GetRange(“D1:D10”)を使用して、反復処理するセル範囲を定義します。この範囲は、この例ではD列を表しますが、特定のニーズに応じて調整することができます:

var dateRange = sheet.GetRange("D1:D10");

ForEach関数を使用して、定義された範囲内の各セルを繰り返し処理します。各セルについて、range.GetValue()を使って現在の値を取得し、セルA2の値と比較します。両者が一致すれば、range.GetRow()で現在のセルの行番号を取得し、sheet.GetRange(“E” + row)でE列の対応するセルを取得します:

dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // Check if the current date matches the value in cell A2
  if (currentDate === dateValue) {
    // Get the corresponding cell in column E
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);  }
});

最後に、oRange.SetValue(updateValue)を使って、次のセル(1列右にオフセット)の値をセルA4の値で更新します:

   // Update the value in the next cell
    oRange.SetValue(updateValue);
  }
});

マクロコード全体は以下の通りです:

(function()
{
    var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();
var dateRange = sheet.GetRange("D1:D10");
dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // Check if the current date matches the value in cell A2
  if (currentDate === dateValue) {
    // Get the corresponding cell in column E
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);
    // Update the value in the next cell
    oRange.SetValue(updateValue);
  }
});
})();

マクロを実行し、マクロがどのように機能するか見てみましょう!

結論として、ONLYOFFICEではVBAマクロからJavaScriptマクロへの直接変換はできません。しかし、ONLYOFFICE用のマクロを構築する際に、既存のVBAマクロをリファレンスとして使用することは可能です。ONLYOFFICE APIメソッドを活用し、必要な調整を行うことで、同様の機能を実現することができます。

多少のコード再構築が必要かもしれませんが、そのプロセスは管理可能です。記事で概説したいくつかのガイダンスにより、強力なONLYOFFICEマクロをうまく作成できることを願っています。

ONLYOFFICEの無料アカウントを登録する

オンラインでドキュメント、スプレッドシート、スライド、フォーム、PDFファイルの閲覧、編集、共同作業