95639


会社名を「（東京都）元ダミーデータ」A1:A5列、文字列操作したものをB12からB16まで入力したいです。  
通常のコピー＆ペーストは実行できますが、社名を文字列削除してB12からB16まで貼り付ける操作ができません。  
`.replace` メソッドを使用している行で、以下のエラーが発生しています。

[code]

    TypeError: COMP.replace is not a function
    
[/code]

数字等は入力されていないので、テキスト型と数値型などの型違いが起こるはずがないのですが、基本的にこのエラーは数値型のデータを文字列操作しようとして出てくると書かれていました。

どうしてこのようなエラーが起きてしまうのでしょうか？

[![会社名元データ](https://i.stack.imgur.com/bhoa6.png)](https://i.stack.imgur.com/bhoa6.png)

[![こんな風にコピー＆ペーストしたい](https://i.stack.imgur.com/8ykGD.png)](https://i.stack.imgur.com/8ykGD.png)

[![今現在できていること](https://i.stack.imgur.com/7NYSA.png)](https://i.stack.imgur.com/7NYSA.png)

[code]

    function COMPANY() {
      var spreadsheet = SpreadsheetApp.getActive();
      //スプレッドシートをGASで使う宣言
      for (i=1; i<=10; i++) {
      let  v = i+11;
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('現在実行した結果出力されるシート'), true);
      spreadsheet.getRange('A' + i).activate();
      let COMP = spreadsheet.getRange('\'（東京都）元ダミーデータ\'!A' + i)
      COMP.copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
     
    
      let COMP2 = COMP.replace("社名", "");
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('現在実行した結果出力されるシート'), true);
      spreadsheet.getRange('B' + v).activate();
      COMP2.copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
      //会社名をB1:B10と、B12:B22まで出力
       } 
    }
    
[/code]

以下が単体でなら実行できる関数です。

[code]

    function COMPANY() {
      var spreadsheet = SpreadsheetApp.getActive();
      //スプレッドシートをGASで使う宣言
      for (i=1; i<=10; i++) {
      let  v = i+11;
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('現在実行した結果出力されるシート'), true);
      spreadsheet.getRange('A' + i).activate();
      let COMP =spreadsheet.getRange('\'（東京都）元ダミーデータ\'!A' + i)
      COMP.copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
     
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('現在実行した結果出力されるシート'), true);
      spreadsheet.getRange('B' + v).activate();
      COMP.copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
      //会社名をB1:B10と、B12:B22まで出力
       } 
    }
    
[/code]


CC BY-SA 4.0
2023-07-15T05:37:25.423
95634
2023-07-15T13:05:03.253
2023-07-15T07:35:36.743
3060
58928
question
google-apps-script google-spreadsheet
"社名（企業名）" となっているセルの値を文字列操作して "社名" という文字列を削除したい


エラーが発生しているのは、`Range`オブジェクト(`COMP`)には`replace()`関数が存在しないからでしょう。

1個1個のセルを`Range`オブジェクトのまま`replace`したり`copyTo`するのではなく、`getValue`してstringオブジェクトにしてから`replace`し、それを`setValue`するのが良いでしょう。  
あとA列の有効なデータの数だけループした方が良いでしょう。  
そして文字列の置換は`社名`だけではなく改行も含めて`社名\r\n`か`社名\n`とかではないですか？  
Windows上のCSVファイルから作ると`社名\r\n`になりますが、スクレイピングして取得したデータがどうなっているかは実験して確かめてください。

以下のように出来るはずです。

[code]

    function COMPANY() {
      var spreadsheet = SpreadsheetApp.getActive();
      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('A'+row).getValue().replace("社名\r\n",""));
      }
    }
    
[/code]


CC BY-SA 4.0
2023-07-15T13:05:03.253
95639
2023-07-15T13:05:03.253
26370
95634
answer