2024年に試してみたい15の便利なJavaScriptマクロ

2023年12月27日著者:Denis

Microsoft OfficeにはVBAベースのマクロがありますが、ONLYOFFICEはJavaScriptベースのマクロでさらに一歩進み、より柔軟性を提供します。この記事では、従来のVBAベースのものに代わる説得力のある数多くのONLYOFFICEマクロのいくつかをご紹介します。

15 useful JavaScript macros to try in 2024

JavaScriptマクロとは?

マクロは作業を自動化する強力なツールです。ONLYOFFICEでは、文書、スプレッドシート、プレゼンテーション、OFORMファイルの編集をカバーするマクロを作成するためにJavaScriptを採用しています。これらのJavaScriptマクロにより、ユーザーはタスクの自動化、文書の機能強化、ONLYOFFICEアプリケーションのカスタマイズを行うことができます。

なぜVBAマクロに代わるものが必要?

カスタムJavaScriptマクロを記述する機能により、自動化、インタラクティブ性、外部システムとのシームレスな統合を実現することができます:

  • 自動化: 自動化:JavaScriptマクロにより、文書内の書式設定、データ操作、計算などのタスクを自動化できます。
  • インタラクティブ性: マクロは、ユーザーのアクションやイベントに応答することで、文書をよりインタラクティブにします。
  • カスタマイズ: ユーザーはONLYOFFICEアプリケーションの動作を、特定のニーズに応じてカスタマイズすることができます。
  • 統合: JavaScriptマクロは、外部システムやサービスとの統合を可能にし、ONLYOFFICEと他のプラットフォームとのデータ交換やコミュニケーションを可能にします。

ONLYOFFICEマクロがJavaScriptを利用していること、そしてその柔軟性を超えて、JavaScriptは非常に人気のある言語であり、コミュニティも活発です。豊富なチュートリアルが用意されており、JavaScriptを使った様々なタスクの取り組み方について、包括的なガイダンスを提供しています。さらに、詳細なドキュメントでは、JavaScript マクロで使用できるメソッドをわかりやすく説明しています。

Excel VBAマクロとONLYOFFICE JavaScript代替ソフトの比較

選択範囲から重複をハイライト

Excel VBAマクロは以下の通りです:

Sub HighlightDuplicateValues()
Dim myRange As Range
Dim myCell As Range
Set myRange = Selection
For Each myCell In myRange
If WorksheetFunction.CountIf(myRange, myCell.Value) > 1 Then
myCell.Interior.ColorIndex = 36
End If
Next myCell
End Sub

VBAと異なり、重複する値を独自の色で強調表示することで、より高度な機能を提供します:

(function () 
{
    // Background color of cells with non-repeating values
    var whiteFill = Api.CreateColorFromRGB(255, 255, 255);
    // The current index of the color range
    var uniqueColorIndex = 0;
    // Color range to highlight duplicate values
    var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
        Api.CreateColorFromRGB(204, 204, 255),
        Api.CreateColorFromRGB(0, 255, 0),
        Api.CreateColorFromRGB(0, 128, 128),
        Api.CreateColorFromRGB(192, 192, 192),
        Api.CreateColorFromRGB(255, 204, 0)];
    // Function to get color for duplicates
    function getColor() {
        // If you have chosen all the unique colors, then let's go from the beginning
        if (uniqueColorIndex === uniqueColors.length) {
            uniqueColorIndex = 0;
        }
        return uniqueColors[uniqueColorIndex++];
    }
    // Getting an active sheet
    var activeSheet = Api.ActiveSheet;
    // Getting selection on the active sheet
    var selection = activeSheet.Selection;
    // Map of values in cells with the duplicates number
    var mapValues = {};
    // All cells range
    var arrRanges = [];
    // Going through the selection
    selection.ForEach(function (range) {
        // Getting value from cell
        var value = range.GetValue();
        if (!mapValues.hasOwnProperty(value)) {
            mapValues[value] = 0;
        }
        mapValues[value] += 1;
        arrRanges.push(range);
    });
    var value;
    var mapColors = {};
    // We go through all the cells of the selection and setting the highlighting if this value is repeated more than 1 time
    for (var i = 0; i < arrRanges.length; ++i) {
        value = arrRanges[i].GetValue();
        if (mapValues[value] > 1) {
            if (!mapColors.hasOwnProperty(value)) {
                mapColors[value] = getColor();
            }
            arrRanges[i].SetFillColor(mapColors[value]);
        } else {
            arrRanges[i].SetFillColor(whiteFill);
        }
    }
})();

(no title)

すべての行と列の非表示を解除

このVBAスクリプトは、スプレッドシートのすべての行と列の非表示を解除します:

Sub UnhideRowsColumns()
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
End Sub

JavaScriptマクロでも同じことができます:

(function()
{
    var activeSheet = Api.ActiveSheet;
    var indexRowMax = 1048576;
    var n = 1;
    for (let i = 0; i < indexRowMax; i++) {
        activeSheet.GetRows(n).SetHidden(false);
        n++;
    }
    var newRange = activeSheet.GetRange("A1");
    newRange.SetValue("All the rows and columns are unhidden now");
})();

(no title)

このマクロでSetHiddenパラメータをtrueに設定すると、すべての行と列を非表示にすることもできます:

(function()
{
    var activeSheet = Api.ActiveSheet;
    var indexRowMax = 1048576;
    var n = 1;
    for (let i = 0; i < indexRowMax; i++) {
        activeSheet.GetRows(n).SetHidden(true);
        n++;
    }
    var newRange = activeSheet.GetRange("A1");
    newRange.SetValue("All the rows and columns are hidden now");
})();

より高度な機能が必要な場合は、別のブログ記事で特定の行や列を非表示/非表示にできるマクロを詳しく説明しています。

値より大きい値をハイライト

値より大きい値をハイライトするVBAバージョンです:

Sub HighlightGreaterThanValues()
Dim i As Integer
i = InputBox("Enter Greater Than Value", "Enter Value")
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlGreater, Formula1:=i
Selection.FormatConditions(Selection.FormatConditions.Count).S
tFirstPriority
With Selection.FormatConditions(1)
.Font.Color = RGB(0, 0, 0)
.Interior.Color = RGB(31, 218, 154)
End With
End Sub

ONLYOFFICE JavaScriptマクロを使えば、より少ないコード行数で同じタスクに取り組むことができます:

(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value > 5) {
            range.SetFillColor(Api.CreateColorFromRGB(255, 255, 0));
        }
    });    
})();

(no title)

コード行数が少ないにもかかわらず、この代替案はより優れた汎用性を提供します。例えば、if文の条件を変更することで、以下のことが可能になります:

  • より小さい値を強調表示
(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value < 5) {
            range.SetFillColor(Api.CreateColorFromRGB(255, 255, 0));
        }
    });
  • 負の数を強調表示します:
(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value < 0) {
            range.SetFillColor(Api.CreateColorFromRGB(255, 255, 0));
        }
    });
})();
  • 特定のテキストを含むセルをハイライトします:
(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value == 'text') {
            range.SetFillColor(Api.CreateColorFromRGB(255, 255, 0));
        }
    });
 })();

もっと便利なJavaScriptマクロ

  1. ONLYOFFICEスプレッドシートの選択範囲にインデックスを追加するJavaScriptマクロ
    デフォルトの索引付けではうまくいかないことがあります。そこで私たちの時間節約JavaScriptマクロの出番です。選択範囲のすべての行にきちんとインデックスを付け、スプレッドシートのワークフローをよりシンプルにします。
  2. スプレッドシートをコピーする JavaScript マクロ
    スプレッドシートの編集は、特に同じようなデータを持つ複数のスプレッドシートを扱うときには厄介です。このプロセスを簡単にするために、あるスプレッドシートから別のスプレッドシートにデータをコピーし、大きなスプレッドシートを簡単に扱えるようにする JavaScript マクロを作成しましょう。
  3. 複数のBaidu検索結果をスプレッドシートに挿入するJavaScriptマクロ
    Baiduマクロは、単一および複数の検索クエリを管理する効率を高めるために設計された汎用性の高いツールです。あなたの経験レベルに関係なく、そのユーザーフレンドリーなデザインと適応性により、あなたのツールキットに有益な追加となります。
  4. ハイパーリンクをスプレッドシートにインポートするJavaScriptマクロ
    ハイパーリンクは、スプレッドシートの美しさと機能性を大幅に向上させ、ドキュメント内の重要なリソースへのアクセスを容易にします。このJavaScriptマクロは、別のスプレッドシートからリンクデータを抽出してハイパーリンクをインポートします。
  5. 会社のロゴを検索するJavaScriptマクロ
    多くのロゴが存在する昨今、ロゴリファレンスを発見することは少し難しく、混乱を招く可能性があります。しかし、ONLYOFFICEのマクロを使えば、このプロセスを自動化することができます。このJavaScriptマクロは、外部APIから複数のロゴタイプを同時に取得し、スプレッドシートに挿入することができます。
  6. パーソナライズされた性別ベースの挨拶を生成するJavaScriptマクロ
    正しく挨拶することは、敬意、包括性、プロフェッショナリズムを示すため、コミュニケーションにおいて非常に重要です。このJavaScriptマクロは、Genderize.io APIを利用して、パーソナライズされた適切な挨拶を生成します。
  7. Shopifyで注文を追跡するためのJavaScriptマクロ
    今の時代、Eコマースは地理的な障壁を取り払い、一定の収入の流れを促進する貴重なツールとなっています。そのため、注文情報を管理・追跡することは、成功するビジネス戦略の重要な一部です。このJavaScriptマクロは、Shopifyから注文データを取得し、スプレッドシートに挿入します。
  8. CSVとTXTデータをスプレッドシートにインポートするJavaScriptマクロ
    表形式のデータをCSV形式で保存することは、多くの点で非常に実用的であり、このタイプのファイルを非常にポピュラーなものにしています。ONLYOFFICE Docsでは、ローカルのCSVファイルやTXTファイルをインポートすることができます。このJavaScriptマクロは、リモートCSVファイルとTXTファイルのインポートに取り組むのに役立ちます。
  9. 大気質データを監視するJavaScriptマクロ
    ONLYOFFICEマクロは私たちの生活をより快適にしてくれます。日々のルーチンワークを自動化し、巨大なデータの塊を操作するのに役立ちます。このJavaScriptマクロは、現在の大気質データをライブ表示することができます。
  10. OpenAIのデータをセルに入力するJavaScriptマクロ
    AI技術は大きく進歩し、私たちのワークフローを自動化できる貴重なツールになりました。このJavaScriptマクロは、OpenAIから取得したデータをスプレッドシートに入力します。
  11. スプレッドシートデータを分析する JavaScript マクロ
    ChatGPT 4では機能が強化されましたが、トークンコストが安いChatGPT 3.5を好むユーザーもいます。しかし、ChatGPT 3.5にはファイルアップロード機能がないため、ユーザーはデータシートを分析することができません。この JavaScript マクロはこの制限を克服し、スプレッドシートの解析を可能にします。
  12. 選択範囲の重複を削除するJavaScriptマクロ
    このJavaScriptマクロは、スプレッドシートの選択範囲から重複を削除します。このマクロは、スプレッドシートの全体的な使い勝手を向上させるシンプルで効率的なソリューションで、重複したエントリを取り除き、データをクリーンで正確なものにします。

ONLYOFFICEマクロは柔軟で強力なツールであり、VBAマクロの機能を模倣するだけでなく、それを凌駕することができます。

また、ONLYOFFICE APIを活用し、独自の魅力的なマクロを作成することをお勧めします。ご質問やアイデアがありましたら、遠慮なくご連絡ください。私たちはディスカッションやコラボレーションを歓迎します。