ONLYOFFICEマクロでセルのテキストをダッシュで囲む
セルの値を一つずつ手作業で整形するのは、特に同じパターンを数十、数百のセルに適用する必要がある場合、面倒な作業です。この記事では、選択したセル内のすべての文字をダッシュで自動的に囲む、シンプルなONLYOFFICEスプレッドシートエディタ用マクロをご紹介します。

このマクロを使う理由
このように区切り文字で文字を囲む処理は、装飾的なラベルの生成、見た目にはっきり区別できるプレースホルダー値の作成、あるいは区切り文字でパディングされた文字列を想定するシステムへのインポート用データの準備などに役立ちます。これを大量のセル範囲に対して手作業で行うのは遅く、ミスも起きやすい作業です。マクロなら瞬時に処理でき、しかも空のセルやすでに囲まれているセルを賢くスキップしてくれるので、ダッシュが二重にならないよう安心して再実行できます。
マクロを組み立てる
ここでは、スクリプトの各部分がどんな役割を果たしているのか、詳しく見ていきましょう。
現在の選択範囲を取得する
このマクロは、まずユーザーが現在選択している指定範囲のセルを取得することから始まります。
let selection = Api.GetSelection();
selection.ForEach(function (cell) {
// ... 各セルの処理をここで行う
});
Api.GetSelection()は、シート上で現在選択されているセル範囲を返し、ForEach()はその範囲内のすべての個別のセルをループ処理し、コールバック関数を1回ずつ呼び出します。
空のセルをスキップする
処理を行う前に、マクロはまずそのセルに実際に値があるかどうかを確認します。
let cellValue = cell.GetValue();
if (cellValue === null || cellValue === undefined || cellValue === "") {
return;
}
GetValue()はセルの現在の内容を読み取ります。セルが空(null、undefined、または空文字列)の場合、関数はその場で早期リターンし、次のセルへと進みます。これにより、空のセルはそのまま手つかずで残ります。
すでにダッシュで囲まれているセルをスキップする
このマクロは複数回実行しても安全であるべきなので、そのセルがすでに処理済みかどうかもチェックします。
cellValue = String(cellValue);
if (/^---(?:.---)+$/.test(cellValue)) {
return;
}
まず値はString()メソッドで文字列に変換され、安全にテストしたり1文字ずつ処理したりできるようになります。正規表現/^—(?:.—)+$/は、すでにこのパターンに従っている文字列にマッチします。マッチした場合、マクロはそのセルを二重に囲むのではなく、そのままスキップします。
各文字をダッシュで囲む
ここがこのマクロの中核部分で、新しい文字列を1文字ずつ組み立てていきます。
let sTemp = "---";
for (let c = 0; c < cellValue.length; c++) {
sTemp += cellValue.charAt(c) + "---";
}
ループの各反復は、元の値から次の1文字を取り出し、その後に「—」を続けて追加していくことで、各文字の間にダッシュを挿入しながら文字列を段階的に再構築していきます。
結果をセルに書き戻す
最後に、新しく組み立てた文字列をセルに保存します。
cell.SetValue(sTemp);
完全なマクロコード
(function () {
// スプレッドシート上で現在選択されているセルを取得
let selection = Api.GetSelection();
// 選択された各セルをループ処理
selection.ForEach(function (cell) {
// セルの現在の値を取得
let cellValue = cell.GetValue();
// 空、null、undefinedのセルはスキップ — 処理対象なし
if (cellValue === null || cellValue === undefined || cellValue === "") {
return;
}
// 値が数値などの場合でも文字列として扱う
cellValue = String(cellValue);
// すでにパターンに一致しているセルはスキップ
if (/^---(?:.---)+$/.test(cellValue)) {
return;
}
// 先頭の "---" から新しい値の組み立てを開始
let sTemp = "---";
// 元の値の各文字を "---" 区切りで囲んでいく
for (let c = 0; c < cellValue.length; c++) {
sTemp += cellValue.charAt(c) + "---";
}
// 変換後の値をセルに書き戻す
cell.SetValue(sTemp);
});
})();
それでは、実際にマクロを実行して動作を確認してみましょう!

使い方
- ONLYOFFICEスプレッドシートエディタでスプレッドシートを開きます。
- 整形したいセル範囲を選択します。
- 表示→マクロに移動し、新しいマクロを作成して、上記のコードを貼り付けます。
- 実行をクリックします。
選択範囲内の空でないすべてのセルが即座にダッシュで囲まれ、空のセルとすでに囲まれているセルはそのまま残ります。
このマクロは、そのままではセルを一つずつ編集する必要がある反復的な整形作業を、わずか数行のコードでどう自動化できるかを示す実用的な例です。そして、ダッシュ以外の区切り文字やパターンにも同じように簡単に応用できます。
もしカバーしてほしいマクロのアイデアがある、あるいはこのマクロをもっと改善できる方法を思いついたという方は、ぜひONLYOFFICEコミュニティフォーラムのマクロカテゴリーで提案を共有してください。新しいマクロの例をリクエストしたり、ONLYOFFICEチームや他の開発者とアイデアを議論したりするのに最適な場所です。
ONLYOFFICEの無料アカウントを登録する
オンラインでドキュメント、スプレッドシート、スライド、フォーム、PDFファイルの閲覧、編集、共同作業


