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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

7437閲覧

Google Apps Script 空白を除いて昇順で並べ替えがしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Google スプレッドシート

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

Google Apps Script

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

0グッド

2クリップ

投稿2019/04/12 07:12

編集2019/04/15 00:40

前提・実現したいこと

Googleスプレッドシートを開き
A列からD列まで入力し、C列とD列を範囲指定してD列を基準に
昇順並べ替えをしたいです。

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

指定した範囲の、データが含まれているデータのみを指定して
並べ替えをしたいがうまくいきません。
自分でいろいろ調べ、いろんな方の実用例等を参考にしましたが
まったくの初心者でこの次をどうしていいのか分かりません。

JavaScript

1function myFunction() { 2 var spreadsheet=SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet=spreadsheet.getSheets()[0]; 4 var lastcol=sheet.getRange("D:D").getValues(); 5 var lastrowD=lastcol.filter(String).length; 6 7};

試したこと

初心者なりに見様見真似で以下のコードを書いて並べ替えは成功しますが
ascending:trueと最後に記載すると空白部分が一番上にきて
データ入力されたセルが後ろのほうに並べ替えてしまいます。
また、falseにすると空白セルは後ろへいき、入力されたデータは上にくるのですが
D列に記載した番号が当たり前ですが「10.9.8.7..」となります。
なので空白セルは除いた並べ替えがしたいと思い、上記に記載したコードを
調べながら書きましたが分からなくなってしまいました。

JavaScript

1function myFunction() { 2 var spreadsheet=SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet=spreadsheet.getSheets()[0]; 4 var lastrow=sheet.getLastRow(); 5 var lastcol=sheet.getLastColumn(); 6 sheet.getRange(1, 3, lastrow, lastcol).sort({column: 4, ascending: false}); 7 8}

補足情報(FW/ツールのバージョンなど)

まったくの初心者で関数が少しわかる程度の者です。
業務でGoogleスプレッドシートを使う事が多く、業務効率化とスキルアップで
GASの存在を知り勉強し始めて、手始めに今回の並べ替えを自分でやってみようと
したところさっそく行き詰った次第でございます。
レベルの低い質問でお恥ずかしいですがご教授ください。

###補足情報(シートデータの具体的な内容)
質問があったのでシートデータの内容を記載します。
不備ございましたら教えてください。

内容としては商品の在庫確認するための商品リストとチェックリストの
フォーマットです。

『シート1』商品リスト
セルA:1.2.3.4..といった番号
セルB:商品の区分(例:冷蔵庫/エアコン/テレビ)
セルC:型番+日付
セルD:セルCには型番以外に日付まで入っているため純粋な型番を抽出するため
関数のMIDを使って型番を抽出

『シート2』チェックリストのフォーマット
セルA:1.2.3.4..といった番号
セルB:VLOOKUPでセルAの番号を検索キーとし、シート1から型番を反映
セルC:作業者が現物確認できたら✔を書き込む用の空白枠

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

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

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

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

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

dodox86

2019/04/12 08:07 編集

プログラムコードはマークダウンで書くと見易くなり、回答も得られやすくなると思います。お手数ですが、修正をお願いいたします。 https://teratail.com/help/question-tips https://teratail.com/questions/41441 また、シートのデータとしては具体的にどのようなものでしょうか。例を挙げられますか。(試したところ、今のコードでお望みの動作になっているように思えます)
退会済みユーザー

退会済みユーザー

2019/04/15 00:42

コメントありがとうございます。 プログラムコードの記載方法の修正とシートのデータ内容を質問に記載致しました。
guest

回答1

0

ベストアンサー

dodox86さんが試して頂き、正常に作動したとの事で私も別のスプレッドシートに適当に作ったデータを並べ替えましたが、下記のコードで正常に昇順で並べ替えが出来ました。
改めて並べ替えしたいデータを確認しました。

『シート1』の商品リストには以下のように記載してあります。
セルA:1.2.3.4..といった番号
セルB:商品の区分(例:冷蔵庫)
セルC:日付+型番 (例:20190415-AB123-45)
セルD:セルCには型番以外に日付まで入っているため純粋な型番を抽出するため関数のMIDを使って型番を抽出(例:AB123-45)

やりたい事:セルDをキーとして昇順並べ替えをしたい。
問題:昇順並べ替えををすると”空白”が上にきて型番が記載されたセルが下に並べ替えされる。
原因:セルDには一見空白に見えても関数の入っているセルがあった。
対処:不必要な関数の記載されたセルは削除し、ascending: trueでソースコードを書き直すと正常に並べ替えが出来ました。

そもそも、コードが間違っているという所ではなく初歩から間違っておりました・・・。
大変お恥ずかしい限りですがコメントしてくださり誠にありがとうございました。

JavaScript

1function myFunction() { 2 var spreadsheet=SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet=spreadsheet.getSheets()[0]; 4 var lastrow=sheet.getLastRow(); 5 var lastcol=sheet.getLastColumn(); 6 sheet.getRange(1, 3, lastrow, lastcol).sort({column: 4, ascending: true}); 7 8}

投稿2019/04/15 02:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dodox86

2019/04/15 07:19 編集

ご自分で解決されたようで良かったです。書かれているように、一見、セルにデータが入っていないように見えても実際は入っているケースがあって、偶然にも先ほど、同じような原因が関係している(かもしれない)ご質問にも回答させていただきました。https://teratail.com/questions/184304 ご参考まで。
退会済みユーザー

退会済みユーザー

2019/04/15 07:56

ありがとうございました。 また教えてくださったリンク先も見て勉強致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問