teratail header banner
teratail header banner
質問するログイン新規登録

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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

447閲覧

Googleスプレッドシートで空白の行を削除したい。

yuki996014

総合スコア2

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2024/02/14 04:18

0

0

実現したいこと

Googleスプレッドシートで空白の行を削除したい。

発生している問題・エラーメッセージ

下記サイトに載っていたコードを参考に実行しましたが、
実行時、空白であるにもかかわらず、消えずに残ってしまう行があり、
もう1度実行すると今度は消えるといった事象が発生します。

エラー等はなく、実行自体は問題なく完了しています。

該当のソースコード

function trashRow(){
//A,使用するスプレッドシートの定義
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();

//B, 1つずつ行を検索して空白なら削除
for(var i=1; i<=lastRow; i++){
const nameCell = sheet.getRange(i,1); //「名前」列のセルから値を取得
if(nameCell.isBlank()){
sheet.deleteRow(i);
}
}
}

●参考サイト
https://daily-coding.com/deleterow/

ご教授よろしくお願いいたします。

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

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

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

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

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

bebebe_

2024/02/14 05:15

これだと例えば3,4行目が空白の場合3行目をチェックして削除して4行目以降が1つ上にあがりますが次のループでは4行目をチェックするので3行目に来た空白の行はスルーされます。 削除しても影響が出ないように最終行から前にチェックして削除していくか削除実行後にもう一度その行をチェックするようにiを-1するようにしてはどうでしょうか。
yuki996014

2024/02/14 08:11

お二方のご回答を参考にさせていただき、無事解決することができました。 根本的に動作の仕組みを勘違いしていたのが原因でした。 YellowGreen様をベストアンサーとさせていただきましたが、bebebe_様も素早い回答で大変参考になりました。本当にありがとうございました
guest

回答1

0

ベストアンサー

連続して行削除を行う場合は、
降順に行うか削除後に行番号のインデックスを調整する必要があることは
既にbebebe_様からご指摘のとおりですので、
この回答(コードを見やすいように回答欄を使いました)は、
あくまでも参考としてご覧ください。

行を削除する処理は
対象の行が飛び飛びになると思うので、
その都度deleteRowで処理することになると思いますが、

空白行の検出は、
行ごとにセルの値を取得するのではなく
対象の列のデータを一括で取得してから検査した方が
データが大量にあるときに少し効率的になると思います。

例えば次のようなコードが参考になると思います。

JavaScript

1// 空白の確認は一括で行うバージョン 2function trashRows() { 3 // A,初期設定 4 const sheet = SpreadsheetApp.getActiveSheet(); 5 const startRow = 1; // 検査開始行 6 const lastRow = sheet.getLastRow(); 7 const targetColumn = 1; // 検査対象の列(A列: 1) 8 9 // B, 検査する列のデータを一括取得して空白の行番号を配列に蓄積 10 const values = sheet.getRange(startRow, targetColumn, lastRow, 1) 11 .getValues() 12 .flat(); 13 const rows = []; // 行番号を蓄積する配列 14 for (let i = 0; i < values.length; i++) { 15 const value = values[i]; 16 if (value === '') { 17 rows.push(i + startRow); 18 } 19 } 20 21 // C.配列に蓄積された行を降順に削除 22 rows.sort((a, b) => b - a); // 配列を行番号の降順に並び替え 23 for (const row of rows) { 24 sheet.deleteRow(row); 25 } 26}

投稿2024/02/14 07:28

編集2024/02/14 07:29
YellowGreen

総合スコア868

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

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

yuki996014

2024/02/14 08:11

お二方のご回答を参考にさせていただき、無事解決することができました。 根本的に動作の仕組みを勘違いしていたのが原因でした。 YellowGreen様をベストアンサーとさせていただきましたが、bebebe_様も素早い回答で大変参考になりました。本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問