Google関連

[Google Apps Script]スプレッドシートのセル範囲に指定した値が含まれているかを判定する

先日、もり(@moripro3)さんから、「スプレッドシートの二次元配列の要素をGASでカッコよく検索できないか?」というツイートがありました。

二次元配列の検索となると、findIndex関数か?とも思ったのですが、今のGASでは使えません。

仕方が無いので、Array.prototype.concat.applyを使って一次元配列にしてからindexOfを使う方法を考えてみました。

function myFunction() {
  var cells = SpreadsheetApp.getActiveSheet().getRange(2, 2, 3, 3);
  var result = Array.prototype.concat.apply([],cells.getValues()).indexOf("なにぬねの");
  if (result >= 0) {
    SpreadsheetApp.getUi().alert("指定した値のセルが見つかりました。");
  } else {
    SpreadsheetApp.getUi().alert("指定した値のセルが見つかりませんでした。");
  }
}

無理やり感はありますが、大分シンプルです。
ただ、個人的にはヒットしたセルをオブジェクトとして使えるようにしたいところですので、下記のようなコードも書いてみました。

function myFunction2() {
  var cells = SpreadsheetApp.getActiveSheet().getRange(2, 2, 3, 3);
  var cell = getMatchRange(cells, "わをん");
  if(cell === void 0){
    SpreadsheetApp.getUi().alert("指定した値のセルが見つかりませんでした。");
  } else {
    cell.activate();
  }
}

//指定した値にマッチする最初のセルを返す
function getMatchRange(cells, str) {
  var reg = new RegExp("^" + str + "$"); //必要に応じて条件は変更
  for (var col = 1; col <= cells.getNumColumns(); col++) {
    for (var row = 1; row <= cells.getNumRows(); row++) {
      var cell = cells.getCell(row, col);
      if (cell.getValue().match(reg)) {
        return cell;
      }
    }
  }
}

セル範囲を1つずつ調べていき、ヒットしたらRangeを返すという、非常に泥臭い処理ですが、ヒットしたセルに対して何らかの処理を行いたい場合には使えるコードだと思います。

これで一先ず目的は達することが出来ましたが、もっとスマートな方法はないものか・・・!?🤔


2019/2/1 追記:
もり(@moripro3)さんがご自身のブログで記事を書かれていました。

同じ目的でも書き方は色々あって面白いですね!

2019年1月の人気記事前のページ

指定したスライドにユーザー設定レイアウトを適用するPowerPointマクロ次のページ

関連記事

  1. Google関連

    [Google Apps Script]Google フォームとkintoneを連携させる方法(添付…

    前回の記事では、GASを使ってGoogle フォームで入力された回答を…

  2. Google関連

    [Google Apps Script]Google ドライブにある画像をスライドに挿入する

    最近取り扱っているGoogle Apps ScriptによるGoogl…

  3. Google関連

    [Google Apps Script]スプレッドシートで不要な空白文字を削除する

    スプレッドシートでは、「データ」メニューにある「空白文字を削除」を実行…

  4. Microsoft Graph

    [Google Apps Script]Microsoft Graph APIを使ってMicroso…

    Microsoft Graph APIを使って、OneDriveにある…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP