@irigoma

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GASにて検索したセルの隣の値を取得したいです

解決したいこと

GASでのエラー「TypeError: search.getA1Notation is not a function」を解決したいです。

Google Apps Script にて、検索したキーワードの横のセルの値を取得したいのですが、エラーが出てしまいます。初めて書いているため無茶なところが多いかもしれません。教えていただけたら嬉しいです。

発生している問題・エラー

TypeError: search.getA1Notation is not a function

該当するソースコード

function myfuntion(){
    var book = SpreadsheetApp.getActiveSpreadsheet();
    var tsheet = book.getSheets()[0];
    var search = tsheet.createTextFinder("あいうえお");
    var range = search.getA1Notation();
    console.log(range);
    var score = range.offset(0,1).getValue();
    console.log(score)
}
0 likes

1Answer

まず,createTextFinder()TextFinderを返します.

irigomaさんはここで変数searchTextFinderを格納していますが,次のリンクでもわかるようにTextFindergetA1Notation()はありません.

次に,得られたTextFinderの持つメソッドとして今回の仕様に使えそうなのはfindAll()があります.

findAll()Range[]を返してくれます.Rangeの機能にはgetA1Notation()offset()があります.

以上より,

function myfuntion(){
    var book = SpreadsheetApp.getActiveSpreadsheet();
    var tsheet = book.getSheets()[0];
    var search = tsheet.createTextFinder("あいうえお");
    var ranges = search.findAll();
    ranges.forEach((range) => {
        console.log(range.getA1Notation());
        console.log(range.offset(0, 1).getValue());
    });
}

とすることができます.複数見つかる場合には工夫してrng.offset(0, 1).getValue()で得られた値を配列に格納するなどした方が良さそうです.

最初の1つしか使わない前提でやるなら,findAll()ではなくfindNext()を用いることもできます.

findNext()はただのRangeを返しますので,元々書かれていたとコードに近い実装ができます.

function myfuntion(){
    var book = SpreadsheetApp.getActiveSpreadsheet();
    var tsheet = book.getSheets()[0];
    var search = tsheet.createTextFinder("あいうえお");
    var range = search.findNext();
    console.log(range.getA1Notation());
    console.log(range.offset(0, 1).getValue());
}

とりあえず公式ドキュメントを読むようにしてみましょう.どのメソッドがどのようなオブジェクトを返してくれて,そのオブジェクトにはどのようなメソッドが機能として用意されているか確認してから実装するのが良さそうです.

0Like

Comments

  1. @irigoma

    Questioner

    リンクまで丁寧に貼っていただきありがとうございます!!! 勉強します。こんな質問にも答えていただきありがとうございます。助かりました!

Your answer might help someone💌