LoginSignup
2
0

スプレッドシートでリンクを貼るマクロを作ってみた

Last updated at Posted at 2023-11-29

Redmine のチケットをスプレッドシートで整理したときに、実際のチケットへのリンクを貼りたいと思い、マクロを作成することにしました。

仕様

選択したセル範囲のセルをすべて走査し、セル内の値が数字であれば、その数字をチケット番号として所定の Redmine へのリンクを貼る、という仕様にしました。

選択したセル範囲をすべて走査するために、

  1. 選択された複数の矩形のセル範囲 (Range)
  2. 矩形セル範囲の列
  3. 矩形セル範囲の行

という形で 3段階のループを回しています。

ソース

Google スプレッドシートでマクロを作る方法は、以下を参照してください。

スクリプトを編集して、作成したマクロは最終的に以下のようになりました。
リンクは HYPERLINK 関数ではなく、RichTextでリンクを貼る方法をとっています。

マクロ.gs
function link_redmine() {
  // ベースとなるURL
  let baseUrl = 'https://redmine.example.com/issues/';
  // 選択範囲の取得
  let selection = SpreadsheetApp.getSelection();
  let rangeList = selection.getActiveRangeList();
  let ranges = rangeList.getRanges();
  // 矩形セル範囲
  for (let i in ranges) {
    let col = ranges[i].getNumColumns();
    let row = ranges[i].getNumRows();
    // 列
    for (let j = 0; j < col; j++) {
      // 行
      for (let k = 0; k < row; k++) {
        let cell = ranges[i].getCell(k + 1, j + 1);
        let issueNumber = cell.getValue();
        // 数字だけに適用
        if (!isNaN(issueNumber) && issueNumber > 0) {
          // リンクを設定
          let link = baseUrl + issueNumber;
          let richText = SpreadsheetApp.newRichTextValue()
          .setText(issueNumber)
          .setLinkUrl(0, issueNumber.toString().length - 1, link)
          .setTextStyle(SpreadsheetApp.newTextStyle().setUnderline(true).build()) // 下線
          .build();
          cell.setRichTextValue(richText);
        }
      }
    }
  }
}

選択したセル範囲のセルすべてに何かを実行する場合、 3段階のループは常套句のように使えると思います。

実行した様子

リンクを貼りたいセルを選択して、マクロを実行。

実行前2.png

選択した数字に Redmine チケットの URL が設定されます。

実行後2.png

今回は Redmine チケットへのリンクを貼るようにしましたが、スプレッドシートのセル内の値をパラメータとしてリンクできるので、応用範囲は広いと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0