質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1611閲覧

同列内の1行1行において、特定の文字より前を削除したい

rinrinapple

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/05/18 05:19

GAS初心者です。GASにおいて同列内の複数セルの中から特定の文字列より前を削除したいのですがどうすればいいでしょうか?

列1列2
abcde=fgfg
asfgde=orangeorange
jhddthyjde=appleapple

このような感じで、de=より前の文字を削除してそれより後の文字列だけを表示したいです。

実際に書いたコードは、

JavaScript

1function myFunction() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); 3 let sheetName = '抽出' 4 const sheet = ss.getSheetByName(sheetName); 5 const lastRow = sheet.getLastRow(); 6 let status_list=sheet.getRange(1,1,lastRow,1).getValues(); 7 const a = "de="; 8 const b = status_list.slice(status_list.indexOf(a)) 9 sheet.getRange(1,2,lastRow,1).setValues(b); 10 11 console.log(b); 12 13}

で、次のようなエラーが出ました。
Exception: The number of rows in the data does not match the number of rows in the range.

二次元配列に対して、出力しているbの値が1個だからだと思うのですがそれをどううまく表示させればいいかわかりません。

ご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.a_teratail

2022/05/18 05:38

> 二次元配列に対して、出力しているbの値が1個だから はい。lastRowの値が3で、bは[ [ 'jhddthyjde=apple' ] ]になってました。 > sheet.getRange(1,2,lastRow,1).setValues(b); なので、ここは1行2列目のセルから、3行1列分の値を設定するということになります。 bは1行分しかないので、エラーになっています。 表示させるのは bの内容を実行ログにでしょうか? それとも、スプレッドシートに表示でしょうか?
rinrinapple

2022/05/18 05:39

早速回答ありがとうございます。 最終的にはスプレッドシートに表示しようとしています。 現状では上書きか別の列に書き込むかはどちらでも構いません。
guest

回答1

0

ベストアンサー

スプレッドシートへの表示(書き込み)とのことなので、コードを下記のように修正して実行してみてください。

gs

1function myFunction098() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); 3 let sheetName = '抽出' 4 const sheet = ss.getSheetByName(sheetName); 5 const lastRow = sheet.getLastRow(); 6 let status_list = sheet.getRange(1, 1, lastRow, 1).getValues(); 7 const a = /.*de=/; 8 let values = [] 9 status_list.forEach(function (vv) { 10 if (vv[0].match(a) == null) { 11 // 特定の文字がない場合は空白 12 values.push(['']) 13 } else { 14 // 特定の文字がある場合は特定の文字より前を全て置換 15 values.push([vv[0].replace(a, "")]) 16 } 17 }) 18 19 // 書き込みセルの場所を変える場合は、「1, 2」の部分を変更 20 sheet.getRange(1, 2, values.length, values[0].length).setValues(values); 21}

ご確認の方、よろしくお願いします。

投稿2022/05/18 05:46

編集2022/05/18 06:05
k.a_teratail

総合スコア845

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rinrinapple

2022/05/18 05:58 編集

ありがとうございます!動きました! このような書き方があったとは驚きました。引き続き勉強していきたいと思います。 ちなみに、仮に特定の文字列(今回の場合de=)がなかった場合空白にするためにはif分で空にすれば良いのでしょうか、、?
k.a_teratail

2022/05/18 06:03

はい。 if文追加で空にすれば良いです。 回答のコードにif文追加しておきますね。
rinrinapple

2022/05/18 06:10

非常にわかりやすく、またご丁寧なご指導ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問