95834


B列11行目から21行まで、`（株）` を `株式会社` 表記に直すコードを組んだのですが、実行時間が異常に長いです （10分近くかかる）。

現在サーバー上の問題でも起きているのか、それとも下記のコードに無駄な点が多いのか、ご意見をお聞かせください。

[code]

    function Change() {
        var spreadsheet = SpreadsheetApp.getActive();
        spreadsheet.setActiveSheet(spreadsheet.getSheetByName('ペースト&作業用シート'), true);
        let lastRow = spreadsheet.getRange('A1').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRowIndex();
        let targetBase = 11;
        for(let row = 1; row <= lastRow; row++){
            spreadsheet.getRange('B'+(targetBase+row)).setValue(spreadsheet.getRange('B'+row).getValue().replace("(株)","株式会社"));
        }
    }
    
[/code]


CC BY-SA 4.0
2023-08-03T02:13:39.093
95833
2023-08-03T05:35:22.903
2023-08-03T05:33:31.640
3060
58928
question
google-apps-script google-spreadsheet
文字列を置換するだけのスクリプトが凄く遅い


`getValue`や`setValue`をループ内で使用するとプロセスコストが高くなってしまいます。

Ref  
[Benchmark: Reading and Writing Spreadsheet using Google Apps
Script](https://tanaikech.github.io/2018/10/12/benchmark-reading-and-writing-
spreadsheet-using-google-apps-script/)

この場合、シンプルな方法としてTextFinderを使用するのはいかがでしょうか。表示されているスクリプトを修正しますと、次のようになります。

[code]

    function Change() {
      var sheet = SpreadsheetApp.getActive().getSheetByName('ペースト&作業用シート');
      sheet.getRange("B11:B" + sheet.getLastRow()).createTextFinder("(株)").replaceAllWith("株式会社");
    }
    
[/code]

この修正では、"ペースト&作業用シート"シートのセル"B11:B"の`(株)`は、`株式会社`に置換されます。

### 参考

  * [createTextFinder(findText) of Class Range](https://developers.google.com/apps-script/reference/spreadsheet/range?hl=ja#createtextfinderfindtext)


CC BY-SA 4.0
2023-08-03T03:00:32.260
95834
2023-08-03T05:35:22.903
2023-08-03T05:35:22.903
3060
19460
95833
answer